{"version":3,"sources":["../node_modules/react/react.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/react-router/lib/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/highlight.js/lib/highlight.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/underscore/underscore.js","../node_modules/prop-types/index.js","../node_modules/redux/es/createStore.js","../node_modules/redux/es/combineReducers.js","../node_modules/redux/es/bindActionCreators.js","../node_modules/redux/es/compose.js","../node_modules/redux/es/applyMiddleware.js","../node_modules/redux/es/index.js","../node_modules/react-redux/es/utils/storeShape.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/react-redux/es/utils/Subscription.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../node_modules/react-redux/es/index.js","../node_modules/fbjs/lib/invariant.js","../node_modules/fbjs/lib/warning.js","../node_modules/react-document-title/index.js","../node_modules/react-dom/lib/reactProdInvariant.js","../node_modules/classnames/index.js","../node_modules/object-assign/index.js","../node_modules/invariant/browser.js","../node_modules/react-dom/lib/ReactDOMComponentTree.js","../node_modules/react-dom/index.js","../node_modules/dom-helpers/node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/js-yaml/lib/js-yaml/type.js","../node_modules/react-hotkeys/lib/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/toArray.js","../node_modules/moment/moment.js","../node_modules/fbjs/lib/ExecutionEnvironment.js","../node_modules/react-widgets/lib/util/PropTypes.js","../node_modules/react-widgets/lib/util/localizers.js","../node_modules/fbjs/lib/emptyFunction.js","../node_modules/react-dom/lib/ReactInstrumentation.js","../node_modules/react-widgets/lib/util/Props.js","../node_modules/codemirror/lib/codemirror.js","../node_modules/react-textarea-autosize/es/index.js","../node_modules/react-dom/lib/ReactUpdates.js","../node_modules/lodash/_root.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/react/lib/ReactCurrentOwner.js","../node_modules/react-dom/lib/SyntheticEvent.js","../node_modules/warning/browser.js","../node_modules/webpack/buildin/global.js","../node_modules/react-router/lib/RouteUtils.js","../node_modules/history/lib/PathUtils.js","../node_modules/react-widgets/lib/util/dates.js","../node_modules/react-dom/lib/PooledClass.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isObjectLike.js","../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","../node_modules/dom-helpers/util/inDOM.js","../node_modules/react-widgets/lib/util/_.js","../node_modules/lodash/cloneDeep.js","../node_modules/react/lib/React.js","../node_modules/react/lib/reactProdInvariant.js","../node_modules/react/lib/ReactElement.js","../node_modules/fbjs/lib/emptyObject.js","../node_modules/react-dom/lib/DOMProperty.js","../node_modules/react-dom/lib/ReactReconciler.js","../node_modules/react-dom/lib/DOMLazyTree.js","../node_modules/react-router/lib/PatternUtils.js","../node_modules/react-router/lib/routerWarning.js","../node_modules/history/lib/LocationUtils.js","../node_modules/lodash/isArray.js","../node_modules/webpack/buildin/module.js","../node_modules/js-yaml/lib/js-yaml/common.js","../node_modules/js-yaml/lib/js-yaml/schema.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_getPrototype.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isPlainObject.js","../node_modules/react-dom/lib/EventPropagators.js","../node_modules/react-dom/lib/EventPluginHub.js","../node_modules/react-dom/lib/SyntheticUIEvent.js","../node_modules/react-dom/lib/ReactInstanceMap.js","../node_modules/react-router/lib/InternalPropTypes.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/_copyObject.js","../node_modules/lodash/isArrayLike.js","../node_modules/lodash/keys.js","../node_modules/js-yaml/lib/js-yaml/exception.js","../node_modules/js-yaml/lib/js-yaml/schema/default_safe.js","../node_modules/create-react-class/index.js","../node_modules/react-widgets/lib/util/widgetHelpers.js","../node_modules/react-widgets/lib/util/dataHelpers.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/react-dom/lib/Transaction.js","../node_modules/react-dom/lib/SyntheticMouseEvent.js","../node_modules/react-dom/lib/setInnerHTML.js","../node_modules/react-dom/lib/escapeTextContentForBrowser.js","../node_modules/react-dom/lib/ReactBrowserEventEmitter.js","../node_modules/history/lib/Actions.js","../node_modules/history/lib/DOMUtils.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/eq.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_getTag.js","../node_modules/js-yaml/lib/js-yaml/schema/default_full.js","../node_modules/dom-helpers/query/height.js","../node_modules/dom-helpers/query/isWindow.js","../node_modules/react-widgets/lib/Button.js","../node_modules/react-component-managers/lib/index.js","../node_modules/spy-on-component/index.js","../node_modules/react-widgets/lib/CalendarView.js","../node_modules/react-widgets/lib/messages.js","../node_modules/react-widgets/lib/util/interaction.js","../node_modules/react-router-redux/lib/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/isomorphic-fetch/fetch-npm-browserify.js","../node_modules/react/lib/ReactComponent.js","../node_modules/react/lib/ReactNoopUpdateQueue.js","../node_modules/react-dom/lib/EventPluginRegistry.js","../node_modules/react-dom/lib/EventPluginUtils.js","../node_modules/react-dom/lib/ReactErrorUtils.js","../node_modules/react-dom/lib/getEventTarget.js","../node_modules/react-dom/lib/isEventSupported.js","../node_modules/react-dom/lib/getEventModifierState.js","../node_modules/react-dom/lib/DOMChildrenOperations.js","../node_modules/react-dom/lib/DOMNamespaces.js","../node_modules/react-dom/lib/createMicrosoftUnsafeLocalFunction.js","../node_modules/react-dom/lib/LinkedValueUtils.js","../node_modules/react-dom/lib/ReactComponentEnvironment.js","../node_modules/fbjs/lib/shallowEqual.js","../node_modules/react-dom/lib/shouldUpdateReactComponent.js","../node_modules/react-dom/lib/KeyEscapeUtils.js","../node_modules/react-dom/lib/ReactUpdateQueue.js","../node_modules/react-dom/lib/validateDOMNesting.js","../node_modules/react-dom/lib/getEventCharCode.js","../node_modules/react-router/lib/PropTypes.js","../node_modules/react-router/lib/AsyncUtils.js","../node_modules/react-router/lib/RouterContext.js","../node_modules/react-router/lib/ContextUtils.js","../node_modules/history/lib/runTransitionHook.js","../node_modules/history/lib/createHistory.js","../node_modules/history/lib/ExecutionEnvironment.js","../node_modules/history/lib/BrowserProtocol.js","../node_modules/lodash/_assignValue.js","../node_modules/lodash/identity.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_getSymbols.js","../node_modules/js-yaml/lib/js-yaml/schema/failsafe.js","../node_modules/react-notification-system/dist/constants.js","../node_modules/lodash/_cloneArrayBuffer.js","../node_modules/uncontrollable/index.js","../node_modules/react-widgets/lib/Widget.js","../node_modules/dom-helpers/style/index.js","../node_modules/dom-helpers/transition/properties.js","../node_modules/react-component-managers/lib/mountManager.js","../node_modules/react-widgets/lib/Icon.js","../node_modules/react-widgets/lib/util/focusManager.js","../node_modules/react-widgets/lib/util/reduceToListState.js","../node_modules/hoist-non-react-statics/index.js","../node_modules/symbol-observable/es/index.js","../node_modules/js-yaml/index.js","../node_modules/redux-thunk/lib/index.js","../node_modules/react/lib/canDefineProperty.js","../node_modules/react/lib/ReactElementSymbol.js","../node_modules/react/lib/getIteratorFn.js","../node_modules/react/lib/ReactPropTypeLocationNames.js","../node_modules/react-router-redux/lib/reducer.js","../node_modules/react-router-redux/lib/actions.js","../node_modules/react-dom/lib/ReactDOMComponentFlags.js","../node_modules/react-dom/lib/accumulateInto.js","../node_modules/react-dom/lib/forEachAccumulated.js","../node_modules/react-dom/lib/getTextContentAccessor.js","../node_modules/react-dom/lib/CallbackQueue.js","../node_modules/react-dom/lib/ReactFeatureFlags.js","../node_modules/react-dom/lib/isTextInputElement.js","../node_modules/react-dom/lib/ViewportMetrics.js","../node_modules/react-dom/lib/setTextContent.js","../node_modules/fbjs/lib/focusNode.js","../node_modules/react-dom/lib/CSSProperty.js","../node_modules/react-dom/lib/DOMPropertyOperations.js","../node_modules/react-dom/lib/ReactDOMSelect.js","../node_modules/process/browser.js","../node_modules/react-dom/lib/instantiateReactComponent.js","../node_modules/react-dom/lib/ReactNodeTypes.js","../node_modules/react-dom/lib/ReactEmptyComponent.js","../node_modules/react-dom/lib/ReactHostComponent.js","../node_modules/react-dom/lib/traverseAllChildren.js","../node_modules/react/lib/ReactComponentTreeHook.js","../node_modules/fbjs/lib/EventListener.js","../node_modules/react-dom/lib/ReactInputSelection.js","../node_modules/fbjs/lib/getActiveElement.js","../node_modules/react-dom/lib/ReactMount.js","../node_modules/react-dom/lib/getHostComponentFromComposite.js","../node_modules/react-router/lib/createTransitionManager.js","../node_modules/react-router/lib/PromiseUtils.js","../node_modules/react-router/lib/RouterUtils.js","../node_modules/react-router/lib/Link.js","../node_modules/react-router/lib/Redirect.js","../node_modules/react-router/lib/createMemoryHistory.js","../node_modules/history/lib/useQueries.js","../node_modules/history/lib/useBasename.js","../node_modules/react-router/lib/useRouterHistory.js","../node_modules/history/lib/DOMStateStorage.js","../node_modules/react-router/lib/createRouterHistory.js","../node_modules/react-hotkeys/lib/FocusTrap.js","../node_modules/react-hotkeys/lib/HotKeyMapMixin.js","../node_modules/lodash/_baseAssignValue.js","../node_modules/lodash/_defineProperty.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/isLength.js","../node_modules/lodash/_isIndex.js","../node_modules/lodash/_arrayLikeKeys.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/isEqual.js","../node_modules/lodash/_Stack.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_equalArrays.js","../node_modules/lodash/_Uint8Array.js","../node_modules/lodash/_getAllKeys.js","../node_modules/lodash/_baseGetAllKeys.js","../node_modules/lodash/_arrayPush.js","../node_modules/lodash/stubArray.js","../node_modules/lodash/_arrayEach.js","../node_modules/js-yaml/lib/js-yaml/schema/core.js","../node_modules/js-yaml/lib/js-yaml/schema/json.js","../node_modules/buffer/index.js","../node_modules/lodash/keysIn.js","../node_modules/lodash/_getSymbolsIn.js","../node_modules/lodash/_getPrototype.js","../node_modules/dom-helpers/activeElement.js","../node_modules/dom-helpers/ownerDocument.js","../node_modules/react-widgets/lib/WidgetPicker.js","../node_modules/react-widgets/lib/Popup.js","../node_modules/dom-helpers/events/index.js","../node_modules/dom-helpers/events/on.js","../node_modules/dom-helpers/events/off.js","../node_modules/dom-helpers/query/contains.js","../node_modules/dom-helpers/query/querySelectorAll.js","../node_modules/dom-helpers/util/camelizeStyle.js","../node_modules/dom-helpers/query/offset.js","../node_modules/react-transition-group/Transition.js","../node_modules/prop-types-extra/lib/utils/createChainableTypeChecker.js","../node_modules/react-component-managers/lib/timeoutManager.js","../node_modules/react-widgets/lib/Select.js","../node_modules/react-widgets/lib/List.js","../node_modules/react-widgets/lib/util/Filter.js","../node_modules/react-widgets/lib/Listbox.js","../node_modules/react-widgets/lib/ListOption.js","../node_modules/react-widgets/lib/util/scrollManager.js","../node_modules/react-dom-factories/index.js","../node_modules/react-modal/lib/helpers/tabbable.js","../node_modules/lodash.assign/index.js","../node_modules/webpack/buildin/amd-define.js","../node_modules/codemirror/mode/markdown/markdown.js","../node_modules/codemirror/mode/xml/xml.js","../node_modules/codemirror/addon/mode/overlay.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/react-notification-system/dist/NotificationSystem.js","../node_modules/sortablejs/Sortable.js","../node_modules/react-widgets/lib/DateTimePicker.js","../node_modules/react-widgets/lib/DropdownList.js","../node_modules/react-widgets-moment/index.js","../node_modules/react-modal/lib/index.js","../node_modules/react-ace/lib/ace.js","../node_modules/simplemde/src/js/simplemde.js","../../webpack/universalModuleDefinition","../webpack:/webpack/bootstrap 65eb4442d565fc2a5c80","../../src/index.js","../webpack:/external \"react\"","../../~/attr-accept/dist/index.js","../../src/getDataTransferItems.js","../node_modules/redux-immutable-state-invariant/dist/index.js","../node_modules/redux-logger/lib/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/react/lib/ReactChildren.js","../node_modules/react/lib/PooledClass.js","../node_modules/react/lib/traverseAllChildren.js","../node_modules/react/lib/KeyEscapeUtils.js","../node_modules/react/lib/ReactPureComponent.js","../node_modules/react/lib/ReactClass.js","../node_modules/react/lib/ReactDOMFactories.js","../node_modules/react/lib/ReactPropTypes.js","../node_modules/react/lib/ReactPropTypesSecret.js","../node_modules/react/lib/ReactVersion.js","../node_modules/react/lib/onlyChild.js","../node_modules/react-router-redux/lib/sync.js","../node_modules/react-router-redux/lib/middleware.js","../node_modules/react-dom/lib/ReactDOM.js","../node_modules/react-dom/lib/ReactDefaultInjection.js","../node_modules/react-dom/lib/ARIADOMPropertyConfig.js","../node_modules/react-dom/lib/BeforeInputEventPlugin.js","../node_modules/react-dom/lib/FallbackCompositionState.js","../node_modules/react-dom/lib/SyntheticCompositionEvent.js","../node_modules/react-dom/lib/SyntheticInputEvent.js","../node_modules/react-dom/lib/ChangeEventPlugin.js","../node_modules/react-dom/lib/ReactRef.js","../node_modules/react-dom/lib/ReactOwner.js","../node_modules/react-dom/lib/DefaultEventPluginOrder.js","../node_modules/react-dom/lib/EnterLeaveEventPlugin.js","../node_modules/react-dom/lib/HTMLDOMPropertyConfig.js","../node_modules/react-dom/lib/ReactComponentBrowserEnvironment.js","../node_modules/react-dom/lib/Danger.js","../node_modules/fbjs/lib/createNodesFromMarkup.js","../node_modules/fbjs/lib/createArrayFromMixed.js","../node_modules/fbjs/lib/getMarkupWrap.js","../node_modules/react-dom/lib/ReactDOMIDOperations.js","../node_modules/react-dom/lib/ReactDOMComponent.js","../node_modules/react-dom/lib/AutoFocusUtils.js","../node_modules/react-dom/lib/CSSPropertyOperations.js","../node_modules/fbjs/lib/camelizeStyleName.js","../node_modules/fbjs/lib/camelize.js","../node_modules/react-dom/lib/dangerousStyleValue.js","../node_modules/fbjs/lib/hyphenateStyleName.js","../node_modules/fbjs/lib/hyphenate.js","../node_modules/fbjs/lib/memoizeStringOnly.js","../node_modules/react-dom/lib/quoteAttributeValueForBrowser.js","../node_modules/react-dom/lib/ReactEventEmitterMixin.js","../node_modules/react-dom/lib/getVendorPrefixedEventName.js","../node_modules/react-dom/lib/ReactDOMInput.js","../node_modules/react-dom/lib/ReactPropTypesSecret.js","../node_modules/react-dom/lib/ReactDOMOption.js","../node_modules/react-dom/lib/ReactDOMTextarea.js","../node_modules/react-dom/lib/ReactMultiChild.js","../node_modules/react-dom/lib/ReactChildReconciler.js","../node_modules/react-dom/lib/ReactCompositeComponent.js","../node_modules/react-dom/lib/getNextDebugID.js","../node_modules/react-dom/lib/ReactElementSymbol.js","../node_modules/react-dom/lib/getIteratorFn.js","../node_modules/react-dom/lib/flattenChildren.js","../node_modules/react-dom/lib/ReactServerRenderingTransaction.js","../node_modules/react-dom/lib/ReactServerUpdateQueue.js","../node_modules/react-dom/lib/ReactDOMEmptyComponent.js","../node_modules/react-dom/lib/ReactDOMTreeTraversal.js","../node_modules/react-dom/lib/ReactDOMTextComponent.js","../node_modules/react-dom/lib/ReactDefaultBatchingStrategy.js","../node_modules/react-dom/lib/ReactEventListener.js","../node_modules/fbjs/lib/getUnboundedScrollPosition.js","../node_modules/react-dom/lib/ReactInjection.js","../node_modules/react-dom/lib/ReactReconcileTransaction.js","../node_modules/react-dom/lib/ReactDOMSelection.js","../node_modules/react-dom/lib/getNodeForCharacterOffset.js","../node_modules/fbjs/lib/containsNode.js","../node_modules/fbjs/lib/isTextNode.js","../node_modules/fbjs/lib/isNode.js","../node_modules/react-dom/lib/SVGDOMPropertyConfig.js","../node_modules/react-dom/lib/SelectEventPlugin.js","../node_modules/react-dom/lib/SimpleEventPlugin.js","../node_modules/react-dom/lib/SyntheticAnimationEvent.js","../node_modules/react-dom/lib/SyntheticClipboardEvent.js","../node_modules/react-dom/lib/SyntheticFocusEvent.js","../node_modules/react-dom/lib/SyntheticKeyboardEvent.js","../node_modules/react-dom/lib/getEventKey.js","../node_modules/react-dom/lib/SyntheticDragEvent.js","../node_modules/react-dom/lib/SyntheticTouchEvent.js","../node_modules/react-dom/lib/SyntheticTransitionEvent.js","../node_modules/react-dom/lib/SyntheticWheelEvent.js","../node_modules/react-dom/lib/ReactDOMContainerInfo.js","../node_modules/react-dom/lib/ReactDOMFeatureFlags.js","../node_modules/react-dom/lib/ReactMarkupChecksum.js","../node_modules/react-dom/lib/adler32.js","../node_modules/react-dom/lib/ReactVersion.js","../node_modules/react-dom/lib/findDOMNode.js","../node_modules/react-dom/lib/renderSubtreeIntoContainer.js","../node_modules/webpack/buildin/harmony-module.js","../node_modules/react-router/lib/Router.js","../node_modules/react-router/lib/computeChangedRoutes.js","../node_modules/react-router/lib/TransitionUtils.js","../node_modules/react-router/lib/isActive.js","../node_modules/react-router/lib/getComponents.js","../node_modules/react-router/lib/matchRoutes.js","../node_modules/react-router/lib/getRouteParams.js","../node_modules/react-router/lib/IndexLink.js","../node_modules/react-router/lib/withRouter.js","../node_modules/react-router/lib/IndexRedirect.js","../node_modules/react-router/lib/IndexRoute.js","../node_modules/react-router/lib/Route.js","../node_modules/react-router/lib/match.js","../node_modules/query-string/index.js","../node_modules/strict-uri-encode/index.js","../node_modules/history/lib/createMemoryHistory.js","../node_modules/history/lib/AsyncUtils.js","../node_modules/react-router/lib/applyRouterMiddleware.js","../node_modules/react-router/lib/browserHistory.js","../node_modules/history/lib/createBrowserHistory.js","../node_modules/history/lib/RefreshProtocol.js","../node_modules/react-router/lib/hashHistory.js","../node_modules/history/lib/createHashHistory.js","../node_modules/history/lib/HashProtocol.js","../node_modules/react-hotkeys/lib/HotKeys.js","../node_modules/lodash/assign.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_createAssigner.js","../node_modules/lodash/_baseRest.js","../node_modules/lodash/_overRest.js","../node_modules/lodash/_apply.js","../node_modules/lodash/_setToString.js","../node_modules/lodash/_baseSetToString.js","../node_modules/lodash/constant.js","../node_modules/lodash/_shortOut.js","../node_modules/lodash/_isIterateeCall.js","../node_modules/lodash/_baseTimes.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseKeys.js","../node_modules/lodash/_nativeKeys.js","../node_modules/lodash/_baseIsEqual.js","../node_modules/lodash/_baseIsEqualDeep.js","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_stackClear.js","../node_modules/lodash/_stackDelete.js","../node_modules/lodash/_stackGet.js","../node_modules/lodash/_stackHas.js","../node_modules/lodash/_stackSet.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_hashClear.js","../node_modules/lodash/_hashDelete.js","../node_modules/lodash/_hashGet.js","../node_modules/lodash/_hashHas.js","../node_modules/lodash/_hashSet.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_isKeyable.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_arraySome.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_equalByTag.js","../node_modules/lodash/_mapToArray.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_equalObjects.js","../node_modules/lodash/_arrayFilter.js","../node_modules/lodash/_DataView.js","../node_modules/lodash/_Promise.js","../node_modules/lodash/_Set.js","../node_modules/lodash/_WeakMap.js","../node_modules/lodash/isBoolean.js","../node_modules/lodash/forEach.js","../node_modules/lodash/_baseEach.js","../node_modules/lodash/_baseForOwn.js","../node_modules/lodash/_baseFor.js","../node_modules/lodash/_createBaseFor.js","../node_modules/lodash/_createBaseEach.js","../node_modules/lodash/_castFunction.js","../node_modules/mousetrap/mousetrap.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-side-effect/lib/index.js","../node_modules/shallowequal/index.js","../node_modules/whatwg-fetch/fetch.js","../node_modules/js-yaml/lib/js-yaml.js","../node_modules/js-yaml/lib/js-yaml/loader.js","../node_modules/js-yaml/lib/js-yaml/mark.js","../node_modules/js-yaml/lib/js-yaml/type/str.js","../node_modules/js-yaml/lib/js-yaml/type/seq.js","../node_modules/js-yaml/lib/js-yaml/type/map.js","../node_modules/js-yaml/lib/js-yaml/type/null.js","../node_modules/js-yaml/lib/js-yaml/type/bool.js","../node_modules/js-yaml/lib/js-yaml/type/int.js","../node_modules/js-yaml/lib/js-yaml/type/float.js","../node_modules/js-yaml/lib/js-yaml/type/timestamp.js","../node_modules/js-yaml/lib/js-yaml/type/merge.js","../node_modules/js-yaml/lib/js-yaml/type/binary.js","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/isarray/index.js","../node_modules/js-yaml/lib/js-yaml/type/omap.js","../node_modules/js-yaml/lib/js-yaml/type/pairs.js","../node_modules/js-yaml/lib/js-yaml/type/set.js","../node_modules/js-yaml/lib/js-yaml/type/js/undefined.js","../node_modules/js-yaml/lib/js-yaml/type/js/regexp.js","../node_modules/js-yaml/lib/js-yaml/type/js/function.js","../node_modules/esprima/dist/esprima.js","../node_modules/js-yaml/lib/js-yaml/dumper.js","../node_modules/create-react-class/factory.js","../node_modules/react-notification-system/dist/NotificationContainer.js","../node_modules/react-notification-system/dist/NotificationItem.js","../node_modules/react-notification-system/dist/helpers.js","../node_modules/react-notification-system/dist/styles.js","../node_modules/lodash/_baseClone.js","../node_modules/lodash/_baseAssign.js","../node_modules/lodash/_baseAssignIn.js","../node_modules/lodash/_baseKeysIn.js","../node_modules/lodash/_nativeKeysIn.js","../node_modules/lodash/_cloneBuffer.js","../node_modules/lodash/_copyArray.js","../node_modules/lodash/_copySymbols.js","../node_modules/lodash/_copySymbolsIn.js","../node_modules/lodash/_getAllKeysIn.js","../node_modules/lodash/_initCloneArray.js","../node_modules/lodash/_initCloneByTag.js","../node_modules/lodash/_cloneDataView.js","../node_modules/lodash/_cloneRegExp.js","../node_modules/lodash/_cloneSymbol.js","../node_modules/lodash/_cloneTypedArray.js","../node_modules/lodash/_initCloneObject.js","../node_modules/lodash/_baseCreate.js","../node_modules/lodash/isMap.js","../node_modules/lodash/_baseIsMap.js","../node_modules/lodash/isSet.js","../node_modules/lodash/_baseIsSet.js","../node_modules/prop-types-extra/lib/deprecated.js","../node_modules/prop-types-extra/node_modules/warning/warning.js","../node_modules/uncontrollable/utils.js","../node_modules/react-widgets/lib/SlideDownTransition.js","../node_modules/dom-helpers/events/filter.js","../node_modules/dom-helpers/events/listen.js","../node_modules/dom-helpers/util/camelize.js","../node_modules/dom-helpers/util/hyphenateStyle.js","../node_modules/dom-helpers/util/hyphenate.js","../node_modules/dom-helpers/style/getComputedStyle.js","../node_modules/dom-helpers/style/removeStyle.js","../node_modules/dom-helpers/transition/isTransform.js","../node_modules/react-transition-group/utils/PropTypes.js","../node_modules/prop-types-extra/lib/elementType.js","../node_modules/prop-types-extra/node_modules/react-is/index.js","../node_modules/prop-types-extra/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-widgets/lib/Calendar.js","../node_modules/react-component-managers/lib/autoFocus.js","../node_modules/react-component-managers/lib/focusManager.js","../node_modules/react-component-managers/lib/mixin.js","../node_modules/react-widgets/lib/Header.js","../node_modules/react-widgets/lib/Footer.js","../node_modules/react-widgets/lib/Month.js","../node_modules/date-arithmetic/index.js","../node_modules/react-widgets/lib/Year.js","../node_modules/react-widgets/lib/Decade.js","../node_modules/react-widgets/lib/Century.js","../node_modules/react-widgets/lib/SlideTransitionGroup.js","../node_modules/react-transition-group/TransitionGroup.js","../node_modules/react-transition-group/utils/ChildMapping.js","../node_modules/dom-helpers/query/matches.js","../node_modules/react-widgets/lib/DateTimePickerInput.js","../node_modules/react-widgets/lib/Input.js","../node_modules/react-widgets/lib/TimeList.js","../node_modules/react-widgets/lib/ListOptionGroup.js","../node_modules/dom-helpers/util/scrollTo.js","../node_modules/dom-helpers/query/scrollParent.js","../node_modules/dom-helpers/query/scrollTop.js","../node_modules/dom-helpers/util/requestAnimationFrame.js","../node_modules/react-widgets/lib/AddToListOption.js","../node_modules/react-widgets/lib/DropdownListInput.js","../node_modules/react-widgets/lib/util/getAccessors.js","../node_modules/react-widgets/lib/configure.js","../node_modules/react-modal/lib/components/Modal.js","../node_modules/exenv/index.js","../node_modules/react-modal/lib/components/ModalPortal.js","../node_modules/react-modal/lib/helpers/focusManager.js","../node_modules/react-modal/lib/helpers/scopeTab.js","../node_modules/react-modal/lib/helpers/ariaAppHider.js","../node_modules/react-modal/lib/helpers/refCount.js","../node_modules/element-class/index.js","../node_modules/brace/index.js","../node_modules/w3c-blob/browser.js","../node_modules/lodash.isequal/index.js","../node_modules/brace/mode/json.js","../node_modules/brace/worker/json.js","../node_modules/brace/mode/yaml.js","../node_modules/brace/theme/monokai.js","../node_modules/codemirror/addon/edit/continuelist.js","../node_modules/simplemde/src/js/codemirror/tablist.js","../node_modules/codemirror/addon/display/fullscreen.js","../node_modules/codemirror/mode/meta.js","../node_modules/codemirror/addon/display/placeholder.js","../node_modules/codemirror/addon/selection/mark-selection.js","../node_modules/codemirror/mode/gfm/gfm.js","../node_modules/codemirror-spell-checker/src/js/spell-checker.js","../node_modules/typo-js/typo.js","../node_modules/marked/lib/marked.js","../node_modules/highlight.js/lib/languages/actionscript.js","../node_modules/highlight.js/lib/languages/apache.js","../node_modules/highlight.js/lib/languages/applescript.js","../node_modules/highlight.js/lib/languages/asciidoc.js","../node_modules/highlight.js/lib/languages/bash.js","../node_modules/highlight.js/lib/languages/basic.js","../node_modules/highlight.js/lib/languages/clojure.js","../node_modules/highlight.js/lib/languages/clojure-repl.js","../node_modules/highlight.js/lib/languages/cmake.js","../node_modules/highlight.js/lib/languages/coffeescript.js","../node_modules/highlight.js/lib/languages/cpp.js","../node_modules/highlight.js/lib/languages/crystal.js","../node_modules/highlight.js/lib/languages/css.js","../node_modules/highlight.js/lib/languages/dart.js","../node_modules/highlight.js/lib/languages/diff.js","../node_modules/highlight.js/lib/languages/django.js","../node_modules/highlight.js/lib/languages/dns.js","../node_modules/highlight.js/lib/languages/dockerfile.js","../node_modules/highlight.js/lib/languages/dos.js","../node_modules/highlight.js/lib/languages/dsconfig.js","../node_modules/highlight.js/lib/languages/elixir.js","../node_modules/highlight.js/lib/languages/elm.js","../node_modules/highlight.js/lib/languages/erb.js","../node_modules/highlight.js/lib/languages/erlang-repl.js","../node_modules/highlight.js/lib/languages/erlang.js","../node_modules/highlight.js/lib/languages/excel.js","../node_modules/highlight.js/lib/languages/fortran.js","../node_modules/highlight.js/lib/languages/fsharp.js","../node_modules/highlight.js/lib/languages/gherkin.js","../node_modules/highlight.js/lib/languages/go.js","../node_modules/highlight.js/lib/languages/gradle.js","../node_modules/highlight.js/lib/languages/groovy.js","../node_modules/highlight.js/lib/languages/haml.js","../node_modules/highlight.js/lib/languages/handlebars.js","../node_modules/highlight.js/lib/languages/haskell.js","../node_modules/highlight.js/lib/languages/htmlbars.js","../node_modules/highlight.js/lib/languages/http.js","../node_modules/highlight.js/lib/languages/ini.js","../node_modules/highlight.js/lib/languages/java.js","../node_modules/highlight.js/lib/languages/javascript.js","../node_modules/highlight.js/lib/languages/json.js","../node_modules/highlight.js/lib/languages/julia.js","../node_modules/highlight.js/lib/languages/julia-repl.js","../node_modules/highlight.js/lib/languages/kotlin.js","../node_modules/highlight.js/lib/languages/ldif.js","../node_modules/highlight.js/lib/languages/less.js","../node_modules/highlight.js/lib/languages/lisp.js","../node_modules/highlight.js/lib/languages/livescript.js","../node_modules/highlight.js/lib/languages/lua.js","../node_modules/highlight.js/lib/languages/makefile.js","../node_modules/highlight.js/lib/languages/markdown.js","../node_modules/highlight.js/lib/languages/mathematica.js","../node_modules/highlight.js/lib/languages/matlab.js","../node_modules/highlight.js/lib/languages/perl.js","../node_modules/highlight.js/lib/languages/nginx.js","../node_modules/highlight.js/lib/languages/nix.js","../node_modules/highlight.js/lib/languages/objectivec.js","../node_modules/highlight.js/lib/languages/ocaml.js","../node_modules/highlight.js/lib/languages/pgsql.js","../node_modules/highlight.js/lib/languages/php.js","../node_modules/highlight.js/lib/languages/plaintext.js","../node_modules/highlight.js/lib/languages/powershell.js","../node_modules/highlight.js/lib/languages/prolog.js","../node_modules/highlight.js/lib/languages/python.js","../node_modules/highlight.js/lib/languages/r.js","../node_modules/highlight.js/lib/languages/reasonml.js","../node_modules/highlight.js/lib/languages/ruby.js","../node_modules/highlight.js/lib/languages/rust.js","../node_modules/highlight.js/lib/languages/scala.js","../node_modules/highlight.js/lib/languages/scss.js","../node_modules/highlight.js/lib/languages/shell.js","../node_modules/highlight.js/lib/languages/smalltalk.js","../node_modules/highlight.js/lib/languages/sql.js","../node_modules/highlight.js/lib/languages/swift.js","../node_modules/highlight.js/lib/languages/typescript.js","../node_modules/highlight.js/lib/languages/vbnet.js","../node_modules/highlight.js/lib/languages/vbscript.js","../node_modules/highlight.js/lib/languages/vim.js","../node_modules/highlight.js/lib/languages/yaml.js","../node_modules/highlight.js/lib/languages/xml.js","../node_modules/json-stringify-safe/stringify.js","../node_modules/redux-immutable-state-invariant/dist/isImmutable.js","../node_modules/redux-immutable-state-invariant/dist/trackForMutations.js"],"names":["module","exports","require","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread2","target","i","arguments","length","source","forEach","key","getOwnPropertyDescriptors","defineProperties","defineProperty","__esModule","createMemoryHistory","hashHistory","browserHistory","applyRouterMiddleware","formatPattern","useRouterHistory","match","routerShape","locationShape","RouterContext","createRoutes","Route","Redirect","IndexRoute","IndexRedirect","withRouter","IndexLink","Link","Router","undefined","_RouteUtils","get","_PropTypes","_PatternUtils","_Router3","_interopRequireDefault","_Link3","_IndexLink3","_withRouter3","_IndexRedirect3","_IndexRoute3","_Redirect3","_Route3","_RouterContext3","_match3","_useRouterHistory3","_applyRouterMiddleware3","_browserHistory3","_hashHistory3","_createMemoryHistory3","obj","default","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_classCallCheck","instance","Constructor","TypeError","_inherits","subClass","superClass","prototype","create","constructor","value","writable","configurable","_typeof","Symbol","iterator","_possibleConstructorReturn","self","call","ReferenceError","factory","globalObject","window","nodeType","hljs","ArrayProto","objectKeys","languages","aliases","SAFE_MODE","noHighlightRe","languagePrefixRe","fixMarkupRe","LANGUAGE_NOT_FOUND","options","classPrefix","tabReplace","useBR","COMMON_KEYWORDS","split","escape","replace","tag","node","nodeName","toLowerCase","isNotHighlighted","language","test","inherit","parent","result","objects","Array","slice","nodeStream","_nodeStream","offset","child","firstChild","nextSibling","nodeValue","event","expand_or_clone_mode","mode","variants","cached_variants","map","variant","dependencyOnParent","endsWithParent","starts","isFrozen","scoreForKeyword","keyword","providedScore","Number","word","indexOf","compileLanguage","reStr","re","langRe","global","RegExp","case_insensitive","buildModeRegex","matcherRe","term","matchIndexes","regexes","matcher","matchAt","addRule","rule","regex","toString","exec","reCountMatchGroups","contains","beginKeywords","begin","terminator_end","illegal","terminators","el","regexps","separator","backreferenceRe","numCaptures","ret","substring","index","String","joinRe","lastIndex","s","type","extra","Error","compileMode","compiled","keywords","rawKeywords","compiled_keywords","splitAndCompile","className","str","pair","compileKeywords","lexemesRe","lexemes","join","beginRe","endSameAsBegin","end","endRe","illegalRe","relevance","concat","c","highlight","name","ignore_illegals","continuation","keywordMatch","match_str","hasOwnProperty","buildSpan","insideSpan","leaveOpen","noPrefix","openSpan","processBuffer","top","subLanguage","explicit","mode_buffer","continuations","highlightAuto","processSubLanguage","keyword_match","last_index","substr","processKeywords","startNewMode","doBeginMatch","lexeme","new_mode","escapeRe","skip","excludeBegin","returnBegin","doEndMatch","matchPlusRemainder","end_mode","endOfMode","testRe","endsParent","origin","returnEnd","excludeEnd","lastMatch","processLexeme","text_before_match","processed","getLanguage","console","error","current","count","err","message","errorRaised","text","languageSubset","second_best","autoDetection","fixMarkup","p1","highlightBlock","block","originalStream","resultNode","_class","classes","parentNode","warn","blockLanguage","document","createElement","innerHTML","textContent","original","highlighted","nodeStack","selectStream","open","attributes","a","close","render","stream","reverse","splice","pop","mergeStreams","prevClassName","currentLang","resultLang","trim","buildClassName","initHighlighting","called","blocks","querySelectorAll","PLAINTEXT_LANGUAGE","disableAutodetect","lang","configure","user_options","initHighlightingOnLoad","addEventListener","registerLanguage","rawDefinition","bind","alias","listLanguages","requireLanguage","debugMode","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","RE_STARTERS_RE","BACKSLASH_ESCAPE","APOS_STRING_MODE","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","inherits","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","CSS_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","deepFreeze","freeze","objIsFunction","getOwnPropertyNames","prop","_defineProperties","props","descriptor","_createClass","protoProps","staticProps","root","this","previousUnderscore","_","ObjProto","SymbolProto","nativeIsArray","isArray","nativeKeys","nativeCreate","Ctor","_wrapped","VERSION","builtinIteratee","optimizeCb","func","context","argCount","collection","accumulator","cb","iteratee","identity","isFunction","isObject","property","Infinity","restArguments","startIndex","Math","max","rest","args","baseCreate","shallowProperty","has","path","deepGet","MAX_ARRAY_INDEX","pow","getLength","isArrayLike","each","collect","results","currentKey","createReduce","dir","reducer","memo","initial","reduce","foldl","inject","reduceRight","foldr","find","detect","predicate","findIndex","findKey","select","list","reject","negate","every","all","some","any","includes","include","item","fromIndex","guard","values","invoke","contextPath","method","pluck","where","attrs","findWhere","computed","lastComputed","v","min","shuffle","sample","n","random","clone","last","rand","temp","sortBy","criteria","sort","left","right","b","group","behavior","partition","groupBy","indexBy","countBy","reStrSymbol","toArray","isString","size","pass","first","head","take","array","tail","drop","compact","Boolean","flatten","input","shallow","strict","output","idx","isArguments","j","len","without","otherArrays","difference","uniq","unique","isSorted","isBoolean","seen","union","arrays","intersection","argsLength","unzip","zip","createPredicateIndexFinder","findLastIndex","sortedIndex","low","high","mid","floor","createIndexFinder","predicateFind","isNaN","lastIndexOf","range","start","stop","step","ceil","chunk","executeBound","sourceFunc","boundFunc","callingContext","bound","callArgs","partial","boundArgs","placeholder","position","bindAll","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","timeout","previous","later","leading","now","throttled","remaining","clearTimeout","trailing","cancel","debounce","immediate","debounced","callNow","wrap","wrapper","compose","after","times","before","once","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","proto","allKeys","mapObject","pairs","invert","functions","methods","names","createAssigner","keysFunc","defaults","l","extend","extendOwn","assign","eq","deepEq","keyInObj","pick","omit","tap","interceptor","isMatch","aStack","bStack","valueOf","areArrays","aCtor","bCtor","isEqual","isEmpty","isElement","nodelist","childNodes","Int8Array","isFinite","isSymbol","parseFloat","isNumber","isNull","isUndefined","noConflict","constant","noop","propertyOf","matches","accum","Date","getTime","escapeMap","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","string","unescape","fallback","idCounter","uniqueId","prefix","id","templateSettings","evaluate","interpolate","noMatch","escapes","escapeRegExp","escapeChar","template","settings","oldSettings","variable","Function","e","data","argument","chain","_chain","chainResult","mixin","toJSON","ActionTypes","createStore","preloadedState","enhancer","_ref2","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","getState","subscribe","listener","isSubscribed","dispatch","action","isPlainObject","listeners","replaceReducer","nextReducer","$$observable","_ref","outerSubscribe","observer","observeState","next","unsubscribe","getUndefinedStateErrorMessage","actionType","combineReducers","reducers","reducerKeys","finalReducers","process","sanityError","finalReducerKeys","assertReducerSanity","state","hasChanged","nextState","previousStateForKey","nextStateForKey","errorMessage","bindActionCreator","actionCreator","bindActionCreators","actionCreators","boundActionCreators","_len","funcs","_key","arg","composed","f","_extends","applyMiddleware","middlewares","store","_dispatch","middlewareAPI","middleware","PropTypes","shape","isRequired","Provider","_Component","_this","getChildContext","Children","only","children","Component","propTypes","storeShape","element","childContextTypes","displayName","nullListeners","notify","Subscription","parentSub","addNestedSub","trySubscribe","notifyNestedSubs","onStateChange","clear","createListenerCollection","tryUnsubscribe","_objectWithoutProperties","hotReloadingVersion","connectAdvanced","selectorFactory","_contextTypes","_childContextTypes","_ref$getDisplayName","getDisplayName","_ref$methodName","methodName","_ref$renderCountProp","renderCountProp","_ref$shouldHandleStat","shouldHandleStateChanges","_ref$storeKey","storeKey","_ref$withRef","withRef","connectOptions","subscriptionKey","version","contextTypes","instanceOf","WrappedComponent","invariant","wrappedComponentName","selectorFactoryOptions","Connect","renderCount","setWrappedInstance","initSelector","initSubscription","subscription","componentDidMount","selector","run","shouldComponentUpdate","forceUpdate","componentWillReceiveProps","nextProps","componentWillUnmount","getWrappedInstance","wrappedInstance","ref","sourceSelector","_this2","dummyState","componentDidUpdate","setState","addExtraProps","withExtras","hoistStatics","hasOwn","shallowEqual","countA","countB","wrapMapToPropsConstant","getConstant","constantSelector","dependsOnOwnProps","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","proxy","stateOrDispatch","ownProps","mapDispatchToProps","mapStateToProps","defaultMergeProps","stateProps","dispatchProps","mergeProps","pure","areMergedPropsEqual","hasRunOnce","mergedProps","nextMergedProps","wrapMergePropsFunc","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","handleSubsequentCalls","nextOwnProps","propsChanged","stateChanged","nextStateProps","statePropsChanged","handleNewState","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","factories","strictEqual","createConnect","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","defaultMapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","defaultMapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","defaultMergePropsFactories","_ref$selectorFactory","defaultSelectorFactory","_ref2$pure","_ref2$areStatesEqual","_ref2$areOwnPropsEqua","_ref2$areStatePropsEq","_ref2$areMergedPropsE","extraOptions","condition","format","d","argIndex","framesToPop","warning","React","withSideEffect","DocumentTitle","title","propsList","innermostProps","nextTitle","code","argIdx","encodeURIComponent","classNames","argType","inner","propIsEnumerable","toObject","val","test1","test2","fromCharCode","test3","letter","shouldUseNative","from","to","_prodInvariant","DOMProperty","ReactDOMComponentFlags","ATTR_NAME","ID_ATTRIBUTE_NAME","Flags","internalInstanceKey","getRenderedHostOrTextFromComponent","component","rendered","_renderedComponent","precacheNode","inst","hostInst","_hostNode","precacheChildNodes","_flags","hasCachedChildNodes","_renderedChildren","childNode","outer","childInst","childID","_domID","getAttribute","getClosestInstanceFromNode","closest","parents","ReactDOMComponentTree","getInstanceFromNode","getNodeFromInstance","_hostParent","uncacheNode","YAMLException","TYPE_CONSTRUCTOR_OPTIONS","YAML_NODE_KINDS","kind","resolve","construct","represent","defaultStyle","styleAliases","style","compileStyleAliases","_HotKeys","_FocusTrap","_HotKeyMapMixin","_toArray","arr","hookCallback","hooks","isDate","fn","res","hasOwnProp","createUTC","locale","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","_d","invalidWeekday","_strict","bigHour","createInvalid","NaN","fun","t","momentProperties","copyConfig","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","config","updateOffset","isMoment","absFloor","number","toInt","argumentForCoercion","coercedNumber","compareArrays","array1","array2","dontConvert","lengthDiff","abs","diffs","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","stack","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","set","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","localeData","formatMoment","expandFormat","mom","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","strictRegex","isStrict","getParseRegexForToken","regexEscape","matched","p2","p3","p4","tokens","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInYear","year","isLeapYear","y","parseTwoDigitYear","parseInt","getSetYear","makeGetSet","keepTime","set$1","month","date","daysInMonth","x","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","MONTHS_IN_FORMAT","defaultLocaleMonths","defaultLocaleMonthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","h","M","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","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","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","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","aliasedRequire","getSetGlobalLocale","getLocale","defineLocale","abbr","_config","parentLocale","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","w","weekYear","weekdayOverflow","GG","W","E","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","getDay","setUTCMinutes","getUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","configFromStringAndFormat","untruncateYear","yearStr","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","extractFromRFC2822Strings","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","second","millisecond","configFromObject","configFromInput","isUTC","k","isObjectEmpty","add","createFromConfig","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","utcOffset","sign","offsetFromString","chunkOffset","parts","cloneWithOffset","model","diff","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","parseIso","base","isBefore","positiveMomentsDifference","momentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","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","u","getPrioritizedUnits","toDate","toISOString","keepOffset","inspect","zone","isLocal","suffix","unix","creationData","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","Y","D","toFixed","total","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","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","canUseDOM","ExecutionEnvironment","canUseWorkers","Worker","canUseEventListeners","attachEvent","canUseViewport","screen","isInWorker","accessor","disabled","numberFormat","_propTypes","_elementType","elementType","_createChainableTypeChecker","_localizers","propType","bool","acceptsArray","oneOfType","setNumber","_parse","parse","_ref$propType","localePropType","_ref$decimalChar","decimalChar","_ref$precision","precision","checkFormats","REQUIRED_NUMBER_FORMATS","_numberLocalizer","wrapFormat","culture","setDate","_parse2","firstOfWeek","_ref2$propType","REQUIRED_DATE_FORMATS","_dateLocalizer","createWrapper","_numberLocalizer2","getFormat","_numberLocalizer3","_numberLocalizer4","_numberLocalizer5","_numberLocalizer6","_dateLocalizer2","_dateLocalizer3","_dateLocalizer4","_dateLocalizer5","formatter","required","makeEmptyFunction","emptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","thatReturnsArgument","debugTool","componentClass","pickElementProps","others","omitOwn","whitelist","whitelistRegex","r","_len2","_key2","compClass","userAgent","navigator","platform","gecko","ie_upto10","ie_11up","edge","ie","ie_version","documentMode","webkit","qtwebkit","chrome","presto","safari","vendor","mac_geMountainLion","phantom","ios","android","mobile","mac","chromeOS","windows","presto_version","flipCtrlCmd","captureRightClick","classTest","cls","rmClass","removeChildren","removeChild","removeChildrenAndAdd","appendChild","elt","content","cssText","createTextNode","eltP","setAttribute","host","activeElt","activeElement","body","shadowRoot","addClass","joinClasses","createRange","endNode","setEnd","setStart","createTextRange","moveToElementText","collapse","moveEnd","moveStart","selectInput","copyObj","overwrite","countColumn","tabSize","startValue","search","nextTab","selectionStart","selectionEnd","_e","Delayed","Pass","sel_dontScroll","scroll","sel_mouse","sel_move","findColumn","goal","col","spaceStrs","spaceStr","lst","nothing","createObj","nonASCIISingleCaseWordChar","isWordCharBasic","ch","isWordChar","helper","extendingChars","isExtendingChar","charCodeAt","skipExtendingChars","findFirst","pred","midF","bidiOther","getBidiPartAt","order","sticky","found","cur","bidiOrdering","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","level","outerType","types","i$1","prev","i$2","type$1","i$3","prev$1","type$2","i$4","type$3","i$5","cur$1","type$4","i$6","end$1","replace$1","j$1","i$7","at","j$2","nstart","unshift","getOrder","line","noHandlers","on","emitter","map$$1","_handlers","getHandlers","off","removeEventListener","detachEvent","signal","handlers","signalDOMEvent","cm","override","preventDefault","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","ctor","e_preventDefault","returnValue","e_stopPropagation","stopPropagation","cancelBubble","e_stop","e_target","srcElement","e_button","which","button","ctrlKey","zwspSupported","badBidiRects","dragAndDrop","div","zeroWidthElement","measure","offsetHeight","offsetWidth","hasBadBidiRects","txt","r0","getBoundingClientRect","r1","splitLinesAuto","nl","rt","hasSelection","getSelection","te","range$$1","ownerDocument","selection","parentElement","compareEndPoints","hasCopyEvent","oncopy","badZoomedRects","modes","mimeModes","defineMode","dependencies","resolveMode","spec","getMode","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","properties","copyState","nstate","innerMode","info","startState","a1","a2","StringStream","lineOracle","lastColumnPos","lastColumnValue","lineStart","getLine","doc","lines","sz","chunkSize","getBetween","iter","getLines","updateLineHeight","height","lineNo","no","lineAtHeight","lh","isLine","lineNumberFor","lineNumberFormatter","firstLineNumber","Pos","cmp","equalCursorPos","copyPos","maxPos","minPos","clipLine","clipPos","linelen","clipToLen","clipPosArray","eol","sol","peek","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","indentation","pattern","consume","caseInsensitive","cased","hideFirstChars","lookAhead","oracle","baseToken","SavedContext","Context","maxLookAhead","baseTokens","baseTokenPos","highlightLine","forceToEnd","st","modeGen","lineClasses","runMode","loop","overlay","overlays","i_end","opaque","styles","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","display","minindent","minline","lim","indented","findStartLine","saved","fromSaved","processLine","viewFrom","viewTo","nextLine","startAt","callBlankLine","readToken","blankLine","copy","Token","takeToken","asArray","extractLineClasses","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","sawReadOnlySpans","sawCollapsedSpans","MarkedSpan","marker","getMarkedSpanFor","spans","span","removeMarkedSpan","stretchSpansOverChange","change","full","oldFirst","markedSpans","oldLast","startCh","endCh","isInsert","old","nw","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansBefore","startsBefore","markedSpansAfter","sameLine","span$1","clearEmptySpans","newMarkers","gapMarkers","gap","clearWhenEmpty","detachMarkedSpans","detachLine","attachMarkedSpans","attachLine","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","lineNo$$1","visualLine","merged","visualLineNo","lineN","vis","visualLineEndNo","lastLine","lineIsHidden","widgetNode","lineIsHiddenInner","heightAtLine","lineObj","p","lineLength","found$1","findMaxLine","maxLine","maxLineLength","maxLineChanged","Line","estimateHeight","cleanUpLine","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","buildLineContent","lineView","builder","pre","trailingSpace","splitSpaces","getOption","addToken","buildToken","buildTokenBadBidi","insertLineContent","externalMeasured","maps","caches","lastChild","querySelector","defaultSpecialCharPlaceholder","startStyle","endStyle","css","displayText","trailingBefore","spaceBefore","special","specialChars","mustWrap","createDocumentFragment","txt$1","tabWidth","specialCharPlaceholder","fullStyle","attr","part","buildCollapsedSpan","ignoreWidget","widget","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","foundBookmarks","endStyles","upto","tokenText","LineView","visualLineContinued","hidden","buildViewArray","nextPos","view","operationGroup","orphanDelayedCallbacks","signalLater","delayedCallbacks","fireOrphanDelayed","delayed","updateLineForChanges","dims","changes","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","replaceChild","zIndex","getLineContent","ext","built","background","insertBefore","updateLineBackground","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","markers","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","lineNumInnerWidth","gutterSpecs","gutterWidth","alignable","insertLineWidgets","buildLineElement","insertLineWidgetsFor","allowAbove","widgets","handleMouseEvents","positionLineWidget","above","noHScroll","width","wrapperWidth","coverGutter","paddingLeft","marginLeft","widgetHeight","parentStyle","gutters","clientWidth","eventInWidget","sizer","mover","paddingTop","lineSpace","offsetTop","paddingVert","paddingH","cachedPaddingH","getComputedStyle","currentStyle","paddingRight","scrollGap","nativeBarWidth","displayWidth","scroller","barWidth","displayHeight","clientHeight","barHeight","mapFromLineView","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","lineMeasure","updateExternalMeasurement","rect","hasHeights","prepared","varHeight","wrapping","lineWrapping","curWidth","heights","rects","getClientRects","bottom","ensureLineHeights","place","nodeAndOffsetInLineMap","coverStart","coverEnd","getUsefulRect","logicalXDPI","deviceXDPI","normal","fromRange","hasBadZoomedRects","scaleX","scaleY","logicalYDPI","deviceYDPI","maybeUpdateRectForZooming","rSpan","charWidth","nullRect","rtop","rbot","bot","bogus","singleCursorHeightPerLine","rbottom","measureCharInner","measureText","mStart","mEnd","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","cachedCharWidth","cachedTextHeight","lineNumChars","pageScrollX","pageXOffset","documentElement","scrollLeft","pageScrollY","marginTop","pageYOffset","scrollTop","widgetTopHeight","intoCoordSystem","includeWidgets","yOff","viewOffset","lOff","xOff","fromCoordSystem","coords","localBox","lineSpaceBox","charCoords","cursorCoords","preparedMeasure","getBidi","partPos","estimateCoords","PosWithInfo","outside","xRel","coordsChar","coordsCharInner","rangeEnd","wrappedLineExtent","wrappedLineExtentChar","boxIsAfter","box","widgetHeight$$1","ltr","coordsBidiPartWrapped","coordsBidiPart","baseX","chAround","boxAround","atLeft","atStart","_lineNo","closestDist","endX","dist","textHeight","clientLeft","offsetLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","estHeight","posFromMouse","liberal","forRect","space","clientX","clientY","colDiff","regChange","lendiff","updateLineNumbers","viewChanged","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","countDirtyView","dirty","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","sel","ranges","primIndex","showCursorWhenSelecting","drawSelectionCursor","drawSelectionRange","cursor","cursorHeight","otherCursor","cmpCoords","fragment","padding","leftSide","rightSide","sizerWidth","docLTR","drawForLine","fromArg","toArg","lineLen","wrapX","side","extent","iterateBidiSections","fromPos","toPos","openStart","openEnd","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","clearInterval","blinker","cursorDiv","visibility","cursorBlinkRate","setInterval","ensureFocus","focus","onFocus","delayBlurEvent","delayingBlurEvent","onBlur","readOnly","selForContextMenu","reset","receivedFocus","updateHeightsInViewport","prevBottom","lineDiv","updateWidgetHeight","chWidth","visibleLines","viewport","ensure","ensureFrom","ensureTo","calculateScrollPos","snapMargin","screentop","docBottom","atTop","atBottom","newTop","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","getCursor","scrollToPos","margin","cursorScrollMargin","scrollToCoords","scrollToCoordsRange","sPos","updateScrollTop","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollHeight","scrollbars","setScrollLeft","isScroller","scrollWidth","alignHorizontally","measureForScrollbars","gutterW","docH","viewHeight","viewWidth","barLeft","docHeight","NativeScrollbars","vert","horiz","tabIndex","checkedZeroWidth","minHeight","minWidth","update","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","pointerEvents","bar","maybeDisable","elementFromPoint","NullScrollbars","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","heightForcer","borderBottom","scrollbarFiller","coverGutterNextToScrollbar","gutterFiller","scrollbarModel","initScrollbars","scrollbarStyle","axis","nextOpId","startOperation","op","updateInput","typing","changeObjs","cursorActivityCalled","selectionChanged","updateMaxLine","ops","ownsGroup","endOperation","endCb","callbacks","fireCallbacksForOps","finishOperation","endOperation_R1","endOperation_W1","endOperation_R2","endOperation_W2","endOperation_finish","endOperations","scrollbarsClipped","marginBottom","borderRightWidth","maybeClipScrollbars","mustUpdate","DisplayUpdate","updatedDisplay","updateDisplayIfNeeded","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","wheelStartX","wheelStartY","doScroll","innerHeight","scrollNode","scrollIntoView","maybeScrollWindow","changed","endCoords","scrollPos","startTop","startLeft","scrollPosIntoView","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","finish","runInOp","operation","methodOp","docMethodOp","highlightWorker","workTime","changedLines","oldStyles","oldCls","newCls","ischange","workDelay","force","visible","editorIsHidden","wrapperHeight","oldDisplayWidth","events","renderedView","maybeUpdateLineNumberWidth","viewportMargin","different","lastWrapHeight","lastWrapWidth","adjustView","toUpdate","selSnapshot","hasFocus","active","anchorNode","anchorOffset","focusNode","focusOffset","selectionSnapshot","updateNumbersFrom","container","rm","currentWheelTarget","updateNumber","patchDisplay","snapshot","removeAllRanges","addRange","restoreSelection","selectionDiv","reportedViewFrom","reportedViewTo","updateGutterSpace","alignWidgets","comp","align","innerW","lineGutter","lineNumWidth","getGutters","sawLineNumbers","renderGutters","specs","gElt","updateGutters","Display","draggable","wheelDX","wheelDY","activeTouch","init","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","onScrollWheel","canScrollX","canScrollY","pixels","movedX","movedY","Selection","equals","here","there","deepCopy","Range","somethingSelected","normalizeSelection","mayTouch","selectionsMayTouch","prim","inv","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","estimateHeight$$1","spansFor","updateLine","linesFor","firstLine","lastText","lastSpans","nlines","insert","remove","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","sharedHist","linked","rel","shared","attachDoc","setDirectionClass","History","startGen","done","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","addChangeToHistory","selAfter","opId","hist","history","historyEventDelay","lastChangeEvent","pushSelectionToHistory","addSelectionToHistory","selectionEventCanBeMerged","clearRedo","dest","existing","removeClearedSpans","explicitlyCleared","mergeOldSpans","getOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","newChanges","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","setSelectionReplaceHistory","setSelectionNoUndo","filterSelectionChange","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","preventCursorLeft","selectLeft","preventCursorRight","selectRight","atomic","near","movePos","far","cantEdit","selectAll","filterChange","canceled","makeChange","ignoreReadOnly","suppressEdits","mark","mk","newParts","dfrom","dto","removeReadOnlyRanges","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","returned","shiftDoc","distance","removed","recomputeMaxLength","checkWidthStart","retreatFrontier","changesHandler","changeHandler","makeChangeSingleDocInEditor","replaceRange","splitLines","rebaseHistSelSingle","rebaseHistArray","sub","ok","copied","changeLine","handle","changeType","LeafChunk","BranchChunk","removeInner","insertInner","iterN","oldHeight","leaf","maybeSpill","me","sibling","myIndex","used","LineWidget","opt","adjustScrollWhenAboveVisible","this$1","oldH","nextMarkerId","TextMarker","markText","cloneNode","isParent","SharedTextMarker","markTextShared","replacedWith","addToHistory","curLine","addMarkedSpan","clearOnEnter","clearHistory","withOp","visual","dHeight","findSharedMarkers","findMarks","detachSharedMarkers","subMarker","nextDocId","Doc","lineSep","cleanGeneration","getValue","lineSeparator","setValue","getRange","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","listSelections","setCursor","extendSelectionsBy","setSelections","addSelection","getSelections","replaceSelection","dup","replaceSelections","newSel","hint","oldPrev","newPrev","computeReplacedSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","removeLineClass","addLineWidget","insertAt","aboveVisible","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","mFrom","mTo","subMark","copySharedMarkers","unlinkDoc","CodeMirror","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","lastDrop","onDrop","clearDragCursor","files","dataTransfer","isReadOnly","FileReader","File","read","loadFile","file","allowDropFileTypes","reader","onload","readAsText","draggingText","text$1","getData","selected","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","editors","globalsRegistered","ensureGlobalHandlers","resizeTimer","onResize","registerGlobalHandlers","setSize","keyNames","3","8","9","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","44","45","46","59","61","91","92","93","106","107","109","110","111","145","173","186","187","188","189","190","191","192","219","220","221","222","63232","63233","63234","63235","63272","63273","63275","63276","63277","63302","keyMap","normalizeKeyName","alt","ctrl","cmd","mod","normalizeKeyMap","keymap","keyname","lookupKey","getKeyMap","fallthrough","isModifierKey","keyCode","addModifierNames","noShift","altKey","metaKey","shiftKey","keyName","altGraphKey","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","prep","targetTop","basic","pcDefault","emacsy","macDefault","commands","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","lineStartSmart","goLineEnd","visualLineEnd","lineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","indentLine","openLine","toggleOverwrite","firstNonWS","inWS","doHandleBinding","dropShift","ensurePolled","prevShift","stopSeq","dispatchKey","seq","keySeq","dispatchKeyInner","keyMaps","extraKeys","lookupKeyForEditor","handleKeyBinding","motion","lastStoppedKey","onKeyDown","handled","up","showCrossHair","onKeyUp","onKeyPress","charCode","handleCharBinding","lastClick","lastDoubleClick","PastClick","onMouseDown","supportsTouch","clickInGutter","repeat","compare","clickRepeat","selectingText","handleMappedButton","contained","option","addNew","moveOnDrag","configureMouse","dragDrop","moved","dragEnd","mouseMove","dragStart","e2","leftButtonStartDrag","ourRange","ourIndex","startSel","rangeForUnit","lastPos","extendTo","startCol","posCol","leftPos","oldRange","ranges$1","anchorLine","boundary","headIndex","usePart","bidiSimplify","editorSize","counter","move","buttons","curCount","leftButtonSelect","leftButtonDown","onContextMenu","findWordAt","gutterEvent","prevent","mX","mY","touches","lineBox","g","contextMenuInGutter","themeChanged","theme","Init","optionHandlers","dragDropChanged","dragFunctions","toggle","enter","over","leave","wrappingChanged","inputStyles","inputStyle","pasteIncoming","cutIncoming","autofocus","touchFinished","prevTouch","finishTouch","farAway","touch","radiusX","radiusY","isMouseLikeTouchEvent","pageX","pageY","frag","onDragOver","setData","effectAllowed","setDragImage","img","src","_top","onDragStart","getField","registerEventHandlers","finishInit","initHooks","textRendering","how","aggressive","indent","curSpace","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","defineInitHook","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","recent","paste","textLines","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","disableBrowserMagic","spellcheck","autocorrect","autocapitalize","hiddenTextarea","border","findPosH","origDir","moveOnce","boundToLine","bidi","mv","getWrappedLineExtent","moveInStorageOrder","searchInVisualLine","getRes","nextCh","moveVisually","findNextLine","sawType","getHelper","hitSide","findPosV","pageSize","moveAmount","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","posToDOM","badPos","bad","domToPos","lineNode","locateNodeInLineView","textNode","topNode","curNode","previousSibling","dist$1","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","updateFromDOM","readFromDOMSoon","forceCompositionEnd","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","blur","pollSelection","pollInterval","poll","scan","isInGutter","triggerOnKeyDown","pollContent","fromNode","toNode","toIndex","newText","closing","extraLinebreak","addText","walk","cmText","markerID","isBlock","domTextBetween","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","contentEditable","readOnlyChanged","resetPosition","TextareaInput","prevInput","pollingFast","createField","textarea","prepareCopyCut","fastPoll","dispatchEvent","Event","_display","moveInputWithCursor","headPos","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","resetSelectionOnContextMenu","oldScrollY","oldCSS","oldWrapperCSS","wrapperBox","offsetParent","scrollY","scrollTo","rehide","detectingSelectAll","prepareSelectAllHack","mouseup","extval","deflt","notOnInit","defineOption","newBreaks","refresh","getInputField","detach","attach","integer","defineOptions","helpers","setOption","getDoc","addKeyMap","removeKeyMap","addOverlay","insertSorted","modeSpec","removeOverlay","newRanges","getTokenAt","getLineTokens","getTokenTypeAt","getHelpers","help","_global","getStateAfter","defaultTextHeight","defaultCharWidth","getViewport","addWidget","vspace","hspace","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","amount","rtlMoveVisually","goalColumn","goals","startChar","check","getScrollInfo","scrollToRange","interpret","swapDoc","phrase","phraseText","phrases","getWrapperElement","getScrollerElement","getGutterElement","registerHelper","registerGlobalHelper","addEditorMethods","dontDelegate","defineMIME","mime","defineExtension","defineDocExtension","fromTextArea","tabindex","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","cmpPos","addLegacyProps","isBrowser","isIE","HIDDEN_TEXTAREA_STYLE","SIZING_STYLE","computedStyleCache","calculateNodeHeight","uiTextNode","uid","useCache","minRows","maxRows","nodeStyling","sizingStyle","getPropertyValue","boxSizing","paddingSize","borderSize","nodeInfo","calculateNodeStyling","setProperty","maxHeight","singleRowHeight","rowCount","seed","requestAnimationFrame","cancelAnimationFrame","onNextFrame","clearNextFrameAction","TextareaAutosize","_React$Component","_resizeLock","_onRootDOMNode","_rootDOMNode","inputRef","_onChange","_controlled","_resizeComponent","onChange","nodeHeight","_uid","useCacheForDOMMeasurements","_proto","_props","onHeightChange","excluded","sourceKeys","sourceSymbolKeys","_resizeListener","_this3","_clearNextFrame","_onNextFrameActionId","prevProps","prevState","purgeCache","defaultProps","_assign","CallbackQueue","PooledClass","ReactFeatureFlags","ReactReconciler","Transaction","dirtyComponents","updateBatchNumber","asapCallbackQueue","getPooled","asapEnqueued","batchingStrategy","ensureInjected","ReactUpdates","ReactReconcileTransaction","TRANSACTION_WRAPPERS","initialize","dirtyComponentsLength","flushBatchedUpdates","callbackQueue","notifyAll","ReactUpdatesFlushTransaction","reinitializeTransaction","reconcileTransaction","mountOrderComparator","c1","c2","_mountOrder","runBatchedUpdates","transaction","markerName","_pendingCallbacks","logTopLevelRenders","namedComponent","_currentElement","isReactTopLevelWrapper","getName","performUpdateIfNecessary","timeEnd","enqueue","getPublicInstance","getTransactionWrappers","destructor","release","perform","scope","addPoolingTo","queue","batchedUpdates","enqueueUpdate","isBatchingUpdates","_updateBatchNumber","injection","injectReconcileTransaction","ReconcileTransaction","injectBatchingStrategy","_batchingStrategy","asap","freeGlobal","freeSelf","_defineProperty","shouldBeReleasedProperties","EventInterface","currentTarget","eventPhase","bubbles","cancelable","timeStamp","isTrusted","SyntheticEvent","dispatchConfig","targetInst","nativeEvent","nativeEventTarget","_targetInst","Interface","propName","normalize","isDefaultPrevented","isPropagationStopped","persist","isPersistent","augmentClass","Class","fourArgumentPooler","isReactChildren","createRouteFromReactElement","createRoutesFromReactChildren","routes","_react","_react2","isValidChild","isValidElement","route","childRoutes","parentRoute","createPath","parsePath","getQueryStringValueFromPath","stripQueryStringValueFromPath","addQueryStringValueToPath","_warning","_parsePath","pathname","hash","_parsePath2","extractPath","hashIndex","searchIndex","location","basename","_dateArithmetic","monthsInYear","firstVisibleDay","firstOfMonth","lastVisibleDay","endOfMonth","visibleDays","lte","merge","defaultDate","today","tomorrow","_default","oneArgumentPooler","copyFieldsFrom","instancePool","standardReleaser","poolSize","DEFAULT_POOLER","CopyConstructor","pooler","NewKlass","twoArgumentPooler","threeArgumentPooler","a3","a4","fiveArgumentPooler","a5","baseIsNative","componentWillMount","getDerivedStateFromProps","componentWillUpdate","__reactInternalSnapshotFlag","__reactInternalSnapshot","getSnapshotBeforeUpdate","polyfill","isReactComponent","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate","componentName","newApiName","maybeSnapshot","__suppressDeprecationWarning","isShallowEqual","keysA","keysB","groupBySortedKeys","grps","makeArray","baseClone","CLONE_DEEP_FLAG","ReactChildren","ReactComponent","ReactPureComponent","ReactClass","ReactDOMFactories","ReactElement","ReactPropTypes","ReactVersion","onlyChild","createFactory","cloneElement","__spread","PureComponent","createClass","createMixin","DOM","ReactCurrentOwner","REACT_ELEMENT_TYPE","RESERVED_PROPS","__self","__source","hasValidRef","hasValidKey","owner","$$typeof","_owner","childrenLength","childArray","cloneAndReplaceKey","oldElement","newKey","_self","_source","checkMask","bitmask","DOMPropertyInjection","MUST_USE_PROPERTY","HAS_BOOLEAN_VALUE","HAS_NUMERIC_VALUE","HAS_POSITIVE_NUMERIC_VALUE","HAS_OVERLOADED_BOOLEAN_VALUE","injectDOMPropertyConfig","domPropertyConfig","Injection","Properties","DOMAttributeNamespaces","DOMAttributeNames","DOMPropertyNames","DOMMutationMethods","isCustomAttribute","_isCustomAttributeFunctions","lowerCased","propConfig","propertyInfo","attributeName","attributeNamespace","propertyName","mutationMethod","mustUseProperty","hasBooleanValue","hasNumericValue","hasPositiveNumericValue","hasOverloadedBooleanValue","ATTRIBUTE_NAME_START_CHAR","ROOT_ATTRIBUTE_NAME","ATTRIBUTE_NAME_CHAR","getPossibleStandardName","isCustomAttributeFn","ReactRef","attachRefs","mountComponent","internalInstance","hostParent","hostContainerInfo","parentDebugID","markup","getReactMountReady","getHostNode","unmountComponent","safely","detachRefs","receiveComponent","nextElement","prevElement","_context","refsChanged","shouldUpdateRefs","DOMNamespaces","setInnerHTML","createMicrosoftUnsafeLocalFunction","setTextContent","enableLazy","insertTreeChildren","tree","insertTreeBefore","html","referenceNode","namespaceURI","DOMLazyTree","replaceChildWithTree","oldNode","newTree","queueChild","parentTree","childTree","queueHTML","queueText","compilePattern","matchPattern","getParamNames","paramNames","getParams","paramValues","params","paramName","parenCount","splatIndex","parenHistory","paramValue","splat","_invariant2","encodeURI","parenText","curTokenIdx","tokensSubset","nextParenIdx","_invariant","CompiledPatternsCache","regexpSource","_compilePattern","_compilePattern2","matchedPath","remainingPathname","decodeURIComponent","falseToWarn","warned","_warning2","_resetWarned","locationsAreEqual","statesAreEqual","createLocation","createQuery","_PathUtils","_Actions","POP","typeofA","keysofA","keysofB","webpackPolyfill","paths","isNothing","subject","sequence","cycle","isNegativeZero","NEGATIVE_INFINITY","common","Type","compileList","schema","exclude","includedSchema","currentType","previousType","previousIndex","Schema","definition","implicit","loadKind","compiledImplicit","compiledExplicit","compiledTypeMap","scalar","mapping","collectType","compileMap","DEFAULT","schemas","_setPrototypeOf","objectProto","nativeObjectToString","symToStringTag","toStringTag","getRawTag","isOwn","unmasked","objectToString","baseGetTag","overArg","getPrototype","transform","isObjectLike","funcProto","funcToString","objectCtorString","EventPluginHub","EventPluginUtils","accumulateInto","forEachAccumulated","getListener","accumulateDirectionalDispatches","phase","propagationPhase","registrationName","phasedRegistrationNames","listenerAtPhase","_dispatchListeners","_dispatchInstances","accumulateTwoPhaseDispatchesSingle","traverseTwoPhase","accumulateTwoPhaseDispatchesSingleSkipTarget","parentInst","getParentInstance","accumulateDispatches","ignoredDirection","accumulateDirectDispatchesSingle","EventPropagators","accumulateTwoPhaseDispatches","accumulateTwoPhaseDispatchesSkipTarget","accumulateDirectDispatches","accumulateEnterLeaveDispatches","traverseEnterLeave","EventPluginRegistry","ReactErrorUtils","listenerBank","eventQueue","executeDispatchesAndRelease","simulated","executeDispatchesInOrder","executeDispatchesAndReleaseSimulated","executeDispatchesAndReleaseTopLevel","getDictionaryKey","_rootNodeID","injectEventPluginOrder","injectEventPluginsByName","putListener","PluginModule","registrationNameModules","didPutListener","bankForRegistrationName","shouldPreventMouseEvent","deleteListener","willDeleteListener","deleteAllListeners","extractEvents","topLevelType","plugins","possiblePlugin","extractedEvents","enqueueEvents","processEventQueue","processingEventQueue","rethrowCaughtError","__purge","__getListenerBank","getEventTarget","UIEventInterface","defaultView","parentWindow","SyntheticUIEvent","dispatchMarker","ReactInstanceMap","_reactInternalInstance","components","falsy","arrayOf","listen","go","goBack","goForward","assignValue","baseAssignValue","customizer","isNew","newValue","isLength","arrayLikeKeys","baseKeys","reason","captureStackTrace","ReactNoopUpdateQueue","updater","handler","instanceId","__id","idCount","isFirstFocusedRender","_firstFocus","dataIndexOf","valueMatcher","dataItem","valueField","dataText","dataValue","isValueEqual","datum","textField","_toConsumableArray","arr2","iterableToArray","OBSERVED_ERROR","TransactionImpl","transactionWrappers","wrapperInitData","_isInTransaction","isInTransaction","errorThrown","initializeAll","closeAll","initData","ViewportMetrics","MouseEventInterface","screenX","screenY","getModifierState","relatedTarget","fromElement","toElement","currentScrollLeft","currentScrollTop","SyntheticMouseEvent","reusableSVGContainer","WHITESPACE_TEST","NONVISIBLE_TEST","svg","svgNode","testElement","deleteData","matchHtmlRegExp","escapeHtml","hasEventPageXY","ReactEventEmitterMixin","getVendorPrefixedEventName","isEventSupported","alreadyListeningTo","isMonitoringScrollValue","reactTopListenersCounter","topEventMapping","topAbort","topAnimationEnd","topAnimationIteration","topAnimationStart","topBlur","topCanPlay","topCanPlayThrough","topChange","topClick","topCompositionEnd","topCompositionStart","topCompositionUpdate","topContextMenu","topCopy","topCut","topDoubleClick","topDrag","topDragEnd","topDragEnter","topDragExit","topDragLeave","topDragOver","topDragStart","topDrop","topDurationChange","topEmptied","topEncrypted","topEnded","topError","topFocus","topInput","topKeyDown","topKeyPress","topKeyUp","topLoadedData","topLoadedMetadata","topLoadStart","topMouseDown","topMouseMove","topMouseOut","topMouseOver","topMouseUp","topPaste","topPause","topPlay","topPlaying","topProgress","topRateChange","topScroll","topSeeked","topSeeking","topSelectionChange","topStalled","topSuspend","topTextInput","topTimeUpdate","topTouchCancel","topTouchEnd","topTouchMove","topTouchStart","topTransitionEnd","topVolumeChange","topWaiting","topWheel","topListenersIDKey","ReactBrowserEventEmitter","ReactEventListener","injectReactEventListener","setHandleTopLevel","handleTopLevel","setEnabled","enabled","isEnabled","listenTo","contentDocumentHandle","mountAt","isListening","getListeningForDocument","registrationNameDependencies","dependency","trapBubbledEvent","trapCapturedEvent","WINDOW_HANDLE","handlerBaseName","supportsEventPageXY","createEvent","ev","ensureScrollValueMonitoring","refreshScrollValues","monitorScrollValue","PUSH","REPLACE","supportsHistory","ua","supportsGoWithoutReloadUsingHash","supportsPopstateOnHashchange","isExtraneousPopstateEvent","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","entries","entry","getNative","isKeyable","__data__","DataView","Map","Promise","Set","WeakMap","toSource","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","ctorString","client","win","_isWindow","_classnames","Loading","Button","_this$props","label","icon","busy","_this$props$variant","_this$props$spinner","spinner","_this$props$component","Tag","oneOf","_spyOnComponent","spyOnComponent","_autoFocus","autoFocus","_focusManager","focusManager","_mountManager","mountManager","_timeoutManager","timeoutManager","_mixin","LIFECYCLE_HOOKS","STATIC_HOOKS","isStatic","ctx","originals","_dates","_inheritsLoose","VIEW_UNITS","clamp","CalendarView","activeId","role","CalendarViewCell","_React$Component2","handleChange","_this$props2","_proto2","_this$props3","inRange","isFocused","isNow","isOffView","_this$props4","viewUnit","isSelected","_this$props5","isDisabled","onClick","Body","Row","Cell","getMessages","messages","moveBack","moveForward","dateButton","timeButton","openCombobox","openDropdown","filterPlaceholder","emptyList","emptyFilter","createOption","searchTerm","tagsLabel","removeLabel","noneSelected","selectedItems","labels","increment","decrement","widgetEditable","widgetEnabled","isInDisabledFieldset","_reactDom","_matches","findDOMNode","interactionDecorator","disabledOnly","desc","initializer","routerMiddleware","routerActions","CALL_HISTORY_METHOD","routerReducer","LOCATION_CHANGE","syncHistoryWithStore","_reducer","_actions","_sync2","_middleware2","_iterableToArray","_arrayWithHoles","_nonIterableRest","fetch","emptyObject","refs","partialState","enqueueSetState","enqueueCallback","enqueueForceUpdate","isMounted","publicInstance","enqueueReplaceState","completeState","eventPluginOrder","namesToPlugins","recomputePluginOrdering","pluginName","pluginModule","pluginIndex","publishedEvents","eventTypes","eventName","publishEventForPlugin","eventNameDispatchConfigs","phaseName","publishRegistrationName","possibleRegistrationNames","injectedEventPluginOrder","injectedNamesToPlugins","isOrderingDirty","getPluginModuleForEvent","_resetEventPlugins","ComponentTree","TreeTraversal","executeDispatch","invokeGuardedCallbackWithCatch","invokeGuardedCallback","isEndish","isMoveish","isStartish","executeDirectDispatch","dispatchListener","dispatchInstance","dispatchListeners","dispatchInstances","executeDispatchesInOrderStopAtTrue","executeDispatchesInOrderStopAtTrueImpl","hasDispatches","isAncestor","getLowestCommonAncestor","argFrom","argTo","injectComponentTree","Injected","injectTreeTraversal","caughtError","correspondingUseElement","useHasFeature","implementation","hasFeature","eventNameSuffix","capture","isSupported","modifierKeyToProp","modifierStateGetter","keyArg","keyProp","Danger","getNodeAfter","insertChildAt","insertLazyTreeChildAt","moveChild","openingComment","closingComment","nextNode","moveDelimitedText","removeDelimitedText","startNode","DOMChildrenOperations","dangerouslyReplaceNodeWithMarkup","replaceDelimitedText","stringText","nodeAfterComment","processUpdates","updates","afterNode","mathml","MSApp","execUnsafeLocalFunction","arg0","arg1","arg2","arg3","ReactPropTypesSecret","hasReadOnlyValue","_assertSingleLink","inputProps","checkedLink","valueLink","_assertValueLink","_assertCheckedLink","checked","loggedTypeFailures","getDeclarationErrorAddendum","LinkedValueUtils","checkPropTypes","tagName","getChecked","executeOnChange","requestChange","injected","ReactComponentEnvironment","replaceNodeWithMarkup","processChildrenUpdates","injectEnvironment","environment","is","objA","objB","prevEmpty","nextEmpty","prevType","nextType","KeyEscapeUtils","escaperLookup","unescaperLookup","getInternalInstanceReadyForUpdate","callerName","ReactUpdateQueue","validateCallback","enqueueCallbackInternal","_pendingForceUpdate","_pendingStateQueue","_pendingReplaceState","enqueueElementInternal","nextContext","_pendingElement","formatUnexpectedArgument","validateDOMNesting","setRouteLeaveHook","isActive","loopAsync","turns","work","currentTurn","isDone","sync","hasNext","doneArgs","mapAsync","doneCount","_getRouteParams2","_ContextUtils","_React$PropTypes","mixins","ContextProvider","router","getDefaultProps","routeParams","elements","contextName","makeContextName","listenersKey","eventIndexKey","subscribeKey","contextProviderShape","eventIndex","ContextSubscriber","_ref4","lastRenderedEventIndexKey","handleContextUpdateKey","unsubscribeKey","getInitialState","_ref3","_setState","_setState2","hook","_AsyncUtils","_runTransitionHook","_runTransitionHook2","_LocationUtils","getCurrentLocation","getUserConfirmation","pushLocation","replaceLocation","keyLength","currentLocation","pendingLocation","beforeListeners","getCurrentIndex","updateLocation","nextLocation","currentIndex","listenBefore","confirmTransitionTo","transitionTo","prevPath","prevIndex","nextIndex","createKey","createHref","startListener","_DOMUtils","_DOMStateStorage","_ExecutionEnvironment","needsHashchangeListener","_createLocation","historyState","readState","confirm","handlePopState","handleUnpoppedHashChange","updateState","saveState","pushState","replaceState","objValue","stubFalse","freeExports","freeModule","Buffer","isBuffer","freeProcess","nodeUtil","binding","arrayFilter","stubArray","nativeGetSymbols","getSymbols","symbol","positions","tl","tr","tc","bl","br","bc","levels","success","notification","autoDismiss","dismissible","Uint8Array","arrayBuffer","byteLength","uncontrollable","controlledValues","isCompositeComponent","Utils","controlledProps","PROPS_TO_OMIT","defaultKey","UncontrolledComponent","handlerName","_notifying","_values","unmounted","attachRef","isProp","getControlledInstance","_this4","newProps","propValue","uncontrolledPropTypes","_inner","ControlledComponent","deferControlTo","newComponent","additions","nextMethods","newObj","_interopRequireWildcard","Widget","dropUp","autofilling","_this$props$isRtl","isRtl","transforms","_camelizeStyle","_getComputedStyle2","_hyphenateStyle","_isTransform","_removeStyle","_properties","animationEnd","animationDelay","animationTiming","animationDuration","animationName","transitionEnd","transitionDuration","transitionDelay","transitionTiming","transitionProperty","_inDOM","_getTransitionPropert","vendorMap","O","Moz","Webkit","vendors","getTransitionProperties","timing","componentInstance","mounted","clock","chevronLeft","chevronRight","caretDown","caretUp","Icon","_didHandle","didHandle","_reactComponentManagers","_interaction","isWidgetDefaultPrevented","defaultGetDataState","getCommonListProps","accessors","optionComponent","itemComponent","groupComponent","listProps","dataState","textAccessor","valueAccessor","nextListData","prevList","_temp","getDataState","listComponent","getStateGetterFromList","sequentialData","disabledProp","_dataHelpers","returnFalse","getIsDisabled","moveNext","_Filter","presets","startsWith","EMPTY_VALUE","prevEnabled","nextIdx","nextEnabled","lastState","groups","sortedKeys","flat","grp","REACT_STATICS","KNOWN_STATICS","caller","arity","isGetOwnPropertySymbolsAvailable","targetComponent","sourceComponent","customStatics","ponyfill","yaml","createThunkMiddleware","extraArgument","thunk","withExtraArgument","ITERATOR_SYMBOL","maybeIterable","iteratorFn","initialState","payload","locationBeforeTransitions","contentKey","_callbacks","_contexts","_arg","contexts","checkpoint","rollback","supportedInputTypes","elem","scrollPosition","escapeTextContentForBrowser","isUnitlessNumber","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridColumn","fontWeight","lineClamp","lineHeight","opacity","orphans","widows","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","prefixes","prefixKey","CSSProperty","shorthandPropertyExpansions","backgroundAttachment","backgroundColor","backgroundImage","backgroundPositionX","backgroundPositionY","backgroundRepeat","backgroundPosition","borderWidth","borderStyle","borderColor","borderBottomWidth","borderBottomStyle","borderBottomColor","borderLeft","borderLeftWidth","borderLeftStyle","borderLeftColor","borderRight","borderRightStyle","borderRightColor","borderTop","borderTopWidth","borderTopStyle","borderTopColor","font","fontStyle","fontVariant","fontSize","fontFamily","outline","outlineWidth","outlineStyle","outlineColor","quoteAttributeValueForBrowser","VALID_ATTRIBUTE_NAME_REGEX","illegalAttributeNameCache","validatedAttributeNameCache","isAttributeNameSafe","shouldIgnoreValue","DOMPropertyOperations","createMarkupForID","setAttributeForID","createMarkupForRoot","setAttributeForRoot","createMarkupForProperty","createMarkupForCustomAttribute","setValueForProperty","deleteValueForProperty","namespace","setAttributeNS","setValueForAttribute","removeAttribute","deleteValueForAttribute","didWarnValueDefaultValue","updateOptionsIfPendingUpdateAndMounted","_wrapperState","pendingUpdate","updateOptions","multiple","selectedValue","ReactDOMSelect","getHostProps","mountWrapper","initialValue","defaultValue","_handleChange","wasMultiple","getSelectValueContext","postUpdateWrapper","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","nextTick","browser","env","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","cwd","chdir","umask","ReactCompositeComponent","ReactEmptyComponent","ReactHostComponent","ReactCompositeComponentWrapper","instantiateReactComponent","shouldHaveDebugID","createInternalComponent","getNativeNode","createInstanceForText","_mountIndex","_mountImage","_instantiateReactComponent","ReactNodeTypes","HOST","COMPOSITE","EMPTY","getType","emptyComponentFactory","ReactEmptyComponentInjection","injectEmptyComponentFactory","instantiate","genericComponentClass","tagToComponentClass","textComponentClass","isTextComponent","injectGenericComponentClass","injectTextComponentClass","injectComponentClasses","componentClasses","getIteratorFn","getComponentKey","traverseContext","traverseAllChildrenImpl","nameSoFar","subtreeCount","nextNamePrefix","childrenString","setItem","getItem","removeItem","getItemIDs","addRoot","removeRoot","getRootIDs","isNative","reIsNative","itemMap","rootIDSet","itemByKey","rootByKey","getKeyFromID","getIDFromKey","unmountedIDs","purgeDeep","childIDs","describeComponentFrame","ownerName","fileName","describeID","ReactComponentTreeHook","getElement","ownerID","getOwnerID","onSetChildren","nextChildIDs","nextChildID","nextChild","parentID","onBeforeMountComponent","updateCount","onBeforeUpdateComponent","onMountComponent","onUpdateComponent","onUnmountComponent","purgeUnmountedComponents","_preventPurging","getCurrentStackAddendum","topElement","currentOwner","_debugID","getStackAddendumByID","getParentID","getChildIDs","getSource","getText","getUpdateCount","getRegisteredIDs","EventListener","eventType","registerDefault","ReactDOMSelection","containsNode","getActiveElement","ReactInputSelection","hasSelectionCapabilities","getSelectionInformation","focusedElem","selectionRange","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","getOffsets","offsets","setOffsets","ReactDOMContainerInfo","ReactDOMFeatureFlags","ReactMarkupChecksum","shouldUpdateReactComponent","ROOT_ATTR_NAME","instancesByReactRootID","getReactRootElementInContainer","mountComponentIntoNode","wrapperInstance","shouldReuseMarkup","_topLevelWrapper","ReactMount","_mountImageIntoNode","batchedMountComponentIntoNode","useCreateElement","unmountComponentFromNode","hasNonRootReactChild","rootEl","isValidContainer","getTopLevelWrapperInContainer","prevHostInstance","getHostRootInstanceInContainer","_hostContainerInfo","topLevelRootCounter","TopLevelWrapper","rootID","_instancesByReactRootID","scrollMonitor","renderCallback","_updateRootComponent","prevComponent","_renderNewRootComponent","wrapperID","_instance","renderSubtreeIntoContainer","parentComponent","_renderSubtreeIntoContainer","nextWrappedElement","_processChildContext","publicInst","updatedCallback","unmountComponentAtNode","reactRootElement","containerHasReactMarkup","containerHasNonRootReactChild","hasAttribute","rootElement","canReuseMarkup","checksum","CHECKSUM_ATTR_NAME","rootMarkup","outerHTML","normalizedMarkup","diffIndex","string1","string2","minLen","firstDifferenceIndex","_renderedNodeType","partialNextState","finishMatch","_matchRoutes2","_computeChangedRoutes","_computeChangedRoutes3","leaveRoutes","changeRoutes","enterRoutes","finishEnterHooks","redirectInfo","handleErrorOrRedirect","_getComponents2","_TransitionUtils","runLeaveHooks","removeListenBeforeHooksForRoute","runChangeHooks","runEnterHooks","RouteGuid","getRouteID","__id__","RouteHooks","getRouteHooksForRoutes","transitionHook","beforeUnloadHook","unlistenBefore","unlistenBeforeUnload","routeID","hasAnyProperties","indexOnly","_isActive3","listenBeforeLeavingRoute","thereWereNoRouteHooks","listenBeforeUnload","historyListener","redirectLocation","isPromise","then","assignRouterState","createRouterObject","transitionManager","resolveToLocation","query","activeStyle","activeClassName","onlyActiveOnIndex","handleClick","isModifiedEvent","isLeftClickEvent","toLocation","href","isEmptyObject","_InternalPropTypes","statics","onEnter","routeIndex","getRoutePattern","parentPattern","memoryHistory","_createMemoryHistory2","_useQueries2","_useBasename2","_queryString","defaultStringifyQuery","stringify","defaultParseQueryString","createHistory","stringifyQuery","parseQueryString","decodeQuery","encodeQuery","queryString","newLocation","addBasename","prependBasename","pname","normalizedBasename","normalizedPathname","QuotaExceededErrors","QuotaExceededError","QUOTA_EXCEEDED_ERR","SecurityErrors","SecurityError","sessionStorage","JSON","json","_useRouterHistory2","_useRouterHistory","FocusTrap","hotKeyMap","__hotKeyMap__","updateMap","newMap","buildMap","_isEqual2","parentMap","thisMap","_assign2","getMap","reIsUint","baseTimes","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","baseIsTypedArray","baseUnary","nodeIsTypedArray","baseIsEqual","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","SetCache","arraySome","cacheHas","equalFunc","isPartial","arrLength","othLength","stacked","arrValue","othValue","compared","othIndex","baseGetAllKeys","arrayPush","symbolsFunc","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","RangeError","encodingOrOffset","allocUnsafe","byteOffset","fromArrayLike","fromArrayBuffer","encoding","isEncoding","actual","write","fromString","buffer","fromObject","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","valLength","buf","readUInt16BE","foundIndex","hexWrite","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","hi","lo","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","_augment","species","fill","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","thisStart","thisEnd","thisCopy","targetCopy","_arr","toHex","bytes","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","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","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","dst","baseKeysIn","getSymbolsIn","_ownerDocument","WidgetPicker","openClass","picker","_SlideDownTransition","StaticContainer","shouldUpdate","Popup","Transition","transition","in","onEntering","onEntered","_on","_off","_filter","_listen","compareDocumentPosition","maybeID","maybeClass","nameOnly","simpleSelectorRE","getElementById","getElementsByTagName","_camelize","msPattern","docElem","_contains","clientTop","EXITING","ENTERED","ENTERING","EXITED","UNMOUNTED","_reactLifecyclesCompat","initialStatus","parentGroup","transitionGroup","appear","isMounting","appearStatus","unmountOnExit","mountOnEnter","status","nextCallback","updateStatus","nextStatus","cancelNextCallback","getTimeouts","exit","mounting","performEnter","performExit","appearing","timeouts","enterTimeout","safeSetState","onTransitionEnd","onExit","onExiting","onExited","setNextCallback","doesNotHaveTimeoutOrListener","addEndListener","childProps","_objectWithoutPropertiesLoose","validate","checkType","propFullName","componentNameSafe","propFullNameSafe","chainedCheckType","manager","timers","_Button","Select","bordered","CustomPropTypes","Props","_widgetHelpers","_reduceToListState","_Listbox","_ListOption","_ListOptionGroup","_messages","onSelect","onMove","renderItem","renderGroup","focusedItem","selectedItem","List","mapItems","items","runningIdx","itemIdx","renderedIndexOf","renderOption","Option","_this$props6","elementProps","emptyListMessage","isHeader","_ref2$searchTerm","_normalizeOptions","normalizeOptions","minLength","_ref3$searchTerm","_normalizeOptions2","suggest","_ref4$searchTerm","_normalizeOptions3","neq","gt","gte","lt","endsWith","nextOptions","minLengh","_ref$caseSensitive","caseSensitive","textValue","normalizeFilter","nodeRef","Listbox","ListOption","handleSelect","getScrollParent","currentFocused","currentVisible","cancelScroll","nextFocused","lastVisible","lastItem","_scrollTo","createDOMFactory","area","article","aside","audio","bdi","bdo","big","blockquote","canvas","caption","cite","colgroup","datalist","del","details","dfn","dialog","dl","dt","em","embed","fieldset","figcaption","figure","footer","h1","h2","h3","h4","h5","h6","header","hgroup","hr","iframe","ins","kbd","keygen","legend","li","link","main","menu","menuitem","meta","meter","nav","noscript","ol","optgroup","param","picture","progress","q","rp","ruby","samp","script","section","small","strong","summary","sup","table","tbody","td","tfoot","thead","track","ul","var","video","wbr","circle","clipPath","defs","ellipse","image","linearGradient","mask","polygon","polyline","radialGradient","tspan","focusable","isTabIndexNotNaN","isTabIndexNaN","tabbable","thisArg","nativeMax","nonEnumShadows","isArrayLikeObject","isPrototype","assigner","copyObject","otherArgs","baseRest","sources","isIterateeCall","cmCfg","modeCfg","htmlMode","htmlModeMissing","highlightFormatting","maxBlockquoteDepth","taskLists","strikethrough","emoji","fencedCodeBlockHighlighting","xml","tokenTypeOverrides","tokenTypes","quote","list1","list2","list3","imageAltText","imageMarker","formatting","linkInline","linkEmail","linkText","linkHref","tokenType","hrRE","listRE","taskListRE","atxHeaderRE","allowAtxHeaderWithoutSpace","setextHeaderRE","textRE","fencedCodeRE","linkDefRE","punctuation","switchInline","inline","switchBlock","linkTitle","indentedCode","htmlBlock","htmlState","tagStart","tokenize","isInText","inlineNormal","blockNormal","trailingSpaceNewLine","prevLine","thisLine","firstTokenOnLine","prevLineLineIsEmpty","prevLineIsIndentedCode","prevLineIsHr","prevLineIsList","maxNonCodeIndentation","listStack","lineIndentation","indentationDiff","allowsInlineContinuation","fencedCodeEnd","isHr","setext","listType","taskList","fencedEndRE","localMode","findModeByName","mimes","localState","footnoteLink","md_inside","returnType","currListInd","hasExitedList","maxFencedEndInd","taskOpen","taskClosed","listMod","handleText","matchCh","previousFormatting","formattingEscape","atts","leftFlanking","rightFlanking","setEm","setStrong","retType","endChar","returnState","linkRE","footnoteLinkInside","footnoteUrl","textAfter","blockCommentStart","blockCommentEnd","closeBrackets","fold","htmlConfig","autoSelfClosers","implicitlyClosed","contextGrabbers","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","editorConf","config_","setStyle","inText","parser","inBlock","doctype","depth","inTag","baseState","closure","isInAttribute","inAttribute","stringStartCol","terminator","startOfLine","noIndent","popContext","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","attrState","matchClosing","closeState","closeStateErr","_stream","attrEqState","attrValueState","attrContinuedState","baseIndent","fullLine","multilineTagIndentPastTag","multilineTagIndentFactor","alignCDATA","tagAfter","grabbers","configuration","skipAttribute","xmlCurrentTag","xmlCurrentContext","cx","overlayMode","combine","basePos","baseCur","overlayPos","overlayCur","streamSeen","combineTokens","overlayToken","symbolObservablePonyfill","observable","createReactClass","NotificationContainer","Constants","Styles","NotificationSystem","_isMounted","_getStyles","overrideStyle","overrideWidth","setOverrideStyle","Wrapper","Containers","DefaultStyle","messageWrapper","dismiss","actionWrapper","byElement","_element","_didNotificationRemoved","notifications","toCheck","onRemove","noAnimation","allowHTML","addNotification","_notification","onAdd","getNotificationRef","foundNotification","removeNotification","_hideNotification","editNotification","newNotification","newNotifications","stateNotification","clearNotifications","containers","_notifications","getStyles","define","dragEl","parentEl","ghostEl","cloneEl","nextEl","lastDownEl","scrollEl","scrollParentEl","scrollCustomFn","oldIndex","newIndex","activeGroup","putSortable","pointerElemChangedInterval","lastPointerElemX","lastPointerElemY","tapEvt","touchEvt","lastTarget","lastDirection","lastMode","targetMoveDistance","ghostRelativeParent","realDragElRect","autoScrolls","scrolling","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","R_SPACE","expando","$","jQuery","Zepto","Polymer","captureMode","passive","IE11OrLess","Edge","FireFox","Safari","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_silent","_alignedSilent","savedInputChecked","_detectDirection","elCSS","_css","elWidth","child1","_getChild","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginRight","_getRect","secondChildWidth","flexDirection","gridTemplateColumns","float","touchingSideChild2","_isClientInRowColumn","targetRect","targetS1Opp","targetS2Opp","mouseOnOppAxis","_getParentAutoScrollElement","includeSelf","_getWindowScrollingElement","gotSelf","elemCSS","overflowX","overflowY","scrollingElement","_scrollBy","_autoScroll","_throttle","evt","isFallback","sens","scrollSensitivity","speed","scrollSpeed","winScroller","scrollThisInstance","_clearAutoScrolls","scrollFn","layersOut","currentParent","vx","vy","scrollPosX","scrollPosY","pid","layer","Sortable","_emulateDragOver","_onTouchMove","scrollOffsetY","scrollOffsetX","bubbleScroll","autoScroll","_prepareGroup","toFn","pull","sameGroup","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","_checkAlignment","_computeIsAligned","_isTrueParentSortable","trueParent","_artificalBubble","sortable","originalEvt","nextParent","_extend","artificialBubble","_hideGhostForTarget","_unhideGhostForTarget","stopImmediatePropagation","_throttleTimeout","nearestEmptyInsertDetectEvent","nearest","_lastChild","emptyInsertThreshold","insideHorizontally","insideVertically","_detectNearestEmptySortable","_onDragOver","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","dropBubble","dragoverBubble","dataIdAttr","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","_closest","includeCTX","_getParentOrHost","_toggleClass","classList","_matrix","appliedTransforms","DOMMatrix","WebKitCSSMatrix","CSSMatrix","_find","_dispatchEvent","targetEl","toEl","fromEl","onName","CustomEvent","initEvent","originalEvent","pullMode","lastPutMode","_onMove","dragRect","willInsertAfter","retVal","onMoveFn","dragged","draggedRect","related","relatedRect","_disableDraggable","_unsilent","childNum","currentChild","lastElementChild","previousElementSibling","_getInsertDirection","_index","_generateId","sum","msMatchesSelector","webkitMatchesSelector","_clone","dom","_nextTick","_cancelNextTick","adjustForTransform","adjustForFixed","elRect","innerWidth","containerRect","matrix","_isScrolledPast","elSide","parentSide","_getRelativeScrollOffset","sortableMouseAligned","_getDirection","originalTarget","composedPath","inputs","_saveInputCheckedState","isContentEditable","_prepareDragStart","_handleAutoScroll","ogElemScroller","newElem","dragStartFn","_lastX","_lastY","_disableDelayedDragEvents","_triggerDragStart","_onDrop","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","pointerType","_onDragStart","_dragStarted","_appendGhost","_nulling","forAutoScroll","relativeScrollOffset","translate3d","ghostRelativeParentRect","_hideClone","_cloneId","_loopId","_dragStartId","revert","activeSortable","isOwner","canSort","animated","completed","elLastChild","mouseOnAxis","targetS2","_ghostIsLast","_showClone","targetBeforeFirstSwap","aligned","differentLevel","side1","scrolledPastTop","scrollBefore","el1","el2","el1Rect","el2Rect","el1S1Opp","el1S2Opp","el1OppLength","el2S1Opp","el2S2Opp","el2OppLength","_isElInRowColumn","isLastTarget","targetS1","_getSwapDirection","nextElementSibling","moveVector","insertion","_animate","prevRect","currentRect","_offUpEvents","handleEvent","dropEffect","_globalDragOver","destroy","cloneHidden","utils","toggleClass","cancelNextTick","detectDirection","getChild","_class2","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_class3","_activeElement","_deprecated","_uncontrollable","_Widget","_WidgetPicker","_Popup","_Calendar","_DateTimePickerInput","_Select","_TimeList","_scrollManager","_Icon","_initializerDefineProperty","_assertThisInitialized","_applyDecoratedDescriptor","decorators","decorator","NEXT_VIEW","onToggle","onCurrentDateChange","editFormat","timeComponent","dateIcon","timeIcon","popupTransition","containerClassName","DateTimePicker","attachCalRef","calRef","attachTimeRef","timeRef","attachInputRef","inputId","dateId","listId","activeCalendarId","activeOptionId","handleScroll","renderInput","owns","ariaLabelledby","ariaDescribedby","inputReadOnly","editing","renderButtons","handleCalendarClick","handleTimeClick","renderCalendar","calendarProps","handleDateSelect","onNavigate","renderTimeList","timeListProps","dateOrNull","handleTimeSelect","preserveDate","shouldRenderList","shouldRenderTimeList","shouldRenderCalendar","handleKeyDown","handleKeyPress","handleBlur","handleFocus","_this$props7","inRangeValue","constrain","_this4$props","_this5","_this5$props","_this6","_this7","dateTime","dateStr","formatDate","_this8","_this9","_this10","isTime","_List","_AddToListOption","_DropdownListInput","Filter","_getAccessors","CREATE_OPTION","DropdownList","handleFocusChanged","handleInputChange","handleAutofillChange","filledValue","_iterator","_isArray","handleAutofill","attachFilterRef","filterRef","attachListRef","listRef","valueChanged","lastValue","initialIdx","nextFocusedItem","nextValue","clearSearch","renderList","searchIcon","_this$state","filteredData","allowCreate","createId","handleCreate","selectIcon","busySpinner","valueComponent","_this$state2","valueItem","findOrSelf","shouldRenderPopup","autoComplete","onAutofill","onAutofillChange","findOption","character","_currentWord","onSearch","lastSearchTerm","onCreate","hasExtactMatch","_this$state3","lower","_this7$props","_this7$state","createIsFocused","canCreate","closeWithFocus","focusItem","localizer","decade","_moment","endOfDecade","century","endOfCentury","getMoment","_format","_configure","setDateLocalizer","localField","_brace2","_lodash2","acequire","editorOptions","ReactAce","_PureComponent","onBeforeLoad","cursorStart","showGutter","wrapEnabled","showPrintMargin","_props$scrollMargin","scrollMargin","keyboardHandler","onLoad","annotations","editor","edit","editorProps","renderer","setScrollMargin","getSession","setMode","setTheme","setFontSize","setShowGutter","setUseWrapMode","setShowPrintMargin","onCopy","onPaste","session","onScroll","handleOptions","setAnnotations","handleMarkers","availableOptions","$options","command","addCommand","setKeyboardHandler","oldProps","appliedClassesArray","oldClass","setOptions","scrollMargins","handleScrollMargins","silent","fromJSON","resize","margins","setScrollMargins","currentMarkers","getMarkers","removeMarker","_i2","startRow","endRow","endCol","_ref$inFront","inFront","addMarker","_props2","divStyle","minLines","maxLines","highlightActiveLine","enableBasicAutocompletion","enableLiveAutocompletion","CodeMirrorSpellChecker","marked","isMac","bindings","toggleBold","toggleItalic","drawLink","toggleHeadingSmaller","toggleHeadingBigger","drawImage","toggleBlockquote","toggleOrderedList","toggleUnorderedList","toggleCodeBlock","togglePreview","toggleStrikethrough","toggleHeading1","toggleHeading2","toggleHeading3","cleanBlock","drawTable","drawHorizontalRule","toggleSideBySide","toggleFullScreen","shortcuts","isMobile","opera","fixShortcut","createIcon","enableTooltips","actionName","tooltip","getBindingName","createTootlip","createSep","stat","bold","italic","saved_overflow","codemirror","toolbarButton","toolbarElements","fullscreen","sidebyside","_toggleBlock","blockStyles","fenceCharsToInsert","fencing_line","token_state","code_type","line_num","firstTok","lastTok","fencedChars","block_start","block_end","cur_start","cur_end","tok","is_code","start_text","start_line","end_text","end_line","fence_chars","search_from","next_line","next_line_last_tok","no_sel_and_starting_of_line","sel_multi","start_line_sel","end_line_sel","repl_start","repl_end","_replaceSelection","insertFencingAtSelection","_toggleLine","_toggleHeading","startPoint","endPoint","_cleanBlock","url","promptURLs","prompt","promptTexts","insertTexts","horizontalRule","preview","useSideBySideListener","previewNormal","toolbar","toolbar_div","sideBySideRenderingFunction","previewRender","startEnd","currHeadingLevel","repl","start_chars","end_chars","_mergeProperties","wordCount","toolbarBuiltInButtons","SimpleMDE","autoDownloadFA","autoDownloadFontAwesome","styleSheets","log","showIcons","plainText","markdown","parsingConfig","autosave","unique_id","foundSavedValue","isLocalStorageAvailable","localStorage","markedOptions","renderingConfig","singleLineBreaks","breaks","codeSyntaxHighlighting","_rendered","backdrop","spellChecker","gitHubSpice","codeMirrorInstance","styleSelectedText","forceSync","gui","createToolbar","statusbar","createStatusbar","sideBySide","createSideBySide","temp_cm","simplemde","loaded","getHours","getMinutes","autosaveTimeoutId","clearAutosavedValue","cScroll","pScroll","ratio","onscroll","toolbarData","toolbarGuideIcon","hideIcons","nonSeparatorIconsFollow","toolbarTips","onclick","cmWrapper","onUpdate","isPreviewActive","isSideBySideActive","isFullscreenActive","supportMultiple","Dropzone","isDragActive","isDragReject","allFilesAccepted","onDropAccepted","onDropRejected","disablePreview","fileList","acceptedFiles","rejectedFiles","onFileDialogCancel","fileInputEl","isFileDialogActive","accept","rejectClassName","rejectStyle","borderRadius","appliedStyle","inputAttributes","divProps","customProps","onDragEnter","onDragLeave","disableClick","maxSize","minSize","isMultipleAllowed","dataTransferItemsList","isImmutable","_isImmutable2","_trackForMutations2","tracker","detectMutations","wasMutated","BETWEEN_DISPATCHES_MESSAGE","dispatchedAction","INSIDE_DISPATCH_MESSAGE","_jsonStringifySafe2","pad","num","maxLength","formatTime","getSeconds","getMilliseconds","timer","performance","getLogLevel","_options$level","_options$logger","logger","_options$logErrors","logErrors","_options$duration","_options$timestamp","timestamp","transformer","_options$stateTransfo","stateTransformer","_options$actionTransf","actionTransformer","actn","_options$errorTransfo","errorTransformer","_options$colors","colors","logBuffer","printBuffer","logEntry","started","startedTime","took","nextEntry","formattedAction","isCollapsed","formattedTime","titleCSS","groupCollapsed","prevStateLevel","actionLevel","errorLevel","nextStateLevel","groupEnd","returnedValue","isNativeReflectConstruct","Reflect","sham","Proxy","Parent","_cache","_slicedToArray","arrayWithHoles","_n","_s","nonIterableRest","traverseAllChildren","userProvidedKeyEscapeRegex","escapeUserProvidedKey","ForEachBookKeeping","forEachFunction","forEachContext","forEachSingleChild","bookKeeping","MapBookKeeping","mapResult","keyPrefix","mapFunction","mapContext","mapSingleChildIntoContext","childKey","mappedChild","mapIntoWithKeyPrefixInternal","escapedPrefix","forEachSingleChildDummy","forEachFunc","ComponentDummy","isPureReactComponent","injectedMixins","ReactClassInterface","updateComponent","RESERVED_SPEC_KEYS","mixSpecIntoComponent","createMergedResultFunction","mixStaticSpecIntoComponent","autobind","validateMethodOverride","isAlreadyDefined","specPolicy","ReactClassMixin","autoBindPairs","__reactAutoBindPairs","isReactClassMethod","createChainedFunction","mergeIntoWithNoDuplicateKeys","one","two","bindAutoBindMethod","newState","ReactClassComponent","autoBindKey","bindAutoBindMethods","injectMixin","ReactPropTypeLocationNames","createPrimitiveTypeChecker","createChainableTypeChecker","typeChecker","PropTypeError","getPropType","expectedClass","locationName","expectedClassName","getClassName","isNode","objectOf","expectedValues","arrayOfTypeCheckers","checker","shapeTypes","secret","expectedType","getPreciseType","_ref$selectLocationSt","selectLocationState","defaultSelectLocationState","_ref$adjustUrlOnRepla","adjustUrlOnReplay","initialLocation","isTimeTraveling","unsubscribeFromStore","unsubscribeFromHistory","getLocationInStore","useInitialIfEmpty","handleStoreChange","locationInStore","handleLocationChange","lastPublishedLocation","unsubscribed","routing","_action$payload","ReactDefaultInjection","getHostComponentFromComposite","ReactDOM","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","__REACT_DEVTOOLS_GLOBAL_HOOK__","Mount","Reconciler","ARIADOMPropertyConfig","BeforeInputEventPlugin","ChangeEventPlugin","DefaultEventPluginOrder","EnterLeaveEventPlugin","HTMLDOMPropertyConfig","ReactComponentBrowserEnvironment","ReactDOMComponent","ReactDOMEmptyComponent","ReactDOMTreeTraversal","ReactDOMTextComponent","ReactDefaultBatchingStrategy","ReactInjection","SVGDOMPropertyConfig","SelectEventPlugin","SimpleEventPlugin","alreadyInjected","EventEmitter","HostComponent","EmptyComponent","Updates","FallbackCompositionState","SyntheticCompositionEvent","SyntheticInputEvent","END_KEYCODES","canUseCompositionEvent","canUseTextInputEvent","isPresto","useFallbackCompositionData","SPACEBAR_CHAR","beforeInput","bubbled","captured","compositionEnd","compositionStart","compositionUpdate","hasSpaceKeypress","isFallbackCompositionEnd","getDataFromCustomEvent","currentComposition","extractCompositionEvent","fallbackData","getCompositionEventType","isFallbackCompositionStart","customData","extractBeforeInputEvent","chars","getNativeBeforeInputChars","isKeypressCommand","getFallbackBeforeInputChars","getTextContentAccessor","_root","_startText","_fallbackText","startLength","endValue","endLength","minEnd","sliceTail","isTextInputElement","activeElementInst","activeElementValue","activeElementValueProp","doesChangeEventBubble","manualDispatchChangeEvent","runEventInBatch","stopWatchingForChangeEventIE8","getTargetInstForChangeEvent","handleEventsForChangeEventIE8","startWatchingForChangeEventIE8","isInputEventSupported","newValueProp","stopWatchingForValueChange","handlePropertyChange","getTargetInstForInputEvent","handleEventsForInputEventIE","startWatchingForValueChange","getTargetInstForInputEventIE","getTargetInstForClickEvent","getTargetInstFunc","handleEventFunc","targetNode","shouldUseChangeEvent","ReactOwner","addComponentAsRefTo","prevRef","prevOwner","nextRef","nextOwner","removeComponentAsRefFrom","detachRef","isValidOwner","ownerPublicInstance","mouseEnter","mouseLeave","acceptCharset","accessKey","allowFullScreen","allowTransparency","async","autoPlay","cellPadding","cellSpacing","charSet","challenge","classID","cols","colSpan","contextMenu","controls","crossOrigin","download","encType","formAction","formEncType","formMethod","formNoValidate","formTarget","frameBorder","headers","hrefLang","htmlFor","httpEquiv","inputMode","integrity","keyParams","keyType","manifest","marginHeight","marginWidth","media","mediaGroup","muted","nonce","noValidate","optimum","playsInline","poster","preload","profile","radioGroup","referrerPolicy","reversed","rows","rowSpan","sandbox","scoped","seamless","spellCheck","srcDoc","srcLang","srcSet","useMap","wmode","about","datatype","inlist","resource","vocab","autoCapitalize","autoCorrect","autoSave","color","itemProp","itemScope","itemType","itemID","itemRef","security","unselectable","dangerouslyProcessChildrenUpdates","createNodesFromMarkup","oldChild","newChild","createArrayFromMixed","getMarkupWrap","dummyNode","nodeNamePattern","handleScript","nodeNameMatch","getNodeName","wrapDepth","scripts","nodes","hasArrayNature","callee","shouldWrap","selectWrap","tableWrap","trWrap","svgWrap","markupWrap","ReactDOMIDOperations","AutoFocusUtils","CSSPropertyOperations","ReactDOMInput","ReactDOMOption","ReactDOMTextarea","ReactMultiChild","ReactServerRenderingTransaction","getNode","CONTENT_TYPES","dangerouslySetInnerHTML","suppressContentEditableWarning","assertValidProps","voidElementTags","_tag","enqueuePutListener","containerInfo","_node","inputPostMount","postMountWrapper","textareaPostMount","optionPostMount","mediaEvents","trapBubbledEventsLocal","postUpdateSelectWrapper","omittedCloseTags","newlineEatingTags","VALID_TAG_REGEX","validatedTagCache","isCustomComponent","globalIdCounter","validateDangerousTag","_namespaceURI","_previousStyle","_previousStyleCopy","Mixin","_idCounter","parentTag","mountImage","createElementNS","_updateDOMProperties","lazyTree","_createInitialChildren","tagOpen","_createOpenTagMarkupAndPutListeners","tagContent","_createContentMarkup","focusDOMComponent","propKey","createMarkupForStyles","renderToStaticMarkup","__html","contentToUse","childrenToUse","mountChildren","mountImages","lastProps","_updateDOMChildren","updateWrapper","styleName","styleUpdates","lastStyle","nextProp","lastProp","setValueForStyles","lastContent","nextContent","lastHtml","nextHtml","lastChildren","nextChildren","lastHasContentOrHtml","nextHasContentOrHtml","updateChildren","updateTextContent","updateMarkup","unmountChildren","dangerousStyleValue","hyphenateStyleName","memoizeStringOnly","processStyleName","hasShorthandPropertyBug","styleFloatAccessor","tempStyle","cssFloat","serialized","styleValue","expansion","individualStyleName","camelize","_hyphenPattern","hyphenate","_uppercasePattern","runEventQueueInBatch","makePrefixMap","styleProp","vendorPrefixes","animationend","animationiteration","animationstart","transitionend","prefixedEventNames","prefixMap","forceUpdateIfMounted","defaultChecked","initialChecked","rootNode","queryRoot","otherNode","otherInstance","didWarnInvalidOptionChildren","flattenChildren","selectValue","selectParent","hostProps","ReactChildReconciler","processQueue","updateQueue","_reconcilerInstantiateChildren","nestedChildren","instantiateChildren","_reconcilerUpdateChildren","prevChildren","nextNestedChildrenElements","removedNodes","nextMarkup","_updateChildren","nextMountIndex","lastPlacedNode","prevChild","_mountChildAtIndex","_unmountChild","renderedChildren","makeMove","createChild","makeInsertMarkup","makeRemove","instantiateChild","childInstances","selfDebugID","keyUnique","nestedChildNodes","nextChildInstance","nextChildMountImage","renderedChild","CompositeTypes","StatelessComponent","warnIfInvalidElement","nextMountID","_compositeType","_calledComponentWillUnmount","renderedElement","publicProps","publicContext","_processContext","getUpdateQueue","doConstruct","shouldConstruct","_constructComponent","isPureComponent","unstable_handleError","performInitialMountWithErrorHandling","performInitialMount","_constructComponentWithoutOwner","_processPendingState","_renderValidatedComponent","_maskContext","maskedContext","currentContext","childContext","_checkContextTypes","typeSpecs","prevContext","prevParentElement","nextParentElement","prevUnmaskedContext","nextUnmaskedContext","willReceive","_performComponentUpdate","unmaskedContext","hasComponentDidUpdate","_updateRenderedComponent","prevComponentInstance","prevRenderedElement","nextRenderedElement","oldHostNode","_replaceNodeWithMarkup","prevInstance","_renderValidatedComponentWithoutOwnerOrContext","publicComponentInstance","nextDebugID","flattenSingleChildIntoContext","ReactServerUpdateQueue","noopCallbackQueue","domID","createComment","instA","instB","depthA","tempA","depthB","tempB","pathFrom","pathTo","_stringText","_closingComment","_commentNodes","openingValue","escapedText","nextText","nextStringText","commentNodes","hostNode","RESET_BATCHED_UPDATES","ReactDefaultBatchingStrategyTransaction","alreadyBatchingUpdates","getUnboundedScrollPosition","findParent","TopLevelCallbackBookKeeping","ancestors","handleTopLevelImpl","ancestor","_handleTopLevel","scrollValueMonitor","_enabled","scrollable","Window","currentlyEnabled","previouslyEnabled","reactMountReady","getNodeForCharacterOffset","useIEOffsets","selectedRange","selectedLength","fromStart","duplicate","setEndPoint","startOffset","currentRange","startContainer","endContainer","rangeLength","tempRange","cloneRange","selectNodeContents","endOffset","detectionRange","isBackward","startMarker","endMarker","getLeafNode","getSiblingNode","nodeStart","nodeEnd","isTextNode","outerNode","innerNode","Node","NS","ATTRS","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeType","autoReverse","azimuth","baseFrequency","baseProfile","baselineShift","bbox","by","calcMode","capHeight","clip","clipRule","clipPathUnits","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cy","decelerate","descent","diffuseConstant","dominantBaseline","dur","edgeMode","elevation","enableBackground","exponent","externalResourcesRequired","fillRule","filterRes","filterUnits","floodColor","fontSizeAdjust","fontStretch","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","ideographic","imageRendering","in2","intercept","k1","k2","k3","k4","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","markerEnd","markerMid","markerStart","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","mathematical","numOctaves","operator","orient","orientation","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","points","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","rotate","rx","ry","scale","shapeRendering","slope","spacing","specularConstant","specularExponent","spreadMethod","stdDeviation","stemh","stemv","stitchTiles","stopColor","strikethroughPosition","strikethroughThickness","stroke","strokeLinecap","strokeLinejoin","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","vHanging","vIdeographic","vMathematical","vectorEffect","vertAdvY","vertOriginX","vertOriginY","viewBox","viewTarget","widths","wordSpacing","writingMode","xHeight","x1","x2","xChannelSelector","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlns","xmlnsXlink","xmlLang","xmlSpace","y1","y2","yChannelSelector","z","zoomAndPan","skipSelectionChangeEvent","lastSelection","mouseDown","hasListener","constructSelectEvent","currentSelection","boundingTop","boundingLeft","syntheticEvent","SyntheticAnimationEvent","SyntheticClipboardEvent","SyntheticFocusEvent","SyntheticKeyboardEvent","SyntheticDragEvent","SyntheticTouchEvent","SyntheticTransitionEvent","SyntheticWheelEvent","getEventCharCode","topLevelEventsToDispatchConfig","capitalizedEvent","onEvent","topEvent","onClickListeners","isInteractive","EventConstructor","elapsedTime","pseudoElement","ClipboardEventInterface","KeyboardEventInterface","normalizeKey","translateToKey","12","112","113","114","115","116","117","118","119","120","121","122","123","144","224","TouchEventInterface","targetTouches","changedTouches","deltaX","deltaY","deltaZ","deltaMode","topLevelWrapper","useFiber","adler32","TAG_END","COMMENT_START","addChecksumToMarkup","existingChecksum","componentOrElement","originalModule","_createTransitionManager3","_RouterContext2","_RouterUtils","onError","matchContext","handleError","createTransitionManager","_unlisten","_state","prevRoutes","nextRoutes","parentIsLeaving","isLeaving","routeParamsChanged","paramsChanged","enterHooks","createTransitionHook","getEnterHooks","runTransitionHooks","changeHooks","getChangeHooks","onLeave","PendingHooks","asyncArity","pendingHooks","isSync","currentPathname","pathIsActive","routeIsActive","activeQuery","deepEqual","queryIsActive","_PromiseUtils","getComponent","getComponents","componentReturn","getComponentsForRoute","matchRoutes","_routerWarning","createParams","assignParams","matchRouteDeep","_ret2","getIndexRoute","indexRoute","indexRoutesReturn","pathless","childRoute","_match$routes","onChildRoutes","getChildRoutes","childRoutesReturn","_Link2","WithRouter","_hoistNonReactStatics2","_Redirect2","_createTransitionManager2","renderProps","strictUriEncode","objectAssign","encode","opts","extract","arrayFormat","parserForArrayFormat","keysSorter","encoderForArrayFormat","val2","_createHistory2","createStateStorage","canGo","_options","storage","withContext","renderRouterContext","withComponent","renderRouteComponent","makeCreateElement","baseCreateElement","_createBrowserHistory2","_createRouterHistory2","BrowserProtocol","RefreshProtocol","useRefresh","forceRefresh","Protocol","listenerCount","stopListener","unlisten","_BrowserProtocol","_createHashHistory2","HashProtocol","addLeadingSlash","HashPathCoders","hashbang","encodePath","decodePath","noslash","slash","queryKey","hashType","pathCoder","getHashPath","replaceHashPath","prevLocation","handleHashChange","encodedPath","updateHash","pushHashPath","_reactDom2","_FocusTrap2","_HotKeyMapMixin2","_isBoolean2","_isArray2","_isObject2","_forEach2","getSequencesFromMap","hotKeyName","sequences","HotKeys","hotKeyParent","Mousetrap","__mousetrap__","updateHotKeys","childHandledSequence","_props$handlers","_prevProps$handlers","prevHandlers","sequenceHandlers","mousetrap","hotKey","handlerSequences","__isFocused__","__lastChildSequence__","_props3","isMasked","reIsHostCtor","coreJsData","maskSrcKey","IE_PROTO","overRest","setToString","baseSetToString","shortOut","nativeNow","lastCalled","stamp","baseIsArguments","typedArrayTags","baseIsEqualDeep","equalArrays","equalByTag","equalObjects","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","assocIndexOf","LARGE_ARRAY_SIZE","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","getMapData","setCacheAdd","setCacheHas","mapToArray","setToArray","symbolProto","symbolValueOf","convert","getAllKeys","objProps","objLength","skipCtor","objCtor","othCtor","resIndex","arrayEach","baseEach","castFunction","baseForOwn","createBaseEach","baseFor","createBaseFor","fromRight","iterable","eachFunc","_REVERSE_MAP","_MAP","_KEYCODE_MAP","_SHIFT_MAP","_SPECIAL_ALIASES","_bindMultiple","unbind","trigger","_directMap","stopCallback","_belongsTo","initialEventTarget","handleKey","_handleKey","addKeycodes","documentMousetrap","_addEvent","_characterFromEvent","_isModifier","_pickBestAction","modifiers","_getReverseMap","_getKeyInfo","combination","_keysFromString","targetElement","_resetTimer","_sequenceLevels","_ignoreNextKeyup","_ignoreNextKeypress","_nextExpectedAction","_resetSequences","doNotReset","activeSequences","_getMatches","sequenceName","modifiers1","modifiers2","deleteCombo","combo","deleteSequence","_fireCallback","_preventDefault","_stopPropagation","_handleKeyEvent","_eventModifiers","_bindSequence","_increaseSequence","nextAction","_callbackAndReset","wrappedCallback","_bindSingle","maxLevel","processedSequenceCallback","ignoreThisKeypress","combinations","emptyFunctionWithReset","resetWarningCache","shim","getShim","exact","_interopDefault","ex","React__default","reducePropsToState","handleStateChangeOnClient","mapStateOnServer","mountedInstances","emitChange","SideEffect","rewind","recordedState","compareContext","bHasOwnProperty","valueA","valueB","support","Blob","viewClasses","isArrayBufferView","normalizeName","normalizeValue","iteratorFor","Headers","append","consumed","bodyUsed","fileReaderReady","onerror","readBlobAsArrayBuffer","blob","promise","readAsArrayBuffer","bufferClone","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","FormData","_bodyFormData","URLSearchParams","_bodyArrayBuffer","rejected","readBlobAsText","readArrayBufferAsText","formData","decode","oldValue","Request","credentials","upcased","normalizeMethod","referrer","parseHeaders","rawHeaders","Response","bodyInit","statusText","response","redirectStatuses","redirect","DOMException","request","aborted","xhr","XMLHttpRequest","abortXhr","abort","getAllResponseHeaders","responseURL","responseText","ontimeout","onabort","withCredentials","responseType","setRequestHeader","onreadystatechange","readyState","send","loader","dumper","deprecated","FAILSAFE_SCHEMA","JSON_SCHEMA","CORE_SCHEMA","DEFAULT_SAFE_SCHEMA","DEFAULT_FULL_SCHEMA","load","loadAll","safeLoad","safeLoadAll","dump","safeDump","MINIMAL_SCHEMA","SAFE_SCHEMA","DEFAULT_SCHEMA","addConstructor","Mark","_hasOwnProperty","PATTERN_NON_PRINTABLE","PATTERN_NON_ASCII_LINE_BREAKS","PATTERN_FLOW_INDICATORS","PATTERN_TAG_HANDLE","PATTERN_TAG_URI","is_EOL","is_WHITE_SPACE","is_WS_OR_EOL","is_FLOW_INDICATOR","fromHexCode","lc","simpleEscapeSequence","charFromCodepoint","simpleEscapeCheck","simpleEscapeMap","State","filename","onWarning","legacy","implicitTypes","typeMap","lineIndent","documents","generateError","throwError","throwWarning","directiveHandlers","YAML","major","minor","checkLineBreaks","TAG","tagMap","captureSegment","checkJson","_position","_length","_character","_result","mergeMappings","destination","overridableKeys","quantity","storeMappingPair","keyTag","keyNode","valueNode","startLine","startPos","readLineBreak","skipSeparationSpace","allowComments","checkIndent","lineBreaks","testDocumentSeparator","writeFoldedLines","readBlockSequence","nodeIndent","_line","_anchor","detected","anchorMap","composeNode","readTagProperty","tagHandle","isVerbatim","isNamed","readAnchorProperty","parentIndent","nodeContext","allowToSeek","allowCompact","allowBlockStyles","allowBlockScalars","allowBlockCollections","typeIndex","typeQuantity","flowIndent","blockIndent","indentStatus","atNewLine","hasContent","following","_pos","atExplicitKey","readBlockMapping","isPair","isExplicitPair","isMapping","readNext","readFlowCollection","captureStart","folding","chomping","didReadContent","detectedIndent","textIndent","emptyLines","atMoreIndented","readBlockScalar","captureEnd","readSingleQuotedScalar","hexLength","hexResult","readDoubleQuotedScalar","readAlias","withinFlowCollection","hasPendingContent","_lineStart","_lineIndent","_kind","readPlainScalar","readDocument","directiveName","directiveArgs","documentStart","hasDirectives","loadDocuments","getSnippet","snippet","canonical","uppercase","camelcase","isOctCode","isDecCode","hasDigits","digits","binary","octal","decimal","hexadecimal","YAML_FLOAT_PATTERN","SCIENTIFIC_WITHOUT_DOT","POSITIVE_INFINITY","YAML_DATE_REGEXP","YAML_TIMESTAMP_REGEXP","fraction","NodeBuffer","_require","__","BASE64_MAP","bitlen","tailbits","bits","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","lookup","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","LN2","_toString","pairKey","pairHasKey","regexp","multiline","ignoreCase","esprima","ast","expression","modules","installedModules","__webpack_require__","moduleId","comment_handler_1","jsx_parser_1","parser_1","tokenizer_1","delegate","commentHandler","proxyDelegate","metadata","visit","parserDelegate","collectComment","comment","attachComment","CommentHandler","isModule","sourceType","jsx","JSXParser","Parser","parseModule","parseScript","comments","tolerant","errors","errorHandler","parsingOptions","tokenizer","Tokenizer","getNextToken","tolerate","syntax_1","Syntax","insertInnerComments","BlockStatement","innerComments","findTrailingComments","trailingComments","entry_1","firstComment","findLeadingComments","leadingComments","visitNode","Program","visitComment","loc","AssignmentExpression","AssignmentPattern","ArrayExpression","ArrayPattern","ArrowFunctionExpression","AwaitExpression","BinaryExpression","BreakStatement","CallExpression","CatchClause","ClassBody","ClassDeclaration","ClassExpression","ConditionalExpression","ContinueStatement","DoWhileStatement","DebuggerStatement","EmptyStatement","ExportAllDeclaration","ExportDefaultDeclaration","ExportNamedDeclaration","ExportSpecifier","ExpressionStatement","ForStatement","ForOfStatement","ForInStatement","FunctionDeclaration","FunctionExpression","Identifier","IfStatement","ImportDeclaration","ImportDefaultSpecifier","ImportNamespaceSpecifier","ImportSpecifier","Literal","LabeledStatement","LogicalExpression","MemberExpression","MetaProperty","MethodDefinition","NewExpression","ObjectExpression","ObjectPattern","Property","RestElement","ReturnStatement","SequenceExpression","SpreadElement","Super","SwitchCase","SwitchStatement","TaggedTemplateExpression","TemplateElement","TemplateLiteral","ThisExpression","ThrowStatement","TryStatement","UnaryExpression","UpdateExpression","VariableDeclaration","VariableDeclarator","WhileStatement","WithStatement","YieldExpression","__extends","extendStatics","character_1","JSXNode","jsx_syntax_1","token_1","xhtml_entities_1","getQualifiedElementName","elementName","qualifiedName","JSXSyntax","JSXIdentifier","JSXNamespacedName","ns","JSXMemberExpression","expr","TokenName","_super","parsePrimaryExpression","parseJSXRoot","startJSX","scanner","finishJSX","nextToken","reenterJSX","expectJSX","createJSXNode","collectComments","createJSXChildNode","scanXHTMLEntity","valid","terminated","numeric","hex","eof","Character","isDecimalDigit","isHexDigit","XHTMLEntities","lexJSX","cp","n1","n2","isIdentifierStart","isIdentifierPart","lex","nextJSXToken","lastMarker","convertToken","nextJSXText","isLineTerminator","peekJSXToken","scanComments","restoreState","throwUnexpectedToken","matchJSX","parseJSXIdentifier","finalize","parseJSXElementName","name_1","parseJSXAttributeName","identifier","name_2","parseJSXStringLiteralAttribute","raw","getTokenRaw","parseJSXExpressionAttribute","tolerateError","parseAssignmentExpression","JSXExpressionContainer","parseJSXAttributeValue","parseJSXElement","parseJSXNameValueAttribute","JSXAttribute","parseJSXSpreadAttribute","JSXSpreadAttribute","parseJSXAttributes","attribute","parseJSXOpeningElement","selfClosing","JSXOpeningElement","parseJSXBoundaryElement","name_3","JSXClosingElement","parseJSXEmptyExpression","JSXEmptyExpression","parseJSXExpressionContainer","parseJSXChildren","JSXText","parseComplexJSXElement","opening","JSXElement","open_1","isStartOfExpression","Regex","NonAsciiIdentifierStart","NonAsciiIdentifierPart","fromCodePoint","isWhiteSpace","isOctalDigit","openingElement","closingElement","generator","AsyncArrowFunctionExpression","AsyncFunctionDeclaration","AsyncFunctionExpression","logical","ComputedMemberExpression","consequent","alternate","Directive","directive","declaration","specifiers","exported","imported","static","Module","RegexLiteral","Script","expressions","StaticMemberExpression","discriminant","cases","quasi","quasis","finalizer","declarations","assert_1","error_handler_1","messages_1","scanner_1","ErrorHandler","Scanner","trackComment","operatorPrecedence","lookahead","hasLineTerminator","await","allowIn","allowStrictDirective","allowYield","firstCoverInitializedNameError","isAssignmentTarget","isBindingElement","inFunctionBody","inIteration","inSwitch","labelSet","messageFormat","whole","assert","createError","unexpectedTokenError","Messages","UnexpectedToken","UnexpectedEOS","UnexpectedIdentifier","UnexpectedNumber","UnexpectedString","UnexpectedTemplate","isFutureReservedWord","UnexpectedReserved","isStrictModeReservedWord","StrictReservedWord","lastMarkerLineStart","tolerateUnexpectedToken","multiLine","nextRegexToken","scanRegExp","createNode","lastLineStart","expect","expectCommaSeparator","expectKeyword","matchKeyword","matchContextualKeyword","matchAssign","isolateCoverGrammar","parseFunction","previousIsBindingElement","previousIsAssignmentTarget","previousFirstCoverInitializedNameError","inheritCoverGrammar","consumeSemicolon","matchAsyncFunction","parseFunctionExpression","StrictOctalLiteral","parseTemplateLiteral","parseGroupExpression","parseArrayInitializer","parseObjectInitializer","parseIdentifierName","parseClassExpression","parseSpreadElement","parsePropertyMethod","previousStrict","previousAllowStrictDirective","simple","parseFunctionSourceElements","firstRestricted","stricted","parsePropertyMethodFunction","previousAllowYield","parseFormalParameters","parsePropertyMethodAsyncFunction","previousAwait","parseObjectPropertyKey","isPropertyKey","parseObjectProperty","hasProto","isAsync","lookaheadPropertyKey","qualifiedPropertyName","parseGetterMethod","parseSetterMethod","parseGeneratorMethod","DuplicateProtoProperty","parseTemplateHead","cooked","parseTemplateElement","parseExpression","reinterpretExpressionAsPattern","startToken","parseRestElement","arrow","parseArguments","isIdentifierName","parseNewExpression","parseLeftHandSideExpression","parseAsyncArgument","parseAsyncArguments","parseLeftHandSideExpressionAllowCall","maybeAsync","previousAllowIn","asyncArrow","parseSuper","parseUpdateExpression","parseUnaryExpression","isRestrictedWord","StrictLHSPrefix","InvalidLHSInAssignment","StrictLHSPostfix","parseAwaitExpression","StrictDelete","parseExponentiationExpression","binaryPrecedence","parseBinaryExpression","prec","precedences","parseConditionalExpression","checkPatternParam","validateParam","reinterpretAsCoverFormalsList","paramSet","StrictParamDupe","parseYieldExpression","StrictLHSAssignment","parseStatementListItem","statement","IllegalExportDeclaration","parseExportDeclaration","IllegalImportDeclaration","parseImportDeclaration","parseLexicalDeclaration","inFor","parseFunctionDeclaration","parseClassDeclaration","isLexicalDeclaration","parseStatement","parseBlock","parseLexicalBinding","parsePattern","StrictVarName","DeclarationMissingInitializer","parseBindingList","parseBindingRestElement","parseArrayPattern","parsePatternWithDefault","parsePropertyPattern","keyToken","parseVariableIdentifier","parseObjectPattern","LetInLexicalBinding","parseVariableDeclaration","parseVariableDeclarationList","parseVariableStatement","parseEmptyStatement","parseExpressionStatement","parseIfClause","StrictFunction","parseIfStatement","parseDoWhileStatement","previousInIteration","parseWhileStatement","parseForStatement","forIn","decl","ForInOfLoopInitializer","initStartToken","InvalidLHSInForIn","InvalidLHSInForLoop","initSeq","parseContinueStatement","UnknownLabel","IllegalContinue","parseBreakStatement","IllegalBreak","parseReturnStatement","IllegalReturn","parseWithStatement","StrictModeWith","parseSwitchCase","parseSwitchStatement","previousInSwitch","defaultFound","clause","MultipleDefaultsInSwitch","parseLabelledStatement","Redeclaration","GeneratorInLegacyContext","parseThrowStatement","NewlineAfterThrow","parseCatchClause","paramMap","DuplicateBinding","StrictCatchVariable","parseFinallyClause","parseTryStatement","NoCatchOrFinally","parseDebuggerStatement","parseDirectivePrologues","previousLabelSet","previousInFunctionBody","StrictParamName","DefaultRestParameter","ParameterAfterRestParameter","parseFormalParameter","identifierIsOptional","isGenerator","StrictFunctionName","previousAllowAwait","formalParameters","parseDirective","IllegalLanguageModeDirective","BadGetterArity","BadSetterArity","BadSetterRestParameter","parseClassElement","hasConstructor","punctuator","ConstructorIsAsync","StaticPrototype","ConstructorSpecialMethod","DuplicateConstructor","parseClassElementList","parseClassBody","elementList","classBody","parseModuleSpecifier","InvalidModuleSpecifier","parseImportSpecifier","parseNamedImports","parseImportDefaultSpecifier","parseImportNamespaceSpecifier","NoAsAfterImportNamespace","MissingFromClause","parseExportSpecifier","exportDeclaration","isExportFromIdentifier","recordError","constructError","description","InvalidEscapedReservedWord","InvalidHexEscapeSequence","InvalidRegExp","TemplateOctalLiteral","UnexpectedTokenIllegal","UnterminatedRegExp","hexValue","octalValue","curlyStack","skipSingleLineComment","skipMultiLineComment","isKeyword","codePointAt","scanHexEscape","scanUnicodeCodePointEscape","getIdentifier","getComplexIdentifier","octalToDecimal","scanIdentifier","restore","scanPunctuator","scanHexLiteral","scanBinaryLiteral","scanOctalLiteral","isImplicitOctalLiteral","scanNumericLiteral","scanStringLiteral","unescaped_1","unescaped","octToDec","scanTemplate","rawOffset","unescaped_2","testRegExp","$0","$1","$2","exception","scanRegExpBody","classMarker","scanRegExpFlags","char","quot","amp","apos","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","ordf","laquo","not","shy","reg","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","tilde","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","gamma","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","frasl","euro","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","exist","nabla","isin","notin","ni","prod","minus","lowast","radic","infin","ang","and","or","cap","cup","int","there4","sim","cong","asymp","ne","equiv","le","ge","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","loz","spades","clubs","hearts","diams","rang","Reader","curly","paren","beforeFunctionExpression","isRegexStart","trackRange","trackLoc","ESCAPE_SEQUENCES","DEPRECATED_BOOLEANS_SYNTAX","encodeHex","noArrayIndent","skipInvalid","flowLevel","styleMap","compileStyleMap","sortKeys","lineWidth","noRefs","noCompatMode","condenseFlow","explicitTypes","duplicates","usedDuplicates","ind","generateNextLine","isWhitespace","isPrintable","isPlainSafe","needIndentIndicator","chooseScalarStyle","singleLineOnly","indentPerLevel","testAmbiguousType","hasLineBreak","hasFoldableLine","shouldTrackWidth","previousLineBreak","plain","writeScalar","iskey","testImplicitResolving","blockHeader","dropEndingNewline","moreIndented","lineRe","nextLF","foldLine","prevMoreIndented","foldString","nextChar","escapeSeq","escapeString","indentIndicator","breakRe","curr","detectType","typeList","writeNode","duplicateIndex","objectOrArray","objectKey","objectValue","explicitPair","pairBuffer","objectKeyList","writeBlockMapping","writeFlowMapping","arrayLevel","writeBlockSequence","writeFlowSequence","getDuplicateReferences","duplicatesIndexes","inspectNode","ReactClassStaticInterface","IsMountedPreMixin","__isMounted","IsMountedPostMixin","NotificationItem","_style","Helpers","whichTransitionEvent","transitions","OTransition","MozTransition","WebkitTransition","transitionKey","_noAnimation","_styles","_notificationTimer","_height","_removeCount","_getCssPropertyByPosition","_defaultAction","_removeNotification","_dismiss","_showNotification","_onTransitionEnd","transitionEvent","Timer","_handleMouseEnter","pause","_handleMouseLeave","resume","_handleNotificationClick","_allowHTML","notificationStyle","cssByPos","actionButton","isVisible","isHidden","onMouseEnter","onMouseLeave","timerId","defaultColors","rgb","STYLES","WebkitBoxSizing","MozBoxSizing","WebkitTransform","willChange","WebkitBoxShadow","MozBoxShadow","boxShadow","Title","MessageWrapper","Dismiss","textAlign","Action","ActionWrapper","baseAssign","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeysIn","initCloneArray","initCloneByTag","initCloneObject","isMap","isSet","cloneableTags","isDeep","isFlat","isFull","isFunc","subValue","keysIn","nativeKeysIn","isProto","cloneArrayBuffer","cloneDataView","cloneRegExp","cloneSymbol","cloneTypedArray","dataView","reFlags","typedArray","objectCreate","baseIsMap","nodeIsMap","baseIsSet","nodeIsSet","validator","messageKey","_transitionClasses","_events","_Transition","transitionClasses","parseDuration","mult","SlideDownTransition","setContainerHeight","getHeight","clearContainerHeight","handleEntered","handleEntering","handleTransitionEnd","innerProps","_querySelectorAll","rHyphen","chr","_hyphenate","rUpper","opener","rnumnonpx","rposition","runStyle","runtimeStyle","rsLeft","pixelLeft","removeProperty","supportedTransforms","classNamesShape","timeoutsShape","_reactIs","_createChainableTypeChecker2","isValidElementType","for","A","AsyncMode","ConcurrentMode","ContextConsumer","Element","ForwardRef","Fragment","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","typeOf","_Header","_Footer","_Month","_Year","_Decade","_Century","_SlideTransitionGroup","VIEW_UNIT","VIEW_OPTIONS","VIEW","ARROWS_TO_DIRECTION","ArrowDown","ArrowUp","ArrowRight","ArrowLeft","OPPOSITE_DIRECTION","LEFT","RIGHT","MULTIPLIER","_value","navigatePrevIcon","navigateNextIcon","views","onViewChange","dayComponent","headerFormat","footerFormat","dayFormat","monthFormat","yearFormat","decadeFormat","centuryFormat","Calendar","handleFocusWillChange","viewId","labelId","willHandle","selectedIndex","newDate","isMonth","isUpOrDown","rangeUnit","addUnit","slideDirection","lastView","lastDate","maybeSetCurrentDate","View","todaysDate","todayNotInRange","viewProps","getHeaderLabel","upDisabled","prevDisabled","nextDate","nextDisabled","handleViewChange","onMoveLeft","handleMoveBack","onMoveRight","handleMoveForward","handleFooterClick","navigate","slideDir","inRangeDate","_this$state4","multi","_this$state5","isValidView","_this6$props","firstView","callFocusEventHandler","lastFocused","_ref$isDisabled","_handleFocus","protoSpec","baseGCContext","Header","_this$props$navigateP","_this$props$navigateN","Footer","_CalendarView","MonthView","renderRow","row","rowIdx","Day","colIdx","formattedDate","renderHeaders","dateA","dateB","MILI","newMonth","monthMath","createComparer","createAccessor","firstDay","date1","date2","YearView","DecadeView","_date","getDecadeYears","CenturyView","getCenturyDecades","_transitionStyle","_TransitionGroup","DirectionPropType","transitionStyle","SlideTransition","SlideTransitionGroup","handleEnter","handleExited","_ChildMapping","TransitionGroup","firstRender","appeared","prevChildMapping","getInitialChildMapping","getNextChildMapping","currentChildMapping","getChildMapping","childFactory","mergeChildMappings","getProp","nextChildMapping","hasPrev","mapFn","mapper","getValueForKey","nextKeysPending","pendingKeys","prevKey","childMapping","nextKey","pendingNextKey","matchesCache","nativeMatch","matchesSelector","mozMatchesSelector","ie8MatchesSelector","_Input","DateTimePickerInput","_needsFlush","lastValueFromProps","Input","_ref$type","_ref$component","getDates","_getBounds","_start","_end","getBounds","startDay","TimeList","currentValue","closestDate","ListOptionGroup","scrollParent","listScrollTop","selectedTop","isWin","selectedHeight","listHeight","poff","_scrollParent","_scrollTop","_requestAnimationFrame","excludeStatic","ownerDoc","compatRaf","raf","req","getKey","rafKey","AddToListOption","DropdownListInput","handleAutofillDetect","onAnimationStart","localizers","setLocalizers","setNumberLocalizer","DOMFactories","ModalPortal","ariaAppHider","refCount","elementClass","Assign","SafeHTMLElement","HTMLElement","getParentElement","parentSelector","Modal","setAppElement","setElement","injectCSS","isOpen","portalClassName","bodyOpenClassName","appElement","onAfterOpen","onRequestClose","closeTimeoutMS","ariaHideApp","shouldCloseOnOverlayClick","contentLabel","renderPortal","newParent","show","portal","closesAt","beforeClose","closeWithTimeout","removePortal","defaultStyles","WebkitOverflowScrolling","scopeTab","CLASS_NAMES","shouldClose","afterOpen","setFocusAfterRender","closeTimer","focusAfterRender","focusContent","afterClose","returnFocus","teardownScopedFocus","setupScopedFocus","markForFocusLater","closeWithoutTimeout","contentHasFocus","requestClose","handleOverlayOnClick","ownerHandlesClose","handleContentOnClick","shouldBeClosed","additional","contentStyles","overlayStyles","overlayClassName","findTabbable","focusLaterElements","modalElement","needToFocus","toFocus","hide","validateElement","shouldHide","resetForTesting","modals","ElementClass","deps","payloads","trace","_acequire","parentId","dep","packagedModule","moduleName","normalizeModule","chunks","uri","packaged","exportAce","ace","compliantExecNpcg","compliantLastIndexIncrement","getNativeFlags","extended","r2","_xregexp","captureNames","Empty","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","prototypeOfArray","prototypeOfObject","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","lengthBefore","array_splice","deleteCount","removeCount","tailOldPos","tailNewPos","tailCount","lengthAfterRemove","createEmpty","freezeObject","boxedString","splitString","thisp","sought","toInteger","toLocaleString","doesDefinePropertyWork","definePropertyWorksOnObject","definePropertyWorksOnDom","definePropertyFallback","seal","preventExtensions","isSealed","isExtensible","hasDontEnumBug","dontEnums","dontEnumsLength","dontEnum","trimBeginRegexp","trimEndRegexp","getDocumentHead","hasCssClass","addCssClass","removeCssClass","toggleCssClass","setCssClass","hasCssString","sheets","createStyleSheet","owningElement","importCssString","importCssStylsheet","getInnerWidth","computedStyle","getInnerHeight","scrollbarWidth","noScrollbar","withScrollbar","getPageScrollTop","getPageScrollLeft","setInnerHtml","innerHtml","setInnerText","innerText","getInnerText","getParentWindow","superCtor","super_","implement","oop","Keys","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","96","97","98","99","100","101","102","103","104","105","PRINTABLE_KEYS","48","49","50","51","52","53","54","55","56","57","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","esc","mods","keyCodeToString","keyString","OS","LINUX","MAC","WINDOWS","getOS","isLinux","os","appName","isOldIE","isGecko","isMozilla","Controllers","controllers","product","isOldGecko","isOpera","isWebKit","isChrome","isAIR","isIPad","isTouchPad","isChromeOS","useragent","pressedKeys","ts","_wrapper","stopEvent","getButton","1","2","4","eventHandler","releaseCaptureHandler","onMouseUp","addTouchMoveListener","startx","starty","touchObj","wheelX","wheelY","addMouseWheelListener","DOM_DELTA_PIXEL","DOM_DELTA_LINE","DOM_DELTA_PAGE","addMultiMouseDownListener","callbackName","startX","startY","clicks","eventNames","onMousedown","isNewClick","_clicks","onDblclick","getModifierHash","normalizeCommandKeys","hashId","altGr","keyLocation","resetPressedKeys","getModifierString","addCommandKeyListener","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","nextFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","stringReverse","stringRepeat","stringTrimLeft","stringTrimRight","arrayToMap","createMap","arrayRemove","escapeHTML","getMatchOffsets","regExp","deferredCall","fcn","deferred","schedule","isPending","delayedCall","defaultTimeout","BROKEN_SETDATA","USE_IE_MIME_TYPE","TextInput","inComposition","isSelectionEmpty","resetSelection","syncSelection","syncValue","inputHandler","setSelectionRange","resetValue","isAllSelected","inPropertyChange","onPropertyChange","syncProperty","sendText","keytable","onCompositionEnd","onCompositionUpdate","onCompositionStart","setInputHandler","getInputHandler","afterContextMenu","onTextInput","onInput","handleClipboardData","forceIEMime","doCopy","isCut","getCopyText","onCut","onCommandKey","closeTimeout","$readOnly","canUndo","$undoManager","markUndoGroup","clearSelection","setRange","syncComposition","onContextMenuClose","$keepTextAreaAtCursor","$moveTextAreaToCursor","setReadOnly","_emit","domEvent","moveToMouse","bringToFront","maxTop","textInput","DefaultHandlers","mouseHandler","$clickSelection","setDefaultHandler","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","onTouchMove","selectByLines","extendSelectionBy","selectByWords","calcRangeOrientation","inSelection","getDocumentPosition","mousedownEvent","selectionEmpty","getSelectionRange","$blockScrolling","moveToPosition","$focusTimout","inMultiSelectMode","captureMouse","startSelect","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","setCapture","comparePoint","orientedRange","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","ax","ay","bx","sqrt","getBracketRange","getWordRange","isMultiLine","getLineRange","getAccelKey","$lastScrollTime","isScrollableBy","scrollBy","Tooltip","$element","$parentNode","$init","setText","setHtml","setPosition","setClassName","getWidth","GutterTooltip","windowWidth","windowHeight","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","$gutterLayer","hideTooltip","_signal","moveTooltip","getRegion","selectTo","$tooltipFollowsMouse","isMousePressed","annotation","$annotations","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","showTooltip","$gutter","MouseEvent","$inSelection","propagationStopped","DragdropHandler","blankImage","dragSelectionMarker","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","calcDistance","layerConfig","characterWidth","editorRect","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","addDragMarker","toOrientedRange","getSelectionStyle","$cursorLayer","setBlinking","onMouseMove","clearDragMarker","fromOrientedRange","getReadOnly","cancelDrag","getTextRange","onDragEnd","setCursorStyle","canAccept","getDropEffect","onMouseMoveTimer","moveText","dropData","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","$dragEnabled","eventTarget","loadScript","isAbort","qualifyURL","_eventRegistry","_defaultHandlers","defaultHandler","newCallback","_disabled_","removeDefaultHandler","capturing","optionsProvider","optList","getOptions","optionNames","forwardTo","handlesSet","reportError","AppConfig","$defaultOptions","resetOptions","setDefaultValue","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","$moduleUrls","scriptOptions","scriptUrl","currentScript","_currentScript","m1","moduleUrl","sep","setModuleUrl","subst","$loading","loadModule","moduleType","afterLoad","DefaultGutterHandler","MouseHandler","focusEditor","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","gutterEl","$dragDelay","insideStart","mousemove","$scrollSpeed","mouseMoveHandler","releaseMouse","$mouseMoved","onCaptureEnd","onCaptureInterval","$onCaptureMouseMove","cancelContextMenu","dragDelay","dragEnabled","focusTimout","tooltipFollowsMouse","FoldHandler","getFoldAt","removeFold","expandFold","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","handleKeyboard","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","passEvent","startColumn","endColumn","compareRange","containsRange","intersects","isEnd","isStart","inside","insideEnd","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","getDocument","lead","selectionLead","createAnchor","selectionAnchor","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","getPosition","getSelectionAnchor","getSelectionLead","shiftSelection","columns","moveCursorTo","isBackwards","$moveSelection","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","moveCursorRight","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectWord","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","getFoldLine","selectLine","moveCursorBy","getTabSize","isTabStop","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","getDocumentLastRowColumnPosition","textEnd","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","screenPos","docPos","lineWidgets","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","rangeList","toSingleRange","MAX_TOKEN_COUNT","rules","states","regExps","matchMappings","ruleRegExps","matchTotal","defaultToken","flag","splitterRurles","adjustedregex","matchcount","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","inChClass","lastCapture","parenOpen","parenClose","square","matchAttempts","TextHighlightRules","$rules","addRules","getRules","embedRules","HighlightRules","escapeRules","$embeds","getEmbeds","popState","normalizeRules","processState","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","splitChar","$keywordList","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","$tokenIndex","stepBackward","stepForward","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","rowDiff","CstyleBehaviour","getCursorPosition","getWrapBehavioursEnabled","isSaneInsertion","recordAutoInsert","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","lineCommentStart","leftChar","rightChar","rightToken","stringBefore","stringAfter","wordRe","$mode","isWordBefore","isWordAfter","$matchTokenType","iterator2","bracket","packages","pack","addUnicodePackage","Ll","Lu","Lt","Lm","Lo","Mn","Mc","Me","N","Nd","Nl","No","P","Pd","Ps","Pe","Pf","Pc","Po","S","Sm","Sc","Sk","So","Z","Zs","Zl","Zp","C","Cc","Cf","Co","Cs","Cn","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","removeInLine","commentWithSpace","insertInLine","testRemove","lineCommentEnd","regexpEnd","minEmptyLength","toggleBlockComment","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","autoOutdent","createWorker","createModeDelegates","$modes","delegations","functionName","$delegator","transformAction","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","$id","applyDelta","docLines","doNotValidate","Anchor","$onChange","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$clipPositionToDocument","$insertRight","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$getTransformedPoint","noClip","Document","textOrLines","$lines","insertMergedLines","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","$splitAndapplyLargeDelta","MAX","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","running","currentLine","$worker","workerStart","endLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","scheduleStart","$updateOnChange","SearchHighlight","clazz","setRegexp","MAX_RANGES","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","lastEnd","isNewRow","getNextFoldTo","addRemoveChars","foldBefore","newFoldLine","foldLineNext","idxToPosition","lastFoldEndColumn","RangeList","pointIndex","excludeEdges","endIndex","addList","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","restorePoint","subFold","collapseChildren","addSubFold","afterStart","restoreRange","Folding","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","lastFold","docRow","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","$clipRangeToDocument","startFold","endFold","removeFolds","$useWrapMode","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","getFoldWidget","getFoldWidgetRange","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","charBeforeCursor","$findClosingBracket","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","bgTokenizer","resetCaches","$resetRowCache","$docRowCache","$screenRowCache","$getRowCacheIndex","cacheArray","$wrapData","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","$deltasDoc","$deltasFold","$informUndoManager","$deltas","setUndoManager","getUndoManager","undoManager","$syncInformUndoManager","execute","mergeUndoDeltas","$defaultUndoManager","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","$overwrite","setOverwrite","getOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","addDynamicMarker","markerId","$searchHighlight","highlightLines","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","$scrollTop","getScrollTop","$scrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","lastUndoRange","$getUndoSelection","foldDelta","redoChanges","setUndoSelect","enable","isUndo","toPosition","toRange","collDiff","oldStart","newStart","indentRows","outdentRows","rowRange","deleteRange","$moveLines","$clipRowToDocument","MAX_VALUE","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","useWrapMode","getUseWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","isFullWidth","splits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","displayed","getWrapIndent","minSplit","getScreenTabSize","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","rowCache","doCache","maxRow","wrapIndent","splitIndex","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","$wrap","useSoftTabs","Search","$matchIterator","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","matchIterator","backwards","lineIterator","$lineIterator","_callback","$disableFakeMultiline","wholeWord","wordBoundary","addWordBoundary","modifier","$assembleMultilineRegExp","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","bindKey","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","parseKeys","_addCommandToBinding","isDefault","removeCommands","bindKeys","keyList","findKeyCommand","$keyChain","CommandManager","byName","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","showSettingsMenu","showErrorMarker","centerSelection","gotoLine","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","splitLine","transposeLetters","transposeSelections","firstLineEndCol","selectedCount","insertLine","exitMultiSelectMode","defaultCommands","Editor","getContainerElement","getTextAreaContainer","keyBinding","$mouseHandler","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","selections","$opResetTimer","docChanged","prevOp","commadEvent","previousCommand","scrollSelectionIntoView","animateScrolling","$mergeableCommands","$mergeUndoDeltas","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","updateFull","oldEditor","cursorPos","getTheme","getFontSize","$highlightBrackets","$bracketHighlight","$highlightPending","getMatching","$highlightTags","$highlightTagPending","$tagHighlight","prevToken","sbm","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","updateLines","$updateHighlightActiveLine","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","startOuter","endOuter","lineCols","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","inVirtualSelectionMode","getBehavioursEnabled","$mergeNextCommand","lineState","shouldOutdent","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","setShowInvisibles","showInvisibles","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","originalRange","$getSelectedRows","getNumberAt","_numberRx","charRange","nr","fp","decimals","nnr","totalDiff","rangeIndex","subRows","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","animate","alignCursor","getCursorPositionScreen","expand","matchType","bracketType","brackets","navigateTo","$tryReplace","replaceAll","getLastSearchOptions","newRange","preventScroll","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$resetCursorStyle","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightSelectedWord","behavioursEnabled","wrapBehavioursEnabled","autoScrollEditorIntoView","keybindingId","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","showLineNumbers","displayIndentGuides","scrollPastEnd","fixedWidthGutter","foldStyle","UndoManager","$serializeDelta","$deserializeDelta","cloneDeltaSetsObj","deltaSets_old","fnGetModifiedDelta","deltaSets_new","deltaSet_old","deltaSet_new","delta_old","deltaSets","$doc","hasUndo","dirtyCounter","$undoStack","$redoStack","undoSelectionRange","redoSelectionRange","$deserializeDeltas","hasRedo","$serializeDeltas","Gutter","$showFoldWidgets","$updateAnnotations","$cells","rowInfo","annoText","gutterOffset","breakpoints","decorations","$firstLineNumber","lastLineNumber","gutterRenderer","$renderer","cell","foldWidget","$fixedWidth","$padding","$computePadding","$showLineNumbers","setShowLineNumbers","getShowLineNumbers","Marker","setPadding","setMarkers","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","firstRowScreen","stringBuilder","extraStyle","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","getLineHeight","$fontMetrics","$characterSize","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","$tabStrings","tabStr","$indentGuideRe","spaceClass","tabClass","spaceContent","tabContent","scrollLines","lineElements","lineElementsIdx","lineElement","$renderLine","$useLineGroups","oldConfig","$renderLinesFragment","$textToken","$renderToken","tabIdx","idx4","classToUse","renderIndentGuide","$renderWrappedLine","onlyContents","splitChars","$renderSimpleLine","$getFoldLineTokens","renderTokens","addTokens","$measureNode","isIE8","Cursor","blinkInterval","smoothBlinking","addCursor","$updateCursors","$updateVisibility","$updateOpacity","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","blink","getPixelPosition","onScreen","$selectionMarkers","cursorIndex","pixelPos","drawCursor","$setOverwrite","ScrollBar","classSuffix","setVisible","skipEvent","coeff","VScrollBar","$scrollbarWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","pending","CHAR_COUNT","FontMetrics","$setMeasureNodeStyles","$main","$testFractionalRect","isRoot","whiteSpace","$measureSizes","boldSize","charSizes","allowBoldFonts","setPolling","$measureCharWidth","GutterLayer","MarkerLayer","TextLayer","CursorLayer","VirtualRenderer","onGutterResize","$markerBack","textLayer","$textLayer","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","$loop","$renderChanges","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_GUTTER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","$updateGutterLineHighlight","$gutterLineHighlight","$printMarginEl","containerEl","posTop","posLeft","$composition","sm","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","unfreeze","$highlightGutterLine","$updateLines","$autosize","desiredHeight","$maxPixelHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","x_min","steps","initialScroll","oldSteps","$timer","canvasPos","textToScreenCoordinates","keepTextAreaAtCursor","$themeId","cssClass","$theme","isDark","setMouseCursor","maxPixelHeight","WorkerClient","topLevelNamespaces","classname","workerUrl","$sendDeltaQueue","changeListener","onMessage","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","workerSrc","blobUrl","URL","webkitURL","createObjectURL","$workerBlob","blobURL","revokeObjectURL","callbackId","onmessage","deltaQueue","attachToDocument","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","getBlob","UIWorkerClient","messageBuffer","emitSync","sender","processNext","setEmitSync","Main","PlaceHolder","mainClass","othersClass","$onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","selectionBefore","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","inMainRange","distanceFromStart","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","accel","selectionMode","isMultiSelect","mouseX","mouseY","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","removeSelectionMarker","tmpSel","rectSel","onSelectionInterval","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","selectMoreLines","selectMore","splitIntoLines","alignCursors","multiSelectCommands","isAvailable","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","yBackwards","docEnd","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","forEachSelection","keepOrder","$byLines","cmdResult","anim","screenLead","toRemove","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","$updateRows","noWidgets","$oldWidget","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","oldWidget","gutterAnno","comparator","binarySearch","findAnnotations","sc","onmousedown","Renderer","_id","createEditSession","Builder","MSBlobBuilder","bag","endings","get_blob","argsTag","mapTag","setTag","moduleExports","arrayProto","nativeIsBuffer","JsonHighlightRules","MatchingBraceOutdent","BaseFoldMode","commentRegex","singleLineBlockCommentRe","tripleStarBlockCommentRe","startRegionRe","_getFoldWidgetBase","forceMultiline","getCommentRegionBlock","getSectionRange","startIndent","subRange","CStyleFoldMode","$outdent","worker","YamlHighlightRules","prevIndent","nextIndent","emptyListRE","unorderedListRE","incrementRemainingMarkdownListNumbers","skipCount","startItem","nextLineNumber","nextItem","newNumber","nextNumber","itemNumber","newlineAndIndentContinueMarkdownList","replacements","eolState","inList","inQuote","cursorBeforeBullet","numbered","bullet","tabAndIndentMarkdownList","shiftTabAndUnindentMarkdownList","fullScreenRestore","setFullscreen","setNormal","modeInfo","findModeByMIME","findModeByExtension","findModeByFileName","dot","clearPlaceholder","setPlaceholder","placeHolder","onCursorActivity","markedSelection","coverRange","markedSelectionStyle","addAt","atEnd","urlRE","modeConfig","codeDepth","gfmOverlay","codeBlock","ateSpace","markdownConfig","Typo","aff_loading","xhr_aff","aff_data","num_loaded","typo","dic_data","dic_loading","xhr_dic","rx_word","dictionary","affData","wordsData","dictionaryTable","compoundRules","compoundRuleCodes","replacementTable","memoized","_jlen","readDataFile","setFunc","_readFile","asyncLoad","setAffData","setWordsData","_parseAFF","ONLYINCOMPOUND","_parseDIC","ruleText","expressionText","loadedCallback","extension","dictionaryPath","getURL","__dirname","charset","overrideMimeType","fs","existsSync","stats","statSync","fileDescriptor","openSync","readSync","numEntries","lineParts","_removeAffixComments","definitionParts","ruleType","ruleCode","combineable","charactersToRemove","additionParts","charactersToAdd","continuationClasses","parseRuleCodes","regexToMatch","_removeDicComments","addWord","ruleCodesArray","NEEDAFFIX","newWords","_applyRule","_iilen","newWord","combineCode","combineRule","otherNewWords","iii","_iiilen","textCodes","FLAG","continuationRule","aWord","trimmedWord","checkExact","capitalizedWord","hasFlag","lowercaseWord","ruleCodes","COMPOUNDMIN","wordFlags","alphabet","memoizedLimit","replacementEntry","correctedWord","edits1","rv","ed1","ed2","corrections","known","weighted_corrections","sorted_corrections","capitalization_scheme","correct","newline","fences","heading","def","nptable","lheading","_paragraph","Lexer","links","pedantic","gfm","_label","_title","getRegex","_comment","paragraph","loose","listStart","listItems","isordered","istask","ischecked","lastToken","trimRight","codeBlockStyle","rtrim","splitCells","cells","ordered","smartLists","task","sanitize","sanitizer","autolink","reflink","nolink","InlineLexer","TextRenderer","slugger","Slugger","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","cleanUrl","prot","originIndependentUrl","baseUrls","resolveUrl","_punctuation","_escapes","_scheme","_email","_attribute","_href","_extended_email","_backpedal","prevCapZero","inLink","inRawBlock","lastParenIndex","findClosingBracket","linkLen","outputLink","codespan","mangle","smartypants","infostring","escaped","langPrefix","headerIds","headerPrefix","slug","xhtml","listitem","checkbox","tablerow","tablecell","baseUrl","inlineText","parseText","errMsg","originalSlug","tableRow","suffLen","currChar","checkSanitizeDeprecation","getDefaults","lexer","inlineLexer","AS3_REST_ARG_MODE","literal","NUMBER","nomarkup","STRING","PARAMS","COMMENT_MODE_1","COMMENTS","built_in","VAR","QUOTE_STRING","SYMBOL_RE","SYMBOL","LITERAL","COLLECTION","HINT","HINT_COL","KEY","LIST","BODY","NAME","DEFAULT_CONTAINS","KEYWORDS","JS_IDENT_RE","SUBST","EXPRESSIONS","TITLE","CPP_PRIMITIVE_TYPES","STRINGS","NUMBERS","PREPROCESSOR","FUNCTION_TITLE","CPP_KEYWORDS","EXPRESSION_CONTAINS","preprocessor","strings","INT_SUFFIX","CRYSTAL_METHOD_RE","CRYSTAL_KEYWORDS","EXPANSION","recursiveParen","Q_STRING","REGEXP","CRYSTAL_DEFAULT_CONTAINS","RULE","BRACED_SUBST","FILTER","ELIXIR_IDENT_RE","ELIXIR_KEYWORDS","LOWERCASE_SIGIL","UPCASE_SIGIL","FUNCTION","CLASS","ELIXIR_DEFAULT_CONTAINS","CONSTRUCTOR","BASIC_ATOM_RE","FUNCTION_NAME_RE","ERLANG_RESERVED","NAMED_FUN","FUNCTION_CALL","TUPLE","VAR1","VAR2","RECORD_ACCESS","BLOCK_STATEMENTS","BASIC_MODES","TYPEPARAM","GO_KEYWORDS","BUILT_INS","IDENTIFIER_PLAIN_OR_QUOTED","EXPRESSION_OR_HELPER_CALL","BLOCK_MUSTACHE_CONTENTS","BASIC_MUSTACHE_CONTENTS","PRAGMA","TAG_INNARDS","JAVA_NUMBER_MODE","HTML_TEMPLATE","CSS_TEMPLATE","TEMPLATE_STRING","PARAMS_CONTAINS","LITERALS","ALLOWED_COMMENTS","TYPES","VALUE_CONTAINER","OBJECT","ARRAY","VARIABLE_NAME_RE","INTERPOLATION","INTERPOLATED_VARIABLE","COMMAND","MACROCALL","LABEL","VARIABLE","ANNOTATION_USE_SITE","ANNOTATION","KOTLIN_NUMBER_MODE","KOTLIN_NESTED_COMMENT","KOTLIN_PAREN_TYPE","KOTLIN_PAREN_TYPE2","RULES","VALUE","STRING_MODE","IDENT_MODE","PARENS_MODE","VALUE_WITH_RULESETS","MIXIN_GUARD_MODE","RULE_MODE","INTERP_IDENT_RE","AT_RULE_MODE","VAR_RULE_MODE","SELECTOR_MODE","LISP_IDENT_RE","LISP_SIMPLE_NUMBER_RE","KEYWORD","IDENT","MEC","QUOTED","QUOTED_ATOM","SUBST_SIMPLE","LONG_BRACKETS","FUNC","ASSIGNMENT","TARGET","TRANSPOSE","PERL_KEYWORDS","METHOD","STRING_CONTAINS","PERL_DEFAULT_CONTAINS","NIX_KEYWORDS","ANTIQUOTE","LEXEMES","CLASS_KEYWORDS","COMMENT_MODE","TYPES_RE","FUNCTIONS_RE","SQL_KW","SQL_BI","BACKTICK_ESCAPE","APOS_STRING","PS_COMMENT","CMDLETS","PS_CLASS","PS_FUNCTION","PS_USING","PS_ARGUMENTS","PS_METHODS","GENTLEMANS_SET","PS_TYPE","PARENTED","LINE_COMMENT","BACKTICK_STRING","PROMPT","LITERAL_BRACKET","RE_IDENT","RE_MODULE_IDENT","RE_OPERATOR","RE_OPERATOR_SPACED","RE_NUMBER","OPERATOR_MODE","LIST_CONTENTS_MODES","MODULE_ACCESS_CONTENTS","PARAMS_CONTENTS","FUNCTION_BLOCK_MODE","CONSTRUCTOR_MODE","PATTERN_MATCH_BLOCK_MODE","MODULE_ACCESS_MODE","RUBY_METHOD_RE","RUBY_KEYWORDS","YARDOCTAG","IRB_OBJECT","COMMENT_MODES","RUBY_DEFAULT_CONTAINS","IRB_DEFAULT","NUM_SUFFIX","BUILTINS","TYPE","HEXCOLOR","CHAR","VAR_IDENT_RE","SWIFT_KEYWORDS","BLOCK_COMMENT","DECORATOR","ARGS","XML_ENTITIES","XML_META_KEYWORDS","XML_META_PAR_KEYWORDS","APOS_META_STRING_MODE","QUOTE_META_STRING_MODE","TAG_INTERNALS","serializer","replacer","cycleReplacer","thisPos","getSerialize","trackedProperties","trackProperties","tracked","_detectMutations","trackedProperty","sameParentRef","prevObj","sameRef","keysToDetect"],"mappings":"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","file":"static/js/2.a50fa19f.chunk.js","sourcesContent":["'use strict';\n\nmodule.exports = require('./lib/React');\n","import defineProperty from \"./defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _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(Object(source), true).forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}","'use strict';\n\nexports.__esModule = true;\nexports.createMemoryHistory = exports.hashHistory = exports.browserHistory = exports.applyRouterMiddleware = exports.formatPattern = exports.useRouterHistory = exports.match = exports.routerShape = exports.locationShape = exports.RouterContext = exports.createRoutes = exports.Route = exports.Redirect = exports.IndexRoute = exports.IndexRedirect = exports.withRouter = exports.IndexLink = exports.Link = exports.Router = undefined;\n\nvar _RouteUtils = require('./RouteUtils');\n\nObject.defineProperty(exports, 'createRoutes', {\n enumerable: true,\n get: function get() {\n return _RouteUtils.createRoutes;\n }\n});\n\nvar _PropTypes = require('./PropTypes');\n\nObject.defineProperty(exports, 'locationShape', {\n enumerable: true,\n get: function get() {\n return _PropTypes.locationShape;\n }\n});\nObject.defineProperty(exports, 'routerShape', {\n enumerable: true,\n get: function get() {\n return _PropTypes.routerShape;\n }\n});\n\nvar _PatternUtils = require('./PatternUtils');\n\nObject.defineProperty(exports, 'formatPattern', {\n enumerable: true,\n get: function get() {\n return _PatternUtils.formatPattern;\n }\n});\n\nvar _Router2 = require('./Router');\n\nvar _Router3 = _interopRequireDefault(_Router2);\n\nvar _Link2 = require('./Link');\n\nvar _Link3 = _interopRequireDefault(_Link2);\n\nvar _IndexLink2 = require('./IndexLink');\n\nvar _IndexLink3 = _interopRequireDefault(_IndexLink2);\n\nvar _withRouter2 = require('./withRouter');\n\nvar _withRouter3 = _interopRequireDefault(_withRouter2);\n\nvar _IndexRedirect2 = require('./IndexRedirect');\n\nvar _IndexRedirect3 = _interopRequireDefault(_IndexRedirect2);\n\nvar _IndexRoute2 = require('./IndexRoute');\n\nvar _IndexRoute3 = _interopRequireDefault(_IndexRoute2);\n\nvar _Redirect2 = require('./Redirect');\n\nvar _Redirect3 = _interopRequireDefault(_Redirect2);\n\nvar _Route2 = require('./Route');\n\nvar _Route3 = _interopRequireDefault(_Route2);\n\nvar _RouterContext2 = require('./RouterContext');\n\nvar _RouterContext3 = _interopRequireDefault(_RouterContext2);\n\nvar _match2 = require('./match');\n\nvar _match3 = _interopRequireDefault(_match2);\n\nvar _useRouterHistory2 = require('./useRouterHistory');\n\nvar _useRouterHistory3 = _interopRequireDefault(_useRouterHistory2);\n\nvar _applyRouterMiddleware2 = require('./applyRouterMiddleware');\n\nvar _applyRouterMiddleware3 = _interopRequireDefault(_applyRouterMiddleware2);\n\nvar _browserHistory2 = require('./browserHistory');\n\nvar _browserHistory3 = _interopRequireDefault(_browserHistory2);\n\nvar _hashHistory2 = require('./hashHistory');\n\nvar _hashHistory3 = _interopRequireDefault(_hashHistory2);\n\nvar _createMemoryHistory2 = require('./createMemoryHistory');\n\nvar _createMemoryHistory3 = _interopRequireDefault(_createMemoryHistory2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.Router = _Router3.default; /* components */\n\nexports.Link = _Link3.default;\nexports.IndexLink = _IndexLink3.default;\nexports.withRouter = _withRouter3.default;\n\n/* components (configuration) */\n\nexports.IndexRedirect = _IndexRedirect3.default;\nexports.IndexRoute = _IndexRoute3.default;\nexports.Redirect = _Redirect3.default;\nexports.Route = _Route3.default;\n\n/* utils */\n\nexports.RouterContext = _RouterContext3.default;\nexports.match = _match3.default;\nexports.useRouterHistory = _useRouterHistory3.default;\nexports.applyRouterMiddleware = _applyRouterMiddleware3.default;\n\n/* histories */\n\nexports.browserHistory = _browserHistory3.default;\nexports.hashHistory = _hashHistory3.default;\nexports.createMemoryHistory = _createMemoryHistory3.default;","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 _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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}","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}","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 _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}","/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n(function(factory) {\n\n // Find the global object for export to both the browser and web workers.\n var globalObject = typeof window === 'object' && window ||\n typeof self === 'object' && self;\n\n // Setup highlight.js for different environments. First is Node.js or\n // CommonJS.\n // `nodeType` is checked to ensure that `exports` is not a HTML element.\n if(typeof exports !== 'undefined' && !exports.nodeType) {\n factory(exports);\n } else if(globalObject) {\n // Export hljs globally even when using AMD for cases when this script\n // is loaded with others that may still expect a global hljs.\n globalObject.hljs = factory({});\n\n // Finally register the global hljs with AMD.\n if(typeof define === 'function' && define.amd) {\n define([], function() {\n return globalObject.hljs;\n });\n }\n }\n\n}(function(hljs) {\n // Convenience variables for build-in objects\n var ArrayProto = [],\n objectKeys = Object.keys;\n\n // Global internal variables used within the highlight.js library.\n var languages = {},\n aliases = {};\n\n // safe/production mode - swallows more errors, tries to keep running\n // even if a single syntax or parse hits a fatal error\n var SAFE_MODE = true;\n\n // Regular expressions used throughout the highlight.js library.\n var noHighlightRe = /^(no-?highlight|plain|text)$/i,\n languagePrefixRe = /\\blang(?:uage)?-([\\w-]+)\\b/i,\n fixMarkupRe = /((^(<[^>]+>|\\t|)+|(?:\\n)))/gm;\n\n // The object will be assigned by the build tool. It used to synchronize API\n // of external language files with minified version of the highlight.js library.\n var API_REPLACES;\n\n var spanEndTag = '';\n var LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n var options = {\n classPrefix: 'hljs-',\n tabReplace: null,\n useBR: false,\n languages: undefined\n };\n\n // keywords that should have no default relevance value\n var COMMON_KEYWORDS = 'of and for in not or if then'.split(' ');\n\n\n /* Utility functions */\n\n function escape(value) {\n return value.replace(/&/g, '&').replace(//g, '>');\n }\n\n function tag(node) {\n return node.nodeName.toLowerCase();\n }\n\n function testRe(re, lexeme) {\n var match = re && re.exec(lexeme);\n return match && match.index === 0;\n }\n\n function isNotHighlighted(language) {\n return noHighlightRe.test(language);\n }\n\n function blockLanguage(block) {\n var i, match, length, _class;\n var classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n match = languagePrefixRe.exec(classes);\n if (match) {\n var language = getLanguage(match[1]);\n if (!language) {\n console.warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n console.warn(\"Falling back to no-highlight mode for this block.\", block);\n }\n return language ? match[1] : 'no-highlight';\n }\n\n classes = classes.split(/\\s+/);\n\n for (i = 0, length = classes.length; i < length; i++) {\n _class = classes[i];\n\n if (isNotHighlighted(_class) || getLanguage(_class)) {\n return _class;\n }\n }\n }\n\n /**\n * performs a shallow merge of multiple objects into one\n *\n * @arguments list of objects with properties to merge\n * @returns a single new object\n */\n function inherit(parent) { // inherit(parent, override_obj, override_obj, ...)\n var key;\n var result = {};\n var objects = Array.prototype.slice.call(arguments, 1);\n\n for (key in parent)\n result[key] = parent[key];\n objects.forEach(function(obj) {\n for (key in obj)\n result[key] = obj[key];\n });\n return result;\n }\n\n /* Stream merging */\n\n function nodeStream(node) {\n var result = [];\n (function _nodeStream(node, offset) {\n for (var child = node.firstChild; child; child = child.nextSibling) {\n if (child.nodeType === 3)\n offset += child.nodeValue.length;\n else if (child.nodeType === 1) {\n result.push({\n event: 'start',\n offset: offset,\n node: child\n });\n offset = _nodeStream(child, offset);\n // Prevent void elements from having an end tag that would actually\n // double them in the output. There are more void elements in HTML\n // but we list only those realistically expected in code display.\n if (!tag(child).match(/br|hr|img|input/)) {\n result.push({\n event: 'stop',\n offset: offset,\n node: child\n });\n }\n }\n }\n return offset;\n })(node, 0);\n return result;\n }\n\n function mergeStreams(original, highlighted, value) {\n var processed = 0;\n var result = '';\n var nodeStack = [];\n\n function selectStream() {\n if (!original.length || !highlighted.length) {\n return original.length ? original : highlighted;\n }\n if (original[0].offset !== highlighted[0].offset) {\n return (original[0].offset < highlighted[0].offset) ? original : highlighted;\n }\n\n /*\n To avoid starting the stream just before it should stop the order is\n ensured that original always starts first and closes last:\n\n if (event1 == 'start' && event2 == 'start')\n return original;\n if (event1 == 'start' && event2 == 'stop')\n return highlighted;\n if (event1 == 'stop' && event2 == 'start')\n return original;\n if (event1 == 'stop' && event2 == 'stop')\n return highlighted;\n\n ... which is collapsed to:\n */\n return highlighted[0].event === 'start' ? original : highlighted;\n }\n\n function open(node) {\n function attr_str(a) {\n return ' ' + a.nodeName + '=\"' + escape(a.value).replace(/\"/g, '"') + '\"';\n }\n result += '<' + tag(node) + ArrayProto.map.call(node.attributes, attr_str).join('') + '>';\n }\n\n function close(node) {\n result += '';\n }\n\n function render(event) {\n (event.event === 'start' ? open : close)(event.node);\n }\n\n while (original.length || highlighted.length) {\n var stream = selectStream();\n result += escape(value.substring(processed, stream[0].offset));\n processed = stream[0].offset;\n if (stream === original) {\n /*\n On any opening or closing tag of the original markup we first close\n the entire highlighted node stack, then render the original tag along\n with all the following original tags at the same offset and then\n reopen all the tags on the highlighted stack.\n */\n nodeStack.reverse().forEach(close);\n do {\n render(stream.splice(0, 1)[0]);\n stream = selectStream();\n } while (stream === original && stream.length && stream[0].offset === processed);\n nodeStack.reverse().forEach(open);\n } else {\n if (stream[0].event === 'start') {\n nodeStack.push(stream[0].node);\n } else {\n nodeStack.pop();\n }\n render(stream.splice(0, 1)[0]);\n }\n }\n return result + escape(value.substr(processed));\n }\n\n /* Initialization */\n\n function dependencyOnParent(mode) {\n if (!mode) return false;\n\n return mode.endsWithParent || dependencyOnParent(mode.starts);\n }\n\n function expand_or_clone_mode(mode) {\n if (mode.variants && !mode.cached_variants) {\n mode.cached_variants = mode.variants.map(function(variant) {\n return inherit(mode, {variants: null}, variant);\n });\n }\n\n // EXPAND\n // if we have variants then essentially \"replace\" the mode with the variants\n // this happens in compileMode, where this function is called from\n if (mode.cached_variants)\n return mode.cached_variants;\n\n // CLONE\n // if we have dependencies on parents then we need a unique\n // instance of ourselves, so we can be reused with many\n // different parents without issue\n if (dependencyOnParent(mode))\n return [inherit(mode, { starts: mode.starts ? inherit(mode.starts) : null })];\n\n if (Object.isFrozen(mode))\n return [inherit(mode)];\n\n // no special dependency issues, just return ourselves\n return [mode];\n }\n\n function restoreLanguageApi(obj) {\n if(API_REPLACES && !obj.langApiRestored) {\n obj.langApiRestored = true;\n for(var key in API_REPLACES) {\n if (obj[key]) {\n obj[API_REPLACES[key]] = obj[key];\n }\n }\n (obj.contains || []).concat(obj.variants || []).forEach(restoreLanguageApi);\n }\n }\n\n function compileKeywords(rawKeywords, case_insensitive) {\n var compiled_keywords = {};\n\n if (typeof rawKeywords === 'string') { // string\n splitAndCompile('keyword', rawKeywords);\n } else {\n objectKeys(rawKeywords).forEach(function (className) {\n splitAndCompile(className, rawKeywords[className]);\n });\n }\n return compiled_keywords;\n\n // ---\n\n function splitAndCompile(className, str) {\n if (case_insensitive) {\n str = str.toLowerCase();\n }\n str.split(' ').forEach(function(keyword) {\n var pair = keyword.split('|');\n compiled_keywords[pair[0]] = [className, scoreForKeyword(pair[0], pair[1])];\n });\n }\n }\n\n function scoreForKeyword(keyword, providedScore) {\n // manual scores always win over common keywords\n // so you can force a score of 1 if you really insist\n if (providedScore)\n return Number(providedScore);\n\n return commonKeyword(keyword) ? 0 : 1;\n }\n\n function commonKeyword(word) {\n return COMMON_KEYWORDS.indexOf(word.toLowerCase()) != -1;\n }\n\n function compileLanguage(language) {\n\n function reStr(re) {\n return (re && re.source) || re;\n }\n\n function langRe(value, global) {\n return new RegExp(\n reStr(value),\n 'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')\n );\n }\n\n function reCountMatchGroups(re) {\n return (new RegExp(re.toString() + '|')).exec('').length - 1;\n }\n\n // joinRe logically computes regexps.join(separator), but fixes the\n // backreferences so they continue to match.\n // it also places each individual regular expression into it's own\n // match group, keeping track of the sequencing of those match groups\n // is currently an exercise for the caller. :-)\n function joinRe(regexps, separator) {\n // backreferenceRe matches an open parenthesis or backreference. To avoid\n // an incorrect parse, it additionally matches the following:\n // - [...] elements, where the meaning of parentheses and escapes change\n // - other escape sequences, so we do not misparse escape sequences as\n // interesting elements\n // - non-matching or lookahead parentheses, which do not capture. These\n // follow the '(' with a '?'.\n var backreferenceRe = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n var numCaptures = 0;\n var ret = '';\n for (var i = 0; i < regexps.length; i++) {\n numCaptures += 1;\n var offset = numCaptures;\n var re = reStr(regexps[i]);\n if (i > 0) {\n ret += separator;\n }\n ret += \"(\";\n while (re.length > 0) {\n var match = backreferenceRe.exec(re);\n if (match == null) {\n ret += re;\n break;\n }\n ret += re.substring(0, match.index);\n re = re.substring(match.index + match[0].length);\n if (match[0][0] == '\\\\' && match[1]) {\n // Adjust the backreference.\n ret += '\\\\' + String(Number(match[1]) + offset);\n } else {\n ret += match[0];\n if (match[0] == '(') {\n numCaptures++;\n }\n }\n }\n ret += \")\";\n }\n return ret;\n }\n\n function buildModeRegex(mode) {\n\n var matchIndexes = {};\n var matcherRe;\n var regexes = [];\n var matcher = {};\n var matchAt = 1;\n\n function addRule(rule, regex) {\n matchIndexes[matchAt] = rule;\n regexes.push([rule, regex]);\n matchAt += reCountMatchGroups(regex) + 1;\n }\n\n var term;\n for (var i=0; i < mode.contains.length; i++) {\n var re;\n term = mode.contains[i];\n if (term.beginKeywords) {\n re = '\\\\.?(?:' + term.begin + ')\\\\.?';\n } else {\n re = term.begin;\n }\n addRule(term, re);\n }\n if (mode.terminator_end)\n addRule(\"end\", mode.terminator_end);\n if (mode.illegal)\n addRule(\"illegal\", mode.illegal);\n\n var terminators = regexes.map(function(el) { return el[1]; });\n matcherRe = langRe(joinRe(terminators, '|'), true);\n\n matcher.lastIndex = 0;\n matcher.exec = function(s) {\n var rule;\n\n if( regexes.length === 0) return null;\n\n matcherRe.lastIndex = matcher.lastIndex;\n var match = matcherRe.exec(s);\n if (!match) { return null; }\n\n for(var i = 0; i';\n\n return openSpan + insideSpan + closeSpan;\n }\n\n function processKeywords() {\n var keyword_match, last_index, match, result;\n\n if (!top.keywords)\n return escape(mode_buffer);\n\n result = '';\n last_index = 0;\n top.lexemesRe.lastIndex = 0;\n match = top.lexemesRe.exec(mode_buffer);\n\n while (match) {\n result += escape(mode_buffer.substring(last_index, match.index));\n keyword_match = keywordMatch(top, match);\n if (keyword_match) {\n relevance += keyword_match[1];\n result += buildSpan(keyword_match[0], escape(match[0]));\n } else {\n result += escape(match[0]);\n }\n last_index = top.lexemesRe.lastIndex;\n match = top.lexemesRe.exec(mode_buffer);\n }\n return result + escape(mode_buffer.substr(last_index));\n }\n\n function processSubLanguage() {\n var explicit = typeof top.subLanguage === 'string';\n if (explicit && !languages[top.subLanguage]) {\n return escape(mode_buffer);\n }\n\n var result = explicit ?\n highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) :\n highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined);\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Use case in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n if (explicit) {\n continuations[top.subLanguage] = result.top;\n }\n return buildSpan(result.language, result.value, false, true);\n }\n\n function processBuffer() {\n result += (top.subLanguage != null ? processSubLanguage() : processKeywords());\n mode_buffer = '';\n }\n\n function startNewMode(mode) {\n result += mode.className? buildSpan(mode.className, '', true): '';\n top = Object.create(mode, {parent: {value: top}});\n }\n\n\n function doBeginMatch(match) {\n var lexeme = match[0];\n var new_mode = match.rule;\n\n if (new_mode && new_mode.endSameAsBegin) {\n new_mode.endRe = escapeRe( lexeme );\n }\n\n if (new_mode.skip) {\n mode_buffer += lexeme;\n } else {\n if (new_mode.excludeBegin) {\n mode_buffer += lexeme;\n }\n processBuffer();\n if (!new_mode.returnBegin && !new_mode.excludeBegin) {\n mode_buffer = lexeme;\n }\n }\n startNewMode(new_mode);\n return new_mode.returnBegin ? 0 : lexeme.length;\n }\n\n function doEndMatch(match) {\n var lexeme = match[0];\n var matchPlusRemainder = value.substr(match.index);\n var end_mode = endOfMode(top, matchPlusRemainder);\n if (!end_mode) { return; }\n\n var origin = top;\n if (origin.skip) {\n mode_buffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n mode_buffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n mode_buffer = lexeme;\n }\n }\n do {\n if (top.className) {\n result += spanEndTag;\n }\n if (!top.skip && !top.subLanguage) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== end_mode.parent);\n if (end_mode.starts) {\n if (end_mode.endSameAsBegin) {\n end_mode.starts.endRe = end_mode.endRe;\n }\n startNewMode(end_mode.starts);\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n var lastMatch = {};\n function processLexeme(text_before_match, match) {\n\n var lexeme = match && match[0];\n\n // add non-matched text to the current mode buffer\n mode_buffer += text_before_match;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n // we've found a 0 width match and we're stuck, so we need to advance\n // this happens when we have badly behaved rules that have optional matchers to the degree that\n // sometimes they can end up matching nothing at all\n // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n if (lastMatch.type==\"begin\" && match.type==\"end\" && lastMatch.index == match.index && lexeme === \"\") {\n // spit the \"skipped\" character that our regex choked on back into the output sequence\n mode_buffer += value.slice(match.index, match.index + 1);\n return 1;\n }\n lastMatch = match;\n\n if (match.type===\"begin\") {\n return doBeginMatch(match);\n } else if (match.type===\"illegal\" && !ignore_illegals) {\n // illegal match, we do not continue processing\n throw new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.className || '') + '\"');\n } else if (match.type===\"end\") {\n var processed = doEndMatch(match);\n if (processed != undefined)\n return processed;\n }\n\n /*\n Why might be find ourselves here? Only one occasion now. An end match that was\n triggered but could not be completed. When might this happen? When an `endSameasBegin`\n rule sets the end rule to a specific match. Since the overall mode termination rule that's\n being used to scan the text isn't recompiled that means that any match that LOOKS like\n the end (but is not, because it is not an exact match to the beginning) will\n end up here. A definite end match, but when `doEndMatch` tries to \"reapply\"\n the end rule and fails to match, we wind up here, and just silently ignore the end.\n\n This causes no real harm other than stopping a few times too many.\n */\n\n mode_buffer += lexeme;\n return lexeme.length;\n }\n\n var language = getLanguage(name);\n if (!language) {\n console.error(LANGUAGE_NOT_FOUND.replace(\"{}\", name));\n throw new Error('Unknown language: \"' + name + '\"');\n }\n\n compileLanguage(language);\n var top = continuation || language;\n var continuations = {}; // keep continuations for sub-languages\n var result = '', current;\n for(current = top; current !== language; current = current.parent) {\n if (current.className) {\n result = buildSpan(current.className, '', true) + result;\n }\n }\n var mode_buffer = '';\n var relevance = 0;\n try {\n var match, count, index = 0;\n while (true) {\n top.terminators.lastIndex = index;\n match = top.terminators.exec(value);\n if (!match)\n break;\n count = processLexeme(value.substring(index, match.index), match);\n index = match.index + count;\n }\n processLexeme(value.substr(index));\n for(current = top; current.parent; current = current.parent) { // close dangling modes\n if (current.className) {\n result += spanEndTag;\n }\n }\n return {\n relevance: relevance,\n value: result,\n illegal:false,\n language: name,\n top: top\n };\n } catch (err) {\n if (err.message && err.message.indexOf('Illegal') !== -1) {\n return {\n illegal: true,\n relevance: 0,\n value: escape(value)\n };\n } else if (SAFE_MODE) {\n return {\n relevance: 0,\n value: escape(value),\n language: name,\n top: top,\n errorRaised: err\n };\n } else {\n throw err;\n }\n }\n }\n\n /*\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - second_best (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n */\n function highlightAuto(text, languageSubset) {\n languageSubset = languageSubset || options.languages || objectKeys(languages);\n var result = {\n relevance: 0,\n value: escape(text)\n };\n var second_best = result;\n languageSubset.filter(getLanguage).filter(autoDetection).forEach(function(name) {\n var current = highlight(name, text, false);\n current.language = name;\n if (current.relevance > second_best.relevance) {\n second_best = current;\n }\n if (current.relevance > result.relevance) {\n second_best = result;\n result = current;\n }\n });\n if (second_best.language) {\n result.second_best = second_best;\n }\n return result;\n }\n\n /*\n Post-processing of the highlighted markup:\n\n - replace TABs with something more useful\n - replace real line-breaks with '
' for non-pre containers\n\n */\n function fixMarkup(value) {\n if (!(options.tabReplace || options.useBR)) {\n return value;\n }\n\n return value.replace(fixMarkupRe, function(match, p1) {\n if (options.useBR && match === '\\n') {\n return '
';\n } else if (options.tabReplace) {\n return p1.replace(/\\t/g, options.tabReplace);\n }\n return '';\n });\n }\n\n function buildClassName(prevClassName, currentLang, resultLang) {\n var language = currentLang ? aliases[currentLang] : resultLang,\n result = [prevClassName.trim()];\n\n if (!prevClassName.match(/\\bhljs\\b/)) {\n result.push('hljs');\n }\n\n if (prevClassName.indexOf(language) === -1) {\n result.push(language);\n }\n\n return result.join(' ').trim();\n }\n\n /*\n Applies highlighting to a DOM node containing code. Accepts a DOM node and\n two optional parameters for fixMarkup.\n */\n function highlightBlock(block) {\n var node, originalStream, result, resultNode, text;\n var language = blockLanguage(block);\n\n if (isNotHighlighted(language))\n return;\n\n if (options.useBR) {\n node = document.createElement('div');\n node.innerHTML = block.innerHTML.replace(/\\n/g, '').replace(//g, '\\n');\n } else {\n node = block;\n }\n text = node.textContent;\n result = language ? highlight(language, text, true) : highlightAuto(text);\n\n originalStream = nodeStream(node);\n if (originalStream.length) {\n resultNode = document.createElement('div');\n resultNode.innerHTML = result.value;\n result.value = mergeStreams(originalStream, nodeStream(resultNode), text);\n }\n result.value = fixMarkup(result.value);\n\n block.innerHTML = result.value;\n block.className = buildClassName(block.className, language, result.language);\n block.result = {\n language: result.language,\n re: result.relevance\n };\n if (result.second_best) {\n block.second_best = {\n language: result.second_best.language,\n re: result.second_best.relevance\n };\n }\n }\n\n /*\n Updates highlight.js global options with values passed in the form of an object.\n */\n function configure(user_options) {\n options = inherit(options, user_options);\n }\n\n /*\n Applies highlighting to all
..
blocks on a page.\n */\n function initHighlighting() {\n if (initHighlighting.called)\n return;\n initHighlighting.called = true;\n\n var blocks = document.querySelectorAll('pre code');\n ArrayProto.forEach.call(blocks, highlightBlock);\n }\n\n /*\n Attaches highlighting to the page load event.\n */\n function initHighlightingOnLoad() {\n window.addEventListener('DOMContentLoaded', initHighlighting, false);\n window.addEventListener('load', initHighlighting, false);\n }\n\n var PLAINTEXT_LANGUAGE = { disableAutodetect: true };\n\n function registerLanguage(name, language) {\n var lang;\n try { lang = language(hljs); }\n catch (error) {\n console.error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", name));\n // hard or soft error\n if (!SAFE_MODE) { throw error; } else { console.error(error); }\n // languages that have serious errors are replaced with essentially a\n // \"plaintext\" stand-in so that the code blocks will still get normal\n // css classes applied to them - and one bad language won't break the\n // entire highlighter\n lang = PLAINTEXT_LANGUAGE;\n }\n languages[name] = lang;\n restoreLanguageApi(lang);\n lang.rawDefinition = language.bind(null,hljs);\n\n if (lang.aliases) {\n lang.aliases.forEach(function(alias) {aliases[alias] = name;});\n }\n }\n\n function listLanguages() {\n return objectKeys(languages);\n }\n\n /*\n intended usage: When one language truly requires another\n\n Unlike `getLanguage`, this will throw when the requested language\n is not available.\n */\n function requireLanguage(name) {\n var lang = getLanguage(name);\n if (lang) { return lang; }\n\n var err = new Error('The \\'{}\\' language is required, but not loaded.'.replace('{}',name));\n throw err;\n }\n\n function getLanguage(name) {\n name = (name || '').toLowerCase();\n return languages[name] || languages[aliases[name]];\n }\n\n function autoDetection(name) {\n var lang = getLanguage(name);\n return lang && !lang.disableAutodetect;\n }\n\n /* Interface definition */\n\n hljs.highlight = highlight;\n hljs.highlightAuto = highlightAuto;\n hljs.fixMarkup = fixMarkup;\n hljs.highlightBlock = highlightBlock;\n hljs.configure = configure;\n hljs.initHighlighting = initHighlighting;\n hljs.initHighlightingOnLoad = initHighlightingOnLoad;\n hljs.registerLanguage = registerLanguage;\n hljs.listLanguages = listLanguages;\n hljs.getLanguage = getLanguage;\n hljs.requireLanguage = requireLanguage;\n hljs.autoDetection = autoDetection;\n hljs.inherit = inherit;\n hljs.debugMode = function() { SAFE_MODE = false; }\n\n // Common regexps\n hljs.IDENT_RE = '[a-zA-Z]\\\\w*';\n hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\n hljs.NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\n hljs.C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\n hljs.BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\n hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n // Common modes\n hljs.BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n };\n hljs.APOS_STRING_MODE = {\n className: 'string',\n begin: '\\'', end: '\\'',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE]\n };\n hljs.QUOTE_STRING_MODE = {\n className: 'string',\n begin: '\"', end: '\"',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE]\n };\n hljs.PHRASAL_WORDS_MODE = {\n begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n };\n hljs.COMMENT = function (begin, end, inherits) {\n var mode = hljs.inherit(\n {\n className: 'comment',\n begin: begin, end: end,\n contains: []\n },\n inherits || {}\n );\n mode.contains.push(hljs.PHRASAL_WORDS_MODE);\n mode.contains.push({\n className: 'doctag',\n begin: '(?:TODO|FIXME|NOTE|BUG|XXX):',\n relevance: 0\n });\n return mode;\n };\n hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$');\n hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\\\*', '\\\\*/');\n hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$');\n hljs.NUMBER_MODE = {\n className: 'number',\n begin: hljs.NUMBER_RE,\n relevance: 0\n };\n hljs.C_NUMBER_MODE = {\n className: 'number',\n begin: hljs.C_NUMBER_RE,\n relevance: 0\n };\n hljs.BINARY_NUMBER_MODE = {\n className: 'number',\n begin: hljs.BINARY_NUMBER_RE,\n relevance: 0\n };\n hljs.CSS_NUMBER_MODE = {\n className: 'number',\n begin: hljs.NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n };\n hljs.REGEXP_MODE = {\n className: 'regexp',\n begin: /\\//, end: /\\/[gimuy]*/,\n illegal: /\\n/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n {\n begin: /\\[/, end: /\\]/,\n relevance: 0,\n contains: [hljs.BACKSLASH_ESCAPE]\n }\n ]\n };\n hljs.TITLE_MODE = {\n className: 'title',\n begin: hljs.IDENT_RE,\n relevance: 0\n };\n hljs.UNDERSCORE_TITLE_MODE = {\n className: 'title',\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n };\n hljs.METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n };\n\n var constants = [\n hljs.BACKSLASH_ESCAPE,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.PHRASAL_WORDS_MODE,\n hljs.COMMENT,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.HASH_COMMENT_MODE,\n hljs.NUMBER_MODE,\n hljs.C_NUMBER_MODE,\n hljs.BINARY_NUMBER_MODE,\n hljs.CSS_NUMBER_MODE,\n hljs.REGEXP_MODE,\n hljs.TITLE_MODE,\n hljs.UNDERSCORE_TITLE_MODE,\n hljs.METHOD_GUARD\n ]\n constants.forEach(function(obj) { deepFreeze(obj); });\n\n // https://github.com/substack/deep-freeze/blob/master/index.js\n function deepFreeze (o) {\n Object.freeze(o);\n\n var objIsFunction = typeof o === 'function';\n\n Object.getOwnPropertyNames(o).forEach(function (prop) {\n if (o.hasOwnProperty(prop)\n && o[prop] !== null\n && (typeof o[prop] === \"object\" || typeof o[prop] === \"function\")\n // IE11 fix: https://github.com/highlightjs/highlight.js/issues/2318\n // TODO: remove in the future\n && (objIsFunction ? prop !== 'caller' && prop !== 'callee' && prop !== 'arguments' : true)\n && !Object.isFrozen(o[prop])) {\n deepFreeze(o[prop]);\n }\n });\n\n return o;\n };\n\n\n return hljs;\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\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","// Underscore.js 1.9.1\n// http://underscorejs.org\n// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n this ||\n {};\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for their old module API. If we're in\n // the browser, add `_` as a global object.\n // (`nodeType` is checked to ensure that `module`\n // and `exports` are not HTML elements.)\n if (typeof exports != 'undefined' && !exports.nodeType) {\n if (typeof module != 'undefined' && !module.nodeType && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.9.1';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n var builtinIteratee;\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);\n return _.property(value);\n };\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only argCount argument.\n _.iteratee = builtinIteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n var restArguments = function(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var shallowProperty = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n var has = function(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n }\n\n var deepGet = function(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = shallowProperty('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n var createReduce = function(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n };\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (_.isFunction(path)) {\n func = path;\n } else if (_.isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return _.map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection.\n _.shuffle = function(obj) {\n return _.sample(obj, Infinity);\n };\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = _.random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n });\n\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (_.isString(obj)) {\n // Keep surrogate pair characters together\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, Boolean);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, output) {\n output = output || [];\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (shallow) {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n } else {\n flatten(value, shallow, strict, output);\n idx = output.length;\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = restArguments(function(array, otherArrays) {\n return _.difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = restArguments(function(arrays) {\n return _.uniq(flatten(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n });\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = restArguments(_.unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of _.pairs.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions.\n var createPredicateIndexFinder = function(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n };\n\n // Returns the first index on an array-like that passes a predicate test.\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions.\n var createIndexFinder = function(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n };\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n _.chunk = function(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments.\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = restArguments(function(func, context, args) {\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n _.partial = restArguments(function(func, boundArgs) {\n var placeholder = _.partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n _.partial.placeholder = _;\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = _.bind(obj[key], obj);\n }\n });\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = _.delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n _.restArguments = restArguments;\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n var collectNonEnumProps = function(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n };\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object.\n // In contrast to _.map it returns an object.\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of _.object.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`.\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test.\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Internal pick helper function to determine if `obj` has key `key`.\n var keyInObj = function(value, key, obj) {\n return key in obj;\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (_.isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = _.allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = _.map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n });\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq, deepEq;\n eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n };\n\n // Internal recursive comparison function for `isEqual`.\n deepEq = function(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`?\n _.isNaN = function(obj) {\n return _.isNumber(obj) && isNaN(obj);\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, path) {\n if (!_.isArray(path)) {\n return has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indexes.\n _.property = function(path) {\n if (!_.isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n };\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !_.isArray(path) ? obj[path] : deepGet(obj, path);\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n _.result = function(obj, path, fallback) {\n if (!_.isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return _.isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = _.isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var chainResult = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return chainResult(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define == 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\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\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","import isPlainObject from 'lodash-es/isPlainObject';\nimport $$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 */\nexport var ActionTypes = {\n INIT: '@@redux/INIT'\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 */\nexport default function createStore(reducer, preloadedState, enhancer) {\n var _ref2;\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 function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\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 function getState() {\n return currentState;\n }\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 function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected listener to be a function.');\n }\n\n var isSubscribed = true;\n\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n isSubscribed = false;\n\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\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 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 for (var i = 0; i < listeners.length; i++) {\n listeners[i]();\n }\n\n return action;\n }\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 function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer;\n dispatch({ type: ActionTypes.INIT });\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/zenparsing/es-observable\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') {\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 { unsubscribe: unsubscribe };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n }\n\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 dispatch({ 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}","import { ActionTypes } from './createStore';\nimport isPlainObject from 'lodash-es/isPlainObject';\nimport warning from './utils/warning';\n\nfunction getUndefinedStateErrorMessage(key, action) {\n var actionType = action && action.type;\n var actionName = actionType && '\"' + actionType.toString() + '\"' || 'an action';\n\n return 'Given action ' + actionName + ', reducer \"' + key + '\" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state.';\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\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\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 assertReducerSanity(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, { type: ActionTypes.INIT });\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.');\n }\n\n var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.');\n if (typeof reducer(undefined, { type: type }) === '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.');\n }\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 */\nexport default function combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\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 var finalReducerKeys = Object.keys(finalReducers);\n\n if (process.env.NODE_ENV !== 'production') {\n var unexpectedKeyCache = {};\n }\n\n var sanityError;\n try {\n assertReducerSanity(finalReducers);\n } catch (e) {\n sanityError = e;\n }\n\n return function combination() {\n var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n var action = arguments[1];\n\n if (sanityError) {\n throw sanityError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\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 if (typeof nextStateForKey === 'undefined') {\n var errorMessage = getUndefinedStateErrorMessage(key, action);\n throw new Error(errorMessage);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n return hasChanged ? nextState : state;\n };\n}","function bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(undefined, arguments));\n };\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 a single function as the first argument,\n * and get a 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 */\nexport default function 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 keys = Object.keys(actionCreators);\n var boundActionCreators = {};\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var actionCreator = actionCreators[key];\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\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 */\n\nexport default function compose() {\n for (var _len = arguments.length, funcs = 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 var last = funcs[funcs.length - 1];\n var rest = funcs.slice(0, -1);\n return function () {\n return rest.reduceRight(function (composed, f) {\n return f(composed);\n }, last.apply(undefined, arguments));\n };\n}","var _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\nimport compose from './compose';\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 */\nexport default function applyMiddleware() {\n for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function (reducer, preloadedState, enhancer) {\n var store = createStore(reducer, preloadedState, enhancer);\n var _dispatch = store.dispatch;\n var chain = [];\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch(action) {\n return _dispatch(action);\n }\n };\n chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(undefined, chain)(store.dispatch);\n\n return _extends({}, store, {\n dispatch: _dispatch\n });\n };\n };\n}","import createStore from './createStore';\nimport combineReducers from './combineReducers';\nimport bindActionCreators from './bindActionCreators';\nimport applyMiddleware from './applyMiddleware';\nimport compose from './compose';\nimport warning from './utils/warning';\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*/\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 DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { createStore, combineReducers, bindActionCreators, applyMiddleware, compose };","import { PropTypes } from 'react';\n\nexport default PropTypes.shape({\n subscribe: PropTypes.func.isRequired,\n dispatch: PropTypes.func.isRequired,\n getState: PropTypes.func.isRequired\n});","function _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\nimport { Component, PropTypes, Children } from 'react';\nimport storeShape from '../utils/storeShape';\nimport warning from '../utils/warning';\n\nvar didWarnAboutReceivingStore = false;\nfunction warnAboutReceivingStore() {\n if (didWarnAboutReceivingStore) {\n return;\n }\n didWarnAboutReceivingStore = true;\n\n warning(' does not support changing `store` on the fly. ' + 'It is most likely that you see this error because you updated to ' + 'Redux 2.x and React Redux 2.x which no longer hot reload reducers ' + 'automatically. See https://github.com/reactjs/react-redux/releases/' + 'tag/v2.0.0 for the migration instructions.');\n}\n\nvar Provider = function (_Component) {\n _inherits(Provider, _Component);\n\n Provider.prototype.getChildContext = function getChildContext() {\n return { store: this.store };\n };\n\n function Provider(props, context) {\n _classCallCheck(this, Provider);\n\n var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));\n\n _this.store = props.store;\n return _this;\n }\n\n Provider.prototype.render = function render() {\n return Children.only(this.props.children);\n };\n\n return Provider;\n}(Component);\n\nexport { Provider as default };\n\n\nif (process.env.NODE_ENV !== 'production') {\n Provider.prototype.componentWillReceiveProps = function (nextProps) {\n var store = this.store;\n var nextStore = nextProps.store;\n\n\n if (store !== nextStore) {\n warnAboutReceivingStore();\n }\n };\n}\n\nProvider.propTypes = {\n store: storeShape.isRequired,\n children: PropTypes.element.isRequired\n};\nProvider.childContextTypes = {\n store: storeShape.isRequired\n};\nProvider.displayName = 'Provider';","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// 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 // the current/next pattern is copied from redux's createStore code.\n // TODO: refactor+expose that code to be reusable here?\n var current = [];\n var next = [];\n\n return {\n clear: function clear() {\n next = CLEARED;\n current = CLEARED;\n },\n notify: function notify() {\n var listeners = current = next;\n for (var i = 0; i < listeners.length; i++) {\n listeners[i]();\n }\n },\n subscribe: function subscribe(listener) {\n var isSubscribed = true;\n if (next === current) next = current.slice();\n next.push(listener);\n\n return function unsubscribe() {\n if (!isSubscribed || current === CLEARED) return;\n isSubscribed = false;\n\n if (next === current) next = current.slice();\n next.splice(next.indexOf(listener), 1);\n };\n }\n };\n}\n\nvar Subscription = function () {\n function Subscription(store, parentSub) {\n _classCallCheck(this, Subscription);\n\n this.store = store;\n this.parentSub = parentSub;\n this.unsubscribe = null;\n this.listeners = nullListeners;\n }\n\n Subscription.prototype.addNestedSub = function addNestedSub(listener) {\n this.trySubscribe();\n return this.listeners.subscribe(listener);\n };\n\n Subscription.prototype.notifyNestedSubs = function notifyNestedSubs() {\n this.listeners.notify();\n };\n\n Subscription.prototype.isSubscribed = function isSubscribed() {\n return Boolean(this.unsubscribe);\n };\n\n Subscription.prototype.trySubscribe = function trySubscribe() {\n if (!this.unsubscribe) {\n // this.onStateChange is set by connectAdvanced.initSubscription()\n this.unsubscribe = this.parentSub ? this.parentSub.addNestedSub(this.onStateChange) : this.store.subscribe(this.onStateChange);\n\n this.listeners = createListenerCollection();\n }\n };\n\n Subscription.prototype.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 };","var _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\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 _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\nimport hoistStatics from 'hoist-non-react-statics';\nimport invariant from 'invariant';\nimport { Component, PropTypes, createElement } from 'react';\n\nimport Subscription from '../utils/Subscription';\nimport storeShape from '../utils/storeShape';\n\nvar hotReloadingVersion = 0;\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) {\n var _contextTypes, _childContextTypes;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$getDisplayName = _ref.getDisplayName,\n getDisplayName = _ref$getDisplayName === undefined ? function (name) {\n return 'ConnectAdvanced(' + name + ')';\n } : _ref$getDisplayName,\n _ref$methodName = _ref.methodName,\n methodName = _ref$methodName === undefined ? 'connectAdvanced' : _ref$methodName,\n _ref$renderCountProp = _ref.renderCountProp,\n renderCountProp = _ref$renderCountProp === undefined ? undefined : _ref$renderCountProp,\n _ref$shouldHandleStat = _ref.shouldHandleStateChanges,\n shouldHandleStateChanges = _ref$shouldHandleStat === undefined ? true : _ref$shouldHandleStat,\n _ref$storeKey = _ref.storeKey,\n storeKey = _ref$storeKey === undefined ? 'store' : _ref$storeKey,\n _ref$withRef = _ref.withRef,\n withRef = _ref$withRef === undefined ? false : _ref$withRef,\n connectOptions = _objectWithoutProperties(_ref, ['getDisplayName', 'methodName', 'renderCountProp', 'shouldHandleStateChanges', 'storeKey', 'withRef']);\n\n var subscriptionKey = storeKey + 'Subscription';\n var version = hotReloadingVersion++;\n\n var contextTypes = (_contextTypes = {}, _contextTypes[storeKey] = storeShape, _contextTypes[subscriptionKey] = PropTypes.instanceOf(Subscription), _contextTypes);\n var childContextTypes = (_childContextTypes = {}, _childContextTypes[subscriptionKey] = PropTypes.instanceOf(Subscription), _childContextTypes);\n\n return function wrapWithConnect(WrappedComponent) {\n invariant(typeof WrappedComponent == 'function', 'You must pass a component to the function returned by ' + ('connect. Instead received ' + WrappedComponent));\n\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n\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 withRef: withRef,\n displayName: displayName,\n wrappedComponentName: wrappedComponentName,\n WrappedComponent: WrappedComponent\n });\n\n var Connect = function (_Component) {\n _inherits(Connect, _Component);\n\n function Connect(props, context) {\n _classCallCheck(this, Connect);\n\n var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));\n\n _this.version = version;\n _this.state = {};\n _this.renderCount = 0;\n _this.store = _this.props[storeKey] || _this.context[storeKey];\n _this.parentSub = props[subscriptionKey] || context[subscriptionKey];\n\n _this.setWrappedInstance = _this.setWrappedInstance.bind(_this);\n\n invariant(_this.store, 'Could not find \"' + storeKey + '\" in either the context or ' + ('props of \"' + displayName + '\". ') + 'Either wrap the root component in a , ' + ('or explicitly pass \"' + storeKey + '\" as a prop to \"' + displayName + '\".'));\n\n // make sure `getState` is properly bound in order to avoid breaking\n // custom store implementations that rely on the store's context\n _this.getState = _this.store.getState.bind(_this.store);\n\n _this.initSelector();\n _this.initSubscription();\n return _this;\n }\n\n Connect.prototype.getChildContext = function getChildContext() {\n var _ref2;\n\n return _ref2 = {}, _ref2[subscriptionKey] = this.subscription, _ref2;\n };\n\n Connect.prototype.componentDidMount = function componentDidMount() {\n if (!shouldHandleStateChanges) return;\n\n // componentWillMount fires during server side rendering, but componentDidMount and\n // componentWillUnmount do not. Because of this, trySubscribe happens during ...didMount.\n // Otherwise, unsubscription would never take place during SSR, causing a memory leak.\n // To handle the case where a child component may have triggered a state change by\n // dispatching an action in its componentWillMount, we have to re-run the select and maybe\n // re-render.\n this.subscription.trySubscribe();\n this.selector.run(this.props);\n if (this.selector.shouldComponentUpdate) this.forceUpdate();\n };\n\n Connect.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n this.selector.run(nextProps);\n };\n\n Connect.prototype.shouldComponentUpdate = function shouldComponentUpdate() {\n return this.selector.shouldComponentUpdate;\n };\n\n Connect.prototype.componentWillUnmount = function componentWillUnmount() {\n if (this.subscription) this.subscription.tryUnsubscribe();\n // these are just to guard against extra memory leakage if a parent element doesn't\n // dereference this instance properly, such as an async callback that never finishes\n this.subscription = null;\n this.store = null;\n this.parentSub = null;\n this.selector.run = function () {};\n };\n\n Connect.prototype.getWrappedInstance = function getWrappedInstance() {\n invariant(withRef, 'To access the wrapped instance, you need to specify ' + ('{ withRef: true } in the options argument of the ' + methodName + '() call.'));\n return this.wrappedInstance;\n };\n\n Connect.prototype.setWrappedInstance = function setWrappedInstance(ref) {\n this.wrappedInstance = ref;\n };\n\n Connect.prototype.initSelector = function initSelector() {\n var dispatch = this.store.dispatch;\n var getState = this.getState;\n\n var sourceSelector = selectorFactory(dispatch, selectorFactoryOptions);\n\n // wrap the selector in an object that tracks its results between runs\n var selector = this.selector = {\n shouldComponentUpdate: true,\n props: sourceSelector(getState(), this.props),\n run: function runComponentSelector(props) {\n try {\n var nextProps = sourceSelector(getState(), props);\n if (selector.error || nextProps !== selector.props) {\n selector.shouldComponentUpdate = true;\n selector.props = nextProps;\n selector.error = null;\n }\n } catch (error) {\n selector.shouldComponentUpdate = true;\n selector.error = error;\n }\n }\n };\n };\n\n Connect.prototype.initSubscription = function initSubscription() {\n var _this2 = this;\n\n if (shouldHandleStateChanges) {\n (function () {\n var subscription = _this2.subscription = new Subscription(_this2.store, _this2.parentSub);\n var dummyState = {};\n\n subscription.onStateChange = function onStateChange() {\n this.selector.run(this.props);\n\n if (!this.selector.shouldComponentUpdate) {\n subscription.notifyNestedSubs();\n } else {\n this.componentDidUpdate = function componentDidUpdate() {\n this.componentDidUpdate = undefined;\n subscription.notifyNestedSubs();\n };\n\n this.setState(dummyState);\n }\n }.bind(_this2);\n })();\n }\n };\n\n Connect.prototype.isSubscribed = function isSubscribed() {\n return Boolean(this.subscription) && this.subscription.isSubscribed();\n };\n\n Connect.prototype.addExtraProps = function addExtraProps(props) {\n if (!withRef && !renderCountProp) return props;\n // make a shallow copy so that fields added don't leak to the original selector.\n // this is especially important for 'ref' since that's a reference back to the component\n // instance. a singleton memoized selector would then be holding a reference to the\n // instance, preventing the instance from being garbage collected, and that would be bad\n var withExtras = _extends({}, props);\n if (withRef) withExtras.ref = this.setWrappedInstance;\n if (renderCountProp) withExtras[renderCountProp] = this.renderCount++;\n return withExtras;\n };\n\n Connect.prototype.render = function render() {\n var selector = this.selector;\n selector.shouldComponentUpdate = false;\n\n if (selector.error) {\n throw selector.error;\n } else {\n return createElement(WrappedComponent, this.addExtraProps(selector.props));\n }\n };\n\n return Connect;\n }(Component);\n\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = displayName;\n Connect.childContextTypes = childContextTypes;\n Connect.contextTypes = contextTypes;\n Connect.propTypes = contextTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n Connect.prototype.componentWillUpdate = function componentWillUpdate() {\n // We are hot reloading!\n if (this.version !== version) {\n this.version = version;\n this.initSelector();\n\n if (this.subscription) this.subscription.tryUnsubscribe();\n this.initSubscription();\n if (shouldHandleStateChanges) this.subscription.trySubscribe();\n }\n };\n }\n\n return hoistStatics(Connect, WrappedComponent);\n };\n}","var hasOwn = Object.prototype.hasOwnProperty;\n\nexport default function shallowEqual(a, b) {\n if (a === b) return true;\n\n var countA = 0;\n var countB = 0;\n\n for (var key in a) {\n if (hasOwn.call(a, key) && a[key] !== b[key]) return false;\n countA++;\n }\n\n for (var _key in b) {\n if (hasOwn.call(b, _key)) countB++;\n }\n\n return countA === countB;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\n\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 constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n}\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..\nexport function getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n}\n\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// \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 };\n\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = 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\n return props;\n };\n\n return proxy;\n };\n}","import { bindActionCreators } from 'redux';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\n\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\n\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n return { dispatch: dispatch };\n }) : undefined;\n}\n\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n return bindActionCreators(mapDispatchToProps, dispatch);\n }) : undefined;\n}\n\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\n\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\n\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(function () {\n return {};\n }) : undefined;\n}\n\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","var _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\nimport verifyPlainObject from '../utils/verifyPlainObject';\n\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return _extends({}, ownProps, stateProps, dispatchProps);\n}\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\n var hasRunOnce = false;\n var mergedProps = void 0;\n\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\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n }\n\n return mergedProps;\n };\n };\n}\n\nexport function whenMergePropsIsFunction(mergeProps) {\n return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\n\nexport function whenMergePropsIsOmitted(mergeProps) {\n return !mergeProps ? function () {\n return defaultMergeProps;\n } : undefined;\n}\n\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","function _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\nimport verifySubselectors from './verifySubselectors';\n\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}\n\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n var areStatesEqual = _ref.areStatesEqual,\n areOwnPropsEqual = _ref.areOwnPropsEqual,\n areStatePropsEqual = _ref.areStatePropsEqual;\n\n var hasRunAtLeastOnce = false;\n var state = void 0;\n var ownProps = void 0;\n var stateProps = void 0;\n var dispatchProps = void 0;\n var mergedProps = void 0;\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\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n\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\n if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\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\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}\n\n// TODO: Add more comments\n\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 = _objectWithoutProperties(_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\n return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","var _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\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\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/*\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}\n\n// createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\nexport function createConnect() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$connectHOC = _ref.connectHOC,\n connectHOC = _ref$connectHOC === undefined ? connectAdvanced : _ref$connectHOC,\n _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n mapStateToPropsFactories = _ref$mapStateToPropsF === undefined ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n mapDispatchToPropsFactories = _ref$mapDispatchToPro === undefined ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n _ref$mergePropsFactor = _ref.mergePropsFactories,\n mergePropsFactories = _ref$mergePropsFactor === undefined ? defaultMergePropsFactories : _ref$mergePropsFactor,\n _ref$selectorFactory = _ref.selectorFactory,\n selectorFactory = _ref$selectorFactory === undefined ? defaultSelectorFactory : _ref$selectorFactory;\n\n return function connect(mapStateToProps, mapDispatchToProps, mergeProps) {\n var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref2$pure = _ref2.pure,\n pure = _ref2$pure === undefined ? true : _ref2$pure,\n _ref2$areStatesEqual = _ref2.areStatesEqual,\n areStatesEqual = _ref2$areStatesEqual === undefined ? strictEqual : _ref2$areStatesEqual,\n _ref2$areOwnPropsEqua = _ref2.areOwnPropsEqual,\n areOwnPropsEqual = _ref2$areOwnPropsEqua === undefined ? shallowEqual : _ref2$areOwnPropsEqua,\n _ref2$areStatePropsEq = _ref2.areStatePropsEqual,\n areStatePropsEqual = _ref2$areStatePropsEq === undefined ? shallowEqual : _ref2$areStatePropsEq,\n _ref2$areMergedPropsE = _ref2.areMergedPropsEqual,\n areMergedPropsEqual = _ref2$areMergedPropsE === undefined ? shallowEqual : _ref2$areMergedPropsE,\n extraOptions = _objectWithoutProperties(_ref2, ['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\n return connectHOC(selectorFactory, _extends({\n // used in error messages\n methodName: 'connect',\n\n // used to compute Connect's displayName from the wrapped component's displayName.\n getDisplayName: function getDisplayName(name) {\n return 'Connect(' + name + ')';\n },\n\n // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n shouldHandleStateChanges: Boolean(mapStateToProps),\n\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\n }, extraOptions));\n };\n}\n\nexport default createConnect();","import Provider from './components/Provider';\nimport connectAdvanced from './components/connectAdvanced';\nimport connect from './connect/connect';\n\nexport { Provider, connectAdvanced, connect };","/**\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\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 validateFormat = function validateFormat(format) {};\n\nif (process.env.NODE_ENV !== 'production') {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n 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 * 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\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\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 warning = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n var printWarning = function printWarning(format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + 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 warning(condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.indexOf('Failed Composite propType: ') === 0) {\n return; // Ignore CompositeComponent proptype check.\n }\n\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;","'use strict';\n\nvar React = require('react'),\n PropTypes = require('prop-types'),\n withSideEffect = require('react-side-effect');\n\nfunction reducePropsToState(propsList) {\n var innermostProps = propsList[propsList.length - 1];\n if (innermostProps) {\n return innermostProps.title;\n }\n}\n\nfunction handleStateChangeOnClient(title) {\n var nextTitle = title || '';\n if (nextTitle !== document.title) {\n document.title = nextTitle;\n }\n}\n\nfunction DocumentTitle() {}\nDocumentTitle.prototype = Object.create(React.Component.prototype);\n\nDocumentTitle.displayName = 'DocumentTitle';\nDocumentTitle.propTypes = {\n title: PropTypes.string.isRequired\n};\n\nDocumentTitle.prototype.render = function() {\n if (this.props.children) {\n return React.Children.only(this.props.children);\n } else {\n return null;\n }\n};\n\nmodule.exports = withSideEffect(\n reducePropsToState,\n handleStateChangeOnClient\n)(DocumentTitle);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n'use strict';\n\n/**\n * WARNING: DO NOT manually require this module.\n * This is a replacement for `invariant(...)` used by the error code system\n * and will _only_ be required by the corresponding babel pass.\n * It always throws.\n */\n\nfunction reactProdInvariant(code) {\n var argCount = arguments.length - 1;\n\n var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;\n\n for (var argIdx = 0; argIdx < argCount; argIdx++) {\n message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);\n }\n\n message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';\n\n var error = new Error(message);\n error.name = 'Invariant Violation';\n error.framesToPop = 1; // we don't care about reactProdInvariant's own frame\n\n throw error;\n}\n\nmodule.exports = reactProdInvariant;","/*!\n Copyright (c) 2017 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) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\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","/*\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","/**\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 * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactDOMComponentFlags = require('./ReactDOMComponentFlags');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar Flags = ReactDOMComponentFlags;\n\nvar internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);\n\n/**\n * Drill down (through composites and empty components) until we get a host or\n * host text component.\n *\n * This is pretty polymorphic but unavoidable with the current structure we have\n * for `_renderedChildren`.\n */\nfunction getRenderedHostOrTextFromComponent(component) {\n var rendered;\n while (rendered = component._renderedComponent) {\n component = rendered;\n }\n return component;\n}\n\n/**\n * Populate `_hostNode` on the rendered host/text component with the given\n * DOM node. The passed `inst` can be a composite.\n */\nfunction precacheNode(inst, node) {\n var hostInst = getRenderedHostOrTextFromComponent(inst);\n hostInst._hostNode = node;\n node[internalInstanceKey] = hostInst;\n}\n\nfunction uncacheNode(inst) {\n var node = inst._hostNode;\n if (node) {\n delete node[internalInstanceKey];\n inst._hostNode = null;\n }\n}\n\n/**\n * Populate `_hostNode` on each child of `inst`, assuming that the children\n * match up with the DOM (element) children of `node`.\n *\n * We cache entire levels at once to avoid an n^2 problem where we access the\n * children of a node sequentially and have to walk from the start to our target\n * node every time.\n *\n * Since we update `_renderedChildren` and the actual DOM at (slightly)\n * different times, we could race here and see a newer `_renderedChildren` than\n * the DOM nodes we see. To avoid this, ReactMultiChild calls\n * `prepareToManageChildren` before we change `_renderedChildren`, at which\n * time the container's child nodes are always cached (until it unmounts).\n */\nfunction precacheChildNodes(inst, node) {\n if (inst._flags & Flags.hasCachedChildNodes) {\n return;\n }\n var children = inst._renderedChildren;\n var childNode = node.firstChild;\n outer: for (var name in children) {\n if (!children.hasOwnProperty(name)) {\n continue;\n }\n var childInst = children[name];\n var childID = getRenderedHostOrTextFromComponent(childInst)._domID;\n if (childID === 0) {\n // We're currently unmounting this child in ReactMultiChild; skip it.\n continue;\n }\n // We assume the child nodes are in the same order as the child instances.\n for (; childNode !== null; childNode = childNode.nextSibling) {\n if (childNode.nodeType === 1 && childNode.getAttribute(ATTR_NAME) === String(childID) || childNode.nodeType === 8 && childNode.nodeValue === ' react-text: ' + childID + ' ' || childNode.nodeType === 8 && childNode.nodeValue === ' react-empty: ' + childID + ' ') {\n precacheNode(childInst, childNode);\n continue outer;\n }\n }\n // We reached the end of the DOM children without finding an ID match.\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : _prodInvariant('32', childID) : void 0;\n }\n inst._flags |= Flags.hasCachedChildNodes;\n}\n\n/**\n * Given a DOM node, return the closest ReactDOMComponent or\n * ReactDOMTextComponent instance ancestor.\n */\nfunction getClosestInstanceFromNode(node) {\n if (node[internalInstanceKey]) {\n return node[internalInstanceKey];\n }\n\n // Walk up the tree until we find an ancestor whose instance we have cached.\n var parents = [];\n while (!node[internalInstanceKey]) {\n parents.push(node);\n if (node.parentNode) {\n node = node.parentNode;\n } else {\n // Top of the tree. This node must not be part of a React tree (or is\n // unmounted, potentially).\n return null;\n }\n }\n\n var closest;\n var inst;\n for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) {\n closest = inst;\n if (parents.length) {\n precacheChildNodes(inst, node);\n }\n }\n\n return closest;\n}\n\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\nfunction getInstanceFromNode(node) {\n var inst = getClosestInstanceFromNode(node);\n if (inst != null && inst._hostNode === node) {\n return inst;\n } else {\n return null;\n }\n}\n\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\nfunction getNodeFromInstance(inst) {\n // Without this first invariant, passing a non-DOM-component triggers the next\n // invariant for a missing parent, which is super confusing.\n !(inst._hostNode !== undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\n\n if (inst._hostNode) {\n return inst._hostNode;\n }\n\n // Walk up the tree until we find an ancestor whose DOM node we have cached.\n var parents = [];\n while (!inst._hostNode) {\n parents.push(inst);\n !inst._hostParent ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : _prodInvariant('34') : void 0;\n inst = inst._hostParent;\n }\n\n // Now parents contains each ancestor that does *not* have a cached native\n // node, and `inst` is the deepest ancestor that does.\n for (; parents.length; inst = parents.pop()) {\n precacheChildNodes(inst, inst._hostNode);\n }\n\n return inst._hostNode;\n}\n\nvar ReactDOMComponentTree = {\n getClosestInstanceFromNode: getClosestInstanceFromNode,\n getInstanceFromNode: getInstanceFromNode,\n getNodeFromInstance: getNodeFromInstance,\n precacheChildNodes: precacheChildNodes,\n precacheNode: precacheNode,\n uncacheNode: uncacheNode\n};\n\nmodule.exports = ReactDOMComponentTree;","'use strict';\n\nmodule.exports = require('./lib/ReactDOM');\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;","'use strict';\n\nvar YAMLException = require('./exception');\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new YAMLException('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new YAMLException('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nmodule.exports = Type;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _HotKeys = require('./HotKeys');\n\nObject.defineProperty(exports, 'HotKeys', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_HotKeys).default;\n }\n});\n\nvar _FocusTrap = require('./FocusTrap');\n\nObject.defineProperty(exports, 'FocusTrap', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_FocusTrap).default;\n }\n});\n\nvar _HotKeyMapMixin = require('./HotKeyMapMixin');\n\nObject.defineProperty(exports, 'HotKeyMapMixin', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_HotKeyMapMixin).default;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || nonIterableRest();\n}","//! moment.js\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 input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\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 input != null && Object.prototype.toString.call(input) === '[object Object]';\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 (obj.hasOwnProperty(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 typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n\n function map(arr, fn) {\n var res = [], i;\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\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 invalidMonth : null,\n invalidFormat : false,\n userInvalidated : false,\n iso : false,\n parsedDateParts : [],\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 var len = t.length >>> 0;\n\n for (var 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 var parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n var isNowValid = !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\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 = 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 }\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 }\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\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 var updateInProgress = false;\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 obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\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 // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if ((dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false &&\n (typeof console !== 'undefined') && console.warn) {\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 var arg;\n for (var i = 0; i < arguments.length; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (var key in arguments[0]) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\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 input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n function set (config) {\n var prop, i;\n for (i in config) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\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 '|' + (/\\d{1,2}/).source);\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig), prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\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, 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 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.replace(/MMMM|MM|DD|dddd/g, function (val) {\n return val.slice(1);\n });\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 var 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 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' ? aliases[units] || aliases[units.toLowerCase()] : 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 for (var u in unitsObj) {\n units.push({unit: u, priority: priorities[u]});\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\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 (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\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?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n var formatFunctions = {};\n\n var formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken (token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n\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), i, 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 = '', i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = 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(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var match1 = /\\d/; // 0 - 9\n var match2 = /\\d\\d/; // 00 - 99\n var match3 = /\\d{3}/; // 000 - 999\n var match4 = /\\d{4}/; // 0000 - 9999\n var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n var match1to2 = /\\d\\d?/; // 0 - 99\n var match3to4 = /\\d\\d\\d\\d?/; // 999 - 9999\n var match5to6 = /\\d\\d\\d\\d\\d\\d?/; // 99999 - 999999\n var match1to3 = /\\d{1,3}/; // 0 - 999\n var match1to4 = /\\d{1,4}/; // 0 - 9999\n var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n var matchUnsigned = /\\d+/; // 0 - inf\n var matchSigned = /[+-]?\\d+/; // -inf - inf\n\n var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\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 var 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\n var regexes = {};\n\n function addRegexToken (token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : 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(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\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, 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 var MONTH = 1;\n var DATE = 2;\n var HOUR = 3;\n var MINUTE = 4;\n var SECOND = 5;\n var MILLISECOND = 6;\n var WEEK = 7;\n var WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? '' + y : '+' + 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] = 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 function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear () {\n return isLeapYear(this.year());\n }\n\n function makeGetSet (unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get (mom, unit) {\n return mom.isValid() ?\n mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n }\n\n function set$1 (mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), 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\n function stringSet (units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units);\n for (var 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 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 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\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 MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n function localeMonths (m, format) {\n if (!m) {\n return isArray(this._months) ? this._months :\n this._months['standalone'];\n }\n return isArray(this._months) ? this._months[m.month()] :\n this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n function localeMonthsShort (m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort :\n this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i, ii, mom, llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\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('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth (mom, value) {\n var dayOfMonth;\n\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 var defaultMonthsShortRegex = matchWord;\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 : this._monthsShortRegex;\n }\n }\n\n var defaultMonthsRegex = matchWord;\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 : this._monthsRegex;\n }\n }\n\n function computeMonthsParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [], longPieces = [], mixedPieces = [],\n i, 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('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\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;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n var 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, 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, 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 (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek (mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\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 function localeWeekdays (m, format) {\n var weekdays = isArray(this._weekdays) ? this._weekdays :\n this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];\n return (m === true) ? shiftWeekdays(weekdays, this._week.dow)\n : (m) ? weekdays[m.day()] : weekdays;\n }\n\n var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n function localeWeekdaysShort (m) {\n return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n\n var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n function localeWeekdaysMin (m) {\n return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i, ii, mom, 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(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').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('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\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 var defaultWeekdaysRegex = matchWord;\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 : this._weekdaysRegex;\n }\n }\n\n var defaultWeekdaysShortRegex = matchWord;\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 : this._weekdaysShortRegex;\n }\n }\n\n var defaultWeekdaysMinRegex = matchWord;\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 : this._weekdaysMinRegex;\n }\n }\n\n\n function computeWeekdaysParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom, minp, shortp, 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 = this.weekdaysMin(mom, '');\n shortp = this.weekdaysShort(mom, '');\n longp = 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 for (i = 0; i < 7; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\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('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\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 '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\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 '' + this.hours() + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n function meridiem (token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n\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 var 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 var 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 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\n // MOMENTS\n\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 var getSetHour = makeGetSet('Hours', true);\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 var localeFamilies = {};\n var globalLocale;\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, j, next, locale, 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 (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null;\n // TODO: Find a better way to register and load all the locales in Node\n if (!locales[name] && (typeof module !== 'undefined') &&\n module && module.exports) {\n try {\n oldLocale = globalLocale._abbr;\n var aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {}\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 }\n else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n }\n else {\n if ((typeof console !== 'undefined') && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale (name, config) {\n if (config !== null) {\n var locale, parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple('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 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\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, tmpLocale, parentConfig = baseConfig;\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\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 } 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 var a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :\n a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :\n a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :\n a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n -1;\n\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\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 [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray (config) {\n var i, date, input = [], currentDate, expectedWeekday, 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 (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\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] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\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(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n var 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 // 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 var 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\n var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n var 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 // YYYYMM is NOT allowed by the standard\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/]\n ];\n\n // iso time formats and regexes\n var 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\n var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n // date from iso format\n function configFromISO(config) {\n var i, l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime, dateFormat, timeFormat, 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 // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n var 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\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\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.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n var 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 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 var m = hm % 100, 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 if (match) {\n var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\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 iso format or fallback\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n\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 // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\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 and will be removed in an upcoming major release. Please refer to ' +\n '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 // 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, parsedInput, tokens, token, skipped,\n stringLength = string.length,\n totalParsedInputLength = 0;\n\n tokens = 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)) || [])[0];\n // console.log('token', token, 'parsedInput', parsedInput,\n // 'regex', getParseRegexForToken(token, config));\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n }\n else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n }\n else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0) {\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(config._locale, config._a[HOUR], config._meridiem);\n\n configFromArray(config);\n checkOverflow(config);\n }\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\n scoreToBeat,\n i,\n currentScore;\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 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 continue;\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 (scoreToBeat == null || currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\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 config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\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 (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if ((isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\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\n var 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 = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n function isDurationValid(m) {\n for (var key in m) {\n if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n\n var unitHasDecimal = false;\n for (var 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 = +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 +\n 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 +\n quarters * 3 +\n 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 // FORMATTING\n\n function offset (token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset();\n var sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n });\n }\n\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\n if (matches === null) {\n return null;\n }\n\n var chunk = matches[matches.length - 1] || [];\n var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ?\n 0 :\n parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\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() / 15) * 15;\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset (input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\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 }\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\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() &&\n 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\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 var 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)) {\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) {// checks for null or undefined\n duration = {};\n } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\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 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 = other.month() - base.month() +\n (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(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val; val = period; period = tmp;\n }\n\n val = typeof val === 'string' ? +val : val;\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 var subtract = createAdder(-1, 'subtract');\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' :\n diff < -1 ? 'lastWeek' :\n diff < 0 ? 'lastDay' :\n diff < 1 ? 'sameDay' :\n diff < 2 ? 'nextDay' :\n diff < 7 ? 'nextWeek' : 'sameElse';\n }\n\n function calendar$1 (time, formats) {\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\n var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\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 (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\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 this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\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,\n zoneDelta,\n 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': output = monthDiff(this, that) / 12; break;\n case 'month': output = monthDiff(this, that); break;\n case 'quarter': output = monthDiff(this, that) / 3; break;\n case 'second': output = (this - that) / 1e3; break; // 1000\n case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default: output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff (a, b) {\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, 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 var m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect () {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment';\n var zone = '';\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n var prefix = '[' + func + '(\"]';\n var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n var suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format (inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({to: this, from: time}).locale(this.locale()).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 (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({from: this, to: time}).locale(this.locale()).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 var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n var 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;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var 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(this.year(), this.month() - this.month() % 3, 1);\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf (units) {\n var time;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var 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 = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\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 [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\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 // 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\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 (input, week, config, token) {\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(this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy);\n }\n\n function getSetISOWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n\n function getISOWeeksInYear () {\n return weeksInYear(this.year(), 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 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 ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ?\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 = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\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\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;\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 // MOMENTS\n\n var 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 proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\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.isoWeeksInYear = getISOWeeksInYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\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\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 var 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 var 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\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n var i;\n var out = [];\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 dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (toInt(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\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 var days = this._days;\n var months = this._months;\n var data = this._data;\n var seconds, minutes, hours, years, monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0))) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\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 var months;\n var 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': return months;\n case 'quarter': return months / 3;\n case 'year': 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' : return days / 7 + milliseconds / 6048e5;\n case 'day' : return days + milliseconds / 864e5;\n case 'hour' : return days * 24 + milliseconds / 36e5;\n case 'minute' : return days * 1440 + milliseconds / 6e4;\n case 'second' : return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n default: 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 var asSeconds = makeAs('s');\n var asMinutes = makeAs('m');\n var asHours = makeAs('h');\n var asDays = makeAs('d');\n var asWeeks = makeAs('w');\n var asMonths = makeAs('M');\n var asQuarters = makeAs('Q');\n var 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 var seconds = makeGetter('seconds');\n var minutes = makeGetter('minutes');\n var hours = makeGetter('hours');\n var days = makeGetter('days');\n var months = makeGetter('months');\n var years = makeGetter('years');\n\n function weeks () {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round;\n var 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\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, locale) {\n var duration = createDuration(posNegDuration).abs();\n var seconds = round(duration.as('s'));\n var minutes = round(duration.as('m'));\n var hours = round(duration.as('h'));\n var days = round(duration.as('d'));\n var months = round(duration.as('M'));\n var years = round(duration.as('y'));\n\n var a = 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 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 (withSuffix) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var locale = this.localeData();\n var output = relativeTime$1(this, !withSuffix, 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 var days = abs$1(this._days);\n var months = abs$1(this._months);\n var minutes, hours, years;\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\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n var Y = years;\n var M = months;\n var D = days;\n var h = hours;\n var m = minutes;\n var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n var total = this.asSeconds();\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 var totalSign = total < 0 ? '-' : '';\n var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return totalSign + 'P' +\n (Y ? ymSign + Y + 'Y' : '') +\n (M ? ymSign + M + 'M' : '') +\n (D ? daysSign + D + 'D' : '') +\n ((h || m || s) ? 'T' : '') +\n (h ? hmsSign + h + 'H' : '') +\n (m ? hmsSign + m + 'M' : '') +\n (s ? hmsSign + s + 'S' : '');\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('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang;\n\n // Side effect imports\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, 10) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n // Side effect imports\n\n\n hooks.version = '2.24.0';\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', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM' // \n };\n\n return hooks;\n\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\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;","\"use strict\";\n\nexports.__esModule = true;\nexports.message = exports.accessor = exports.disabled = exports.dateFormat = exports.numberFormat = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _elementType = _interopRequireDefault(require(\"prop-types-extra/lib/elementType\"));\n\nexports.elementType = _elementType.default;\n\nvar _createChainableTypeChecker = _interopRequireDefault(require(\"prop-types-extra/lib/utils/createChainableTypeChecker\"));\n\nvar _localizers = require(\"./localizers\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar numberFormat = (0, _createChainableTypeChecker.default)(function () {\n return _localizers.number.propType.apply(_localizers.number, arguments);\n});\nexports.numberFormat = numberFormat;\nvar dateFormat = (0, _createChainableTypeChecker.default)(function () {\n return _localizers.date.propType.apply(_localizers.date, arguments);\n});\nexports.dateFormat = dateFormat;\nvar disabled = (0, _createChainableTypeChecker.default)(function () {\n return _propTypes.default.bool.apply(_propTypes.default, arguments);\n});\nexports.disabled = disabled;\ndisabled.acceptsArray = _propTypes.default.oneOfType([disabled, _propTypes.default.array]);\n\nvar accessor = _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func]);\n\nexports.accessor = accessor;\n\nvar message = _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.string, _propTypes.default.func]);\n\nexports.message = message;","\"use strict\";\n\nexports.__esModule = true;\nexports.setNumber = setNumber;\nexports.setDate = setDate;\nexports.date = exports.number = void 0;\n\nvar _invariant = _interopRequireDefault(require(\"invariant\"));\n\nvar _ = require(\"./_\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar localePropType = _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func]);\n\nvar REQUIRED_NUMBER_FORMATS = ['default'];\nvar REQUIRED_DATE_FORMATS = ['default', 'date', 'time', 'header', 'footer', 'weekday', 'dayOfMonth', 'month', 'year', 'decade', 'century'];\n\nvar _numberLocalizer = createWrapper('NumberPicker');\n\nvar number = {\n propType: function propType() {\n var _numberLocalizer2;\n\n return (_numberLocalizer2 = _numberLocalizer).propType.apply(_numberLocalizer2, arguments);\n },\n getFormat: function getFormat(key, format) {\n return format || _numberLocalizer.formats[key];\n },\n parse: function parse() {\n var _numberLocalizer3;\n\n return (_numberLocalizer3 = _numberLocalizer).parse.apply(_numberLocalizer3, arguments);\n },\n format: function format() {\n var _numberLocalizer4;\n\n return (_numberLocalizer4 = _numberLocalizer).format.apply(_numberLocalizer4, arguments);\n },\n decimalChar: function decimalChar() {\n var _numberLocalizer5;\n\n return (_numberLocalizer5 = _numberLocalizer).decimalChar.apply(_numberLocalizer5, arguments);\n },\n precision: function precision() {\n var _numberLocalizer6;\n\n return (_numberLocalizer6 = _numberLocalizer).precision.apply(_numberLocalizer6, arguments);\n }\n};\nexports.number = number;\n\nfunction setNumber(_ref) {\n var format = _ref.format,\n _parse = _ref.parse,\n formats = _ref.formats,\n _ref$propType = _ref.propType,\n propType = _ref$propType === void 0 ? localePropType : _ref$propType,\n _ref$decimalChar = _ref.decimalChar,\n decimalChar = _ref$decimalChar === void 0 ? function () {\n return '.';\n } : _ref$decimalChar,\n _ref$precision = _ref.precision,\n precision = _ref$precision === void 0 ? function () {\n return null;\n } : _ref$precision;\n checkFormats(REQUIRED_NUMBER_FORMATS, formats);\n _numberLocalizer = {\n formats: formats,\n precision: precision,\n decimalChar: decimalChar,\n propType: propType,\n format: wrapFormat(format),\n parse: function parse(value, culture, format) {\n var result = _parse.call(this, value, culture, format);\n\n !(result == null || typeof result === 'number') ? process.env.NODE_ENV !== \"production\" ? (0, _invariant.default)(false, 'number localizer `parse(..)` must return a number, null, or undefined') : invariant(false) : void 0;\n return result;\n }\n };\n}\n\nvar _dateLocalizer = createWrapper('DateTimePicker');\n\nvar date = {\n propType: function propType() {\n var _dateLocalizer2;\n\n return (_dateLocalizer2 = _dateLocalizer).propType.apply(_dateLocalizer2, arguments);\n },\n getFormat: function getFormat(key, format) {\n return format || _dateLocalizer.formats[key];\n },\n parse: function parse() {\n var _dateLocalizer3;\n\n return (_dateLocalizer3 = _dateLocalizer).parse.apply(_dateLocalizer3, arguments);\n },\n format: function format() {\n var _dateLocalizer4;\n\n return (_dateLocalizer4 = _dateLocalizer).format.apply(_dateLocalizer4, arguments);\n },\n firstOfWeek: function firstOfWeek() {\n var _dateLocalizer5;\n\n return (_dateLocalizer5 = _dateLocalizer).firstOfWeek.apply(_dateLocalizer5, arguments);\n }\n};\nexports.date = date;\n\nfunction setDate(_ref2) {\n var formats = _ref2.formats,\n format = _ref2.format,\n _parse2 = _ref2.parse,\n firstOfWeek = _ref2.firstOfWeek,\n _ref2$propType = _ref2.propType,\n propType = _ref2$propType === void 0 ? localePropType : _ref2$propType;\n checkFormats(REQUIRED_DATE_FORMATS, formats);\n _dateLocalizer = {\n formats: formats,\n propType: propType,\n firstOfWeek: firstOfWeek,\n format: wrapFormat(format),\n parse: function parse(value, format, culture) {\n var result = _parse2.call(this, value, format, culture);\n\n !(result == null || result instanceof Date && !isNaN(result.getTime())) ? process.env.NODE_ENV !== \"production\" ? (0, _invariant.default)(false, 'date localizer `parse(..)` must return a valid Date, null, or undefined') : invariant(false) : void 0;\n return result;\n }\n };\n}\n\nvar wrapFormat = function wrapFormat(formatter) {\n return function (value, format, culture) {\n var result = typeof format === 'function' ? format(value, culture, this) : formatter.call(this, value, format, culture);\n !(result == null || typeof result === 'string') ? process.env.NODE_ENV !== \"production\" ? (0, _invariant.default)(false, '`localizer format(..)` must return a string, null, or undefined') : invariant(false) : void 0;\n return result;\n };\n};\n\nfunction checkFormats(required, formats) {\n if (process.env.NODE_ENV !== 'production') required.forEach(function (f) {\n return !(0, _.has)(formats, f) ? process.env.NODE_ENV !== \"production\" ? (0, _invariant.default)(false, 'localizer missing required format: `%s`', f) : invariant(false) : void 0;\n });\n}\n\nfunction createWrapper() {\n var dummy = {};\n\n if (process.env.NODE_ENV !== 'production') {\n ['formats', 'parse', 'format', 'firstOfWeek', 'precision', 'propType'].forEach(function (name) {\n return Object.defineProperty(dummy, name, {\n enumerable: true,\n get: function get() {\n throw new Error('[React Widgets] You are attempting to use a widget that requires localization ' + '(Calendar, DateTimePicker, NumberPicker). ' + 'However there is no localizer set. Please configure a localizer. \\n\\n' + 'see http://jquense.github.io/react-widgets/docs/#/i18n for more info.');\n }\n });\n });\n }\n\n return dummy;\n}","\"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 * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\n// Trust the developer to only use ReactInstrumentation with a __DEV__ check\n\nvar debugTool = null;\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactDebugTool = require('./ReactDebugTool');\n debugTool = ReactDebugTool;\n}\n\nmodule.exports = { debugTool: debugTool };","\"use strict\";\n\nexports.__esModule = true;\nexports.pick = pick;\nexports.pickElementProps = pickElementProps;\nexports.omitOwn = omitOwn;\nvar whitelist = ['style', 'className', 'role', 'id', 'autocomplete', 'size', 'tabIndex', 'maxLength', 'name'];\nvar whitelistRegex = [/^aria-/, /^data-/, /^on[A-Z]\\w+/];\n\nfunction pick(props, componentClass) {\n var keys = Object.keys(componentClass.propTypes);\n var result = {};\n Object.keys(props).forEach(function (key) {\n if (keys.indexOf(key) === -1) return;\n result[key] = props[key];\n });\n return result;\n}\n\nfunction pickElementProps(component) {\n for (var _len = arguments.length, others = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n others[_key - 1] = arguments[_key];\n }\n\n var props = omitOwn.apply(void 0, [component].concat(others));\n var result = {};\n Object.keys(props).forEach(function (key) {\n if (whitelist.indexOf(key) !== -1 || whitelistRegex.some(function (r) {\n return !!key.match(r);\n })) result[key] = props[key];\n });\n return result;\n}\n\nfunction omitOwn(component) {\n var initial = Object.keys(component.constructor.propTypes);\n\n for (var _len2 = arguments.length, others = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n others[_key2 - 1] = arguments[_key2];\n }\n\n var keys = others.reduce(function (arr, compClass) {\n return arr.concat(Object.keys(compClass.propTypes));\n }, initial);\n var result = {};\n Object.keys(component.props).forEach(function (key) {\n if (keys.indexOf(key) !== -1) return;\n result[key] = component.props[key];\n });\n return result;\n}","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\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.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n\n var gecko = /gecko\\/\\d/i.test(userAgent);\n var ie_upto10 = /MSIE \\d/.test(userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n var edge = /Edge\\/(\\d+)/.exec(userAgent);\n var ie = ie_upto10 || ie_11up || edge;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n var webkit = !edge && /WebKit\\//.test(userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n var chrome = !edge && /Chrome\\//.test(userAgent);\n var presto = /Opera\\//.test(userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n var phantom = /PhantomJS/.test(userAgent);\n\n var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\n var android = /Android/.test(userAgent);\n // This is woefully incomplete. Suggestions for alternative methods welcome.\n var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n var mac = ios || /Mac/.test(platform);\n var chromeOS = /\\bCrOS\\b/.test(userAgent);\n var windows = /win/i.test(platform);\n\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n if (presto_version) { presto_version = Number(presto_version[1]); }\n if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || (ie && ie_version >= 9);\n\n function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n var rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count)\n { e.removeChild(e.firstChild); }\n return e\n }\n\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e)\n }\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) { e.className = className; }\n if (style) { e.style.cssText = style; }\n if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n return e\n }\n // wrapper for elt, which removes the elt from the accessibility tree\n function eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e\n }\n\n var range;\n if (document.createRange) { range = function(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r\n }; }\n else { range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r\n }; }\n\n function contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n { child = child.parentNode; }\n if (parent.contains)\n { return parent.contains(child) }\n do {\n if (child.nodeType == 11) { child = child.host; }\n if (child == parent) { return true }\n } while (child = child.parentNode)\n }\n\n function activeElt() {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n try {\n activeElement = document.activeElement;\n } catch(e) {\n activeElement = document.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n { activeElement = activeElement.shadowRoot.activeElement; }\n return activeElement\n }\n\n function addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n }\n function joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n return b\n }\n\n var selectInput = function(node) { node.select(); };\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n else if (ie) // Suppress mysterious IE10 errors\n { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args)}\n }\n\n function copyObj(obj, target, overwrite) {\n if (!target) { target = {}; }\n for (var prop in obj)\n { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n { target[prop] = obj[prop]; } }\n return target\n }\n\n // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) { end = string.length; }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n { return n + (end - i) }\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n }\n\n var Delayed = function() {this.id = null;};\n Delayed.prototype.set = function (ms, f) {\n clearTimeout(this.id);\n this.id = setTimeout(f, ms);\n };\n\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i)\n { if (array[i] == elt) { return i } }\n return -1\n }\n\n // Number of pixels added to scroller and sizer to hide scrollbar\n var scrollerGap = 30;\n\n // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n // Reused option objects for setSelection & friends\n var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) { nextTab = string.length; }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n { return pos + Math.min(skipped, goal - col) }\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) { return pos }\n }\n }\n\n var spaceStrs = [\"\"];\n function spaceStr(n) {\n while (spaceStrs.length <= n)\n { spaceStrs.push(lst(spaceStrs) + \" \"); }\n return spaceStrs[n]\n }\n\n function lst(arr) { return arr[arr.length-1] }\n\n function map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n return out\n }\n\n function insertSorted(array, value, score) {\n var pos = 0, priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n array.splice(pos, 0, value);\n }\n\n function nothing() {}\n\n function createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) { copyObj(props, inst); }\n return inst\n }\n\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n }\n function isWordChar(ch, helper) {\n if (!helper) { return isWordCharBasic(ch) }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n return helper.test(ch)\n }\n\n function isEmpty(obj) {\n for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n return true\n }\n\n // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n return pos\n }\n\n // Returns the value from the range [`from`; `to`] that satisfies\n // `pred` and is closest to `from`. Assumes that at least `to`\n // satisfies `pred`. Supports `from` being greater than `to`.\n function findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n for (;;) {\n if (from == to) { return from }\n var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) { return pred(mid) ? from : to }\n if (pred(mid)) { to = mid; }\n else { from = mid + dir; }\n }\n }\n\n // BIDI HELPERS\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) { return f(from, to, \"ltr\", 0) }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n if (!found) { f(from, to, \"ltr\"); }\n }\n\n var bidiOther = null;\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) { return i }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") { found = i; }\n else { bidiOther = i; }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") { found = i; }\n else { bidiOther = i; }\n }\n }\n return found != null ? found : bidiOther\n }\n\n // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n var bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) { return lowTypes.charAt(code) }\n else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n else if (code == 0x200c) { return \"b\" }\n else { return \"L\" }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; this.to = to;\n }\n\n return function(str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n var len = str.length, types = [];\n for (var i = 0; i < len; ++i)\n { types.push(charType(str.charCodeAt(i))); }\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") { types[i$1] = prev; }\n else { prev = type; }\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n prev$1 = type$2;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") { types[i$4] = \"N\"; }\n else if (type$3 == \"%\") {\n var end = (void 0);\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) { types[j] = replace; }\n i$4 = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n else if (isStrong.test(type$4)) { cur$1 = type$4; }\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = (void 0);\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n i$6 = end$1 - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [], m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7, at = order.length;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n pos = j$2;\n } else { ++j$2; }\n }\n if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order\n }\n })();\n\n // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n function getOrder(line, direction) {\n var order = line.order;\n if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n return order\n }\n\n // EVENT HANDLING\n\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n var noHandlers = [];\n\n var on = function(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map$$1 = emitter._handlers || (emitter._handlers = {});\n map$$1[type] = (map$$1[type] || noHandlers).concat(f);\n }\n };\n\n function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers\n }\n\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1)\n { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n }\n }\n }\n\n function signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) { return }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n }\n\n // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore\n }\n\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) { return }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n { set.push(arr[i]); } }\n }\n\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0\n }\n\n // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n function eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n }\n\n // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n function e_preventDefault(e) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n function e_stopPropagation(e) {\n if (e.stopPropagation) { e.stopPropagation(); }\n else { e.cancelBubble = true; }\n }\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n }\n function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n function e_target(e) {return e.target || e.srcElement}\n function e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) { b = 1; }\n else if (e.button & 2) { b = 3; }\n else if (e.button & 4) { b = 2; }\n }\n if (mac && e.ctrlKey && b == 1) { b = 3; }\n return b\n }\n\n // Detect drag-and-drop\n var dragAndDrop = function() {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) { return false }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div\n }();\n\n var zwspSupported;\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node\n }\n\n // Feature-detect IE's crummy client rect reporting for bidi text\n var badBidiRects;\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) { return badBidiRects }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n return badBidiRects = (r1.right - r0.right < 3)\n }\n\n // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) { nl = string.length; }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result\n } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n var hasSelection = window.getSelection ? function (te) {\n try { return te.selectionStart != te.selectionEnd }\n catch(e) { return false }\n } : function (te) {\n var range$$1;\n try {range$$1 = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range$$1 || range$$1.parentElement() != te) { return false }\n return range$$1.compareEndPoints(\"StartToEnd\", range$$1) != 0\n };\n\n var hasCopyEvent = (function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) { return true }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\"\n })();\n\n var badZoomedRects = null;\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) { return badZoomedRects }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n }\n\n // Known modes, by name and by MIME\n var modes = {}, mimeModes = {};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n function defineMode(name, mode) {\n if (arguments.length > 2)\n { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n modes[name] = mode;\n }\n\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n }\n\n // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n function resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") { found = {name: found}; }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\")\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\")\n }\n if (typeof spec == \"string\") { return {name: spec} }\n else { return spec || {name: \"null\"} }\n }\n\n // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) { return getMode(options, \"text/plain\") }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) { continue }\n if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) { modeObj.helperType = spec.helperType; }\n if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n return modeObj\n }\n\n // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n var modeExtensions = {};\n function extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n copyObj(properties, exts);\n }\n\n function copyState(mode, state) {\n if (state === true) { return state }\n if (mode.copyState) { return mode.copyState(state) }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) { val = val.concat([]); }\n nstate[n] = val;\n }\n return nstate\n }\n\n // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n function innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) { break }\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state}\n }\n\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true\n }\n\n // STRING STREAM\n\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n var StringStream = function(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n };\n\n StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length)\n { return this.string.charAt(this.pos++) }\n };\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") { ok = ch == match; }\n else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n if (ok) {++this.pos; return ch}\n };\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start\n };\n StringStream.prototype.eatSpace = function () {\n var this$1 = this;\n\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; }\n return this.pos > start\n };\n StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true}\n };\n StringStream.prototype.backUp = function (n) {this.pos -= n;};\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) { this.pos += pattern.length; }\n return true\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) { return null }\n if (match && consume !== false) { this.pos += match[0].length; }\n return match\n }\n };\n StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try { return inner() }\n finally { this.lineStart -= n; }\n };\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n)\n };\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos)\n };\n\n // Find the line object corresponding to the given line number.\n function getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break }\n n -= sz;\n }\n }\n return chunk.lines[n]\n }\n\n // Get the part of a document between two positions, as an array of\n // strings.\n function getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) { text = text.slice(0, end.ch); }\n if (n == start.line) { text = text.slice(start.ch); }\n out.push(text);\n ++n;\n });\n return out\n }\n // Get the lines between from and to, as array of strings.\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n return out\n }\n\n // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n }\n\n // Given a line object, find its line number by walking up through\n // its parent links.\n function lineNo(line) {\n if (line.parent == null) { return null }\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) { break }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first\n }\n\n // Find the line at the given vertical position, using the height\n // information in the document tree.\n function lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1], ch = child.height;\n if (h < ch) { chunk = child; continue outer }\n h -= ch;\n n += child.chunkSize();\n }\n return n\n } while (!chunk.lines)\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) { break }\n h -= lh;\n }\n return n + i\n }\n\n function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber))\n }\n\n // A Pos instance represents a position within the text.\n function Pos(line, ch, sticky) {\n if ( sticky === void 0 ) sticky = null;\n\n if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n }\n\n // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n function copyPos(x) {return Pos(x.line, x.ch)}\n function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n function clipPos(doc, pos) {\n if (pos.line < doc.first) { return Pos(doc.first, 0) }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n return clipToLen(pos, getLine(doc, pos.line).text.length)\n }\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n else if (ch < 0) { return Pos(pos.line, 0) }\n else { return pos }\n }\n function clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n return out\n }\n\n var SavedContext = function(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n\n var Context = function(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n };\n\n Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n return line\n };\n\n Context.prototype.baseToken = function (n) {\n var this$1 = this;\n\n if (!this.baseTokens) { return null }\n while (this.baseTokens[this.baseTokenPos] <= n)\n { this$1.baseTokenPos += 2; }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n}\n };\n\n Context.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n };\n\n Context.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext)\n { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n else\n { return new Context(doc, copyState(doc.mode, saved), line) }\n };\n\n Context.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n };\n\n\n // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n function highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function ( o ) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n { st.splice(i, 1, end, st[i+1], i_end); }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) { return }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start+1];\n st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n }\n\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n if (resetState) { context.state = resetState; }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) { line.styleClasses = result.classes; }\n else if (line.styleClasses) { line.styleClasses = null; }\n if (updateFrontier === cm.doc.highlightFrontier)\n { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n }\n return line.styles\n }\n\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) { return new Context(doc, true, n) }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) { doc.modeFrontier = context.line; }\n return context\n }\n\n // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n function processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") { callBlankLine(mode, context.state); }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n\n function callBlankLine(mode, state) {\n if (mode.blankLine) { return mode.blankLine(state) }\n if (!mode.innerMode) { return }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) { inner[0] = innerMode(mode, state).mode; }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) { return style }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n }\n\n var Token = function(stream, type, state) {\n this.start = stream.start; this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n };\n\n // Utility for getTokenAt and getLineTokens\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n if (asArray) { tokens = []; }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n }\n return asArray ? tokens : new Token(stream, style, context.state)\n }\n\n function extractLineClasses(type, output) {\n if (type) { for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) { break }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null)\n { output[prop] = lineClass[2]; }\n else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n { output[prop] += \" \" + lineClass[2]; }\n } }\n return type\n }\n\n // Run the given mode's parser over a line, calling f for each token.\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n }\n\n // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n function findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) { return doc.first }\n var line = getLine(doc, search - 1), after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n { return search }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline\n }\n\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) { return }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n }\n\n // Optimize some code when these features are not used.\n var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n }\n\n // TEXTMARKER SPANS\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n }\n\n // Search an array of spans for a span matching the given marker.\n function getMarkedSpanFor(spans, marker) {\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) { return span }\n } }\n }\n // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n function removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i)\n { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n return r\n }\n // Add a span to a line.\n function addMarkedSpan(line, span) {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n span.marker.attachLine(line);\n }\n\n // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n } }\n return nw\n }\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n span.to == null ? null : span.to - endCh));\n }\n } }\n return nw\n }\n\n // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n function stretchSpansOverChange(doc, change) {\n if (change.full) { return null }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) { return null }\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) { span.to = startCh; }\n else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) { span$1.to += offset; }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n } else {\n span$1.from += offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) { first = clearEmptySpans(first); }\n if (last && last != first) { last = clearEmptySpans(last); }\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\n if (gap > 0 && first)\n { for (var i$2 = 0; i$2 < first.length; ++i$2)\n { if (first[i$2].to == null)\n { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n for (var i$3 = 0; i$3 < gap; ++i$3)\n { newMarkers.push(gapMarkers); }\n newMarkers.push(last);\n }\n return newMarkers\n }\n\n // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n { spans.splice(i--, 1); }\n }\n if (!spans.length) { return null }\n return spans\n }\n\n // Used to 'clip' out readOnly ranges when making a change.\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n { (markers || (markers = [])).push(mark); }\n } }\n });\n if (!markers) { return null }\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n { newParts.push({from: p.from, to: m.from}); }\n if (dto > 0 || !mk.inclusiveRight && !dto)\n { newParts.push({from: m.to, to: p.to}); }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts\n }\n\n // Connect or disconnect spans from a line.\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.detachLine(line); }\n line.markedSpans = null;\n }\n function attachMarkedSpans(line, spans) {\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.attachLine(line); }\n line.markedSpans = spans;\n }\n\n // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) { return lenDiff }\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) { return -fromCmp }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) { return toCmp }\n return b.id - a.id\n }\n\n // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n { found = sp.marker; }\n } }\n return found\n }\n function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n } }\n return found\n }\n\n // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {\n var line = getLine(doc, lineNo$$1);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n { return true }\n } }\n }\n\n // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n function visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n { line = merged.find(-1, true).line; }\n return line\n }\n\n function visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return line\n }\n\n // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n function visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line\n ;(lines || (lines = [])).push(line);\n }\n return lines\n }\n\n // Get the line number of the start of the visual line that the\n // given line number is part of.\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) { return lineN }\n return lineNo(vis)\n }\n\n // Get the line number of the start of the next visual line after\n // the given line.\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) { return lineN }\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) { return lineN }\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return lineNo(line) + 1\n }\n\n // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n if (sp.from == null) { return true }\n if (sp.marker.widgetNode) { continue }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n { return true }\n } }\n }\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n }\n if (span.marker.inclusiveRight && span.to == line.text.length)\n { return true }\n for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) { return true }\n }\n }\n\n // Find the height above the given line.\n function heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) { break }\n else { h += line.height; }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) { break }\n else { h += cur.height; }\n }\n }\n return h\n }\n\n // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n function lineLength(line) {\n if (line.height == 0) { return 0 }\n var len = line.text.length, merged, cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n return len\n }\n\n // Find the longest line in the document.\n function findMaxLine(cm) {\n var d = cm.display, doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n }\n\n // LINE DATA STRUCTURE\n\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n var Line = function(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n\n Line.prototype.lineNo = function () { return lineNo(this) };\n eventMixin(Line);\n\n // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n if (line.order != null) { line.order = null; }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n }\n\n // Detach a line from the document tree and its markers.\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n }\n\n // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n var styleToClassCache = {}, styleToClassCacheWithMode = {};\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) { return null }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n }\n\n // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n col: 0, pos: 0, cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n if (line.styleClasses.textClass)\n { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\n if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n { builder.content.className = \"cm-tab-wrap-hack\"; }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n return builder\n }\n\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token\n }\n\n // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) { return }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars, mustWrap = false;\n var content;\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) { mustWrap = true; }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n else { content.appendChild(txt); }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) { break }\n pos += skipped + 1;\n var txt$1 = (void 0);\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n else { content.appendChild(txt$1); }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css) {\n var fullStyle = style || \"\";\n if (startStyle) { fullStyle += startStyle; }\n if (endStyle) { fullStyle += endStyle; }\n var token = elt(\"span\", [content], fullStyle, css);\n if (attributes) {\n for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n { token.setAttribute(attr, attributes[attr]); } }\n }\n return builder.content.appendChild(token)\n }\n builder.content.appendChild(content);\n }\n\n // Change some spaces to NBSP to prevent the browser from collapsing\n // trailing spaces at the end of a line when rendering text (issue #1362).\n function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) { return text }\n var spaceBefore = trailingBefore, result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n { ch = \"\\u00a0\"; }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result\n }\n\n // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n function buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, css, attributes) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = (void 0);\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) { break }\n }\n if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n }\n }\n\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget)\n { widget = builder.content.appendChild(document.createElement(\"span\")); }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n }\n\n // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n return\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [], endStyles = (void 0);\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n if (m.className) { spanStyle += \" \" + m.className; }\n if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n if (m.title) { (attributes || (attributes = {})).title = m.title; }\n if (m.attributes) {\n for (var attr in m.attributes)\n { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n { collapsed = sp; }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) { return }\n if (collapsed.to == pos) { collapsed = false; }\n }\n }\n if (pos >= len) { break }\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n }\n\n\n // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n }\n\n // Create a range of LineView objects for the given lines.\n function buildViewArray(cm, from, to) {\n var array = [], nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array\n }\n\n var operationGroup = null;\n\n function pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n }\n\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks, i = 0;\n do {\n for (; i < callbacks.length; i++)\n { callbacks[i].call(null); }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n }\n } while (i < callbacks.length)\n }\n\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) { return }\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n endCb(group);\n }\n }\n\n var orphanDelayedCallbacks = null;\n\n // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n function signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) { return }\n var args = Array.prototype.slice.call(arguments, 2), list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n var loop = function ( i ) {\n list.push(function () { return arr[i].apply(null, args); });\n };\n\n for (var i = 0; i < arr.length; ++i)\n loop( i );\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n }\n\n // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") { updateLineText(cm, lineView); }\n else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n else if (type == \"class\") { updateLineClasses(cm, lineView); }\n else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n }\n lineView.changes = null;\n }\n\n // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n }\n return lineView.node\n }\n\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) { cls += \" CodeMirror-linebackground\"; }\n if (lineView.background) {\n if (cls) { lineView.background.className = cls; }\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n }\n\n // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built\n }\n return buildLineContent(cm, lineView)\n }\n\n // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) { lineView.node = built.pre; }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n\n function updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n if (lineView.line.wrapClass)\n { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n else if (lineView.node != lineView.text)\n { lineView.node.className = \"\"; }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n if (lineView.line.gutterClass)\n { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n { lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n } }\n }\n }\n\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) { lineView.alignable = null; }\n for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n next = node.nextSibling;\n if (node.className == \"CodeMirror-linewidget\")\n { lineView.node.removeChild(node); }\n }\n insertLineWidgets(cm, lineView, dims);\n }\n\n // Build a line's DOM representation from scratch\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) { lineView.bgClass = built.bgClass; }\n if (built.textClass) { lineView.textClass = built.textClass; }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node\n }\n\n // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n }\n\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) { return }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\");\n if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above)\n { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n else\n { wrap.appendChild(node); }\n signalLater(widget, \"redraw\");\n }\n }\n\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n }\n }\n\n function widgetHeight(widget) {\n if (widget.height != null) { return widget.height }\n var cm = widget.doc.cm;\n if (!cm) { return 0 }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n if (widget.noHScroll)\n { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight\n }\n\n // Return true when the given mouse event happened in a widget\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n (n.parentNode == display.sizer && n != display.mover))\n { return true }\n }\n }\n\n // POSITION MEASUREMENT\n\n function paddingTop(display) {return display.lineSpace.offsetTop}\n function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n function paddingH(display) {\n if (display.cachedPaddingH) { return display.cachedPaddingH }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n return data\n }\n\n function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n }\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n }\n\n // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n }\n\n // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n for (var i = 0; i < lineView.rest.length; i++)\n { if (lineView.rest[i] == line)\n { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n { if (lineNo(lineView.rest[i$1]) > lineN)\n { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n }\n\n // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view\n }\n\n // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n }\n\n // Find a line view that corresponds to the given line number.\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n { return cm.display.view[findViewIndex(cm, lineN)] }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n { return ext }\n }\n\n // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n if (!view)\n { view = updateExternalMeasurement(cm, line); }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n }\n }\n\n // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) { ch = -1; }\n var key = ch + (bias || \"\"), found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect)\n { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) { prepared.cache[key] = found; }\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom}\n }\n\n var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n function nodeAndOffsetInLineMap(map$$1, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map$$1.length; i += 3) {\n mStart = map$$1[i];\n mEnd = map$$1[i + 1];\n if (ch < mStart) {\n start = 0; end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) { collapse = \"right\"; }\n }\n if (start != null) {\n node = map$$1[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n { collapse = bias; }\n if (bias == \"left\" && start == 0)\n { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {\n node = map$$1[(i -= 3) + 2];\n collapse = \"left\";\n } }\n if (bias == \"right\" && start == mEnd - mStart)\n { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {\n node = map$$1[(i += 3) + 2];\n collapse = \"right\";\n } }\n break\n }\n }\n return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n }\n\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) { break }\n } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) { break }\n } }\n return rect\n }\n\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n { rect = node.parentNode.getBoundingClientRect(); }\n else\n { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n if (rect.left || rect.right || start == 0) { break }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) { collapse = bias = \"right\"; }\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n else\n { rect = node.getBoundingClientRect(); }\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n else\n { rect = nullRect; }\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++)\n { if (mid < heights[i]) { break } }\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) { result.bogus = true; }\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result\n }\n\n // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n { return rect }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { lineView.measure.caches[i] = {}; } }\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n { clearLineMeasurementCacheFor(cm.display.view[i]); }\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n cm.display.lineNumChars = null;\n }\n\n function pageScrollX() {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n }\n function pageScrollY() {\n if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n return window.pageYOffset || (document.documentElement || document.body).scrollTop\n }\n\n function widgetTopHeight(lineObj) {\n var height = 0;\n if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n { height += widgetHeight(lineObj.widgets[i]); } } }\n return height\n }\n\n // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n // or \"page\".\n function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height; rect.bottom += height;\n }\n if (context == \"line\") { return rect }\n if (!context) { context = \"local\"; }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") { yOff += paddingTop(cm.display); }\n else { yOff -= cm.display.viewOffset; }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n rect.left += xOff; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect\n }\n\n // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") { return coords }\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX();\n top -= pageScrollY();\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n }\n\n function charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n }\n\n // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n // and after `char - 1` in writing order of `char - 1`\n // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n // and before `char` in writing order of `char`\n // Examples (upper-case letters are RTL, lower-case are LTR):\n // Pos(0, 1, ...)\n // before after\n // ab a|b a|b\n // aB a|B aB|\n // Ab |Ab A|b\n // AB B|A B|A\n // Every position after the last character on a line is considered to stick\n // to the last character on the line.\n function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) { m.left = m.right; } else { m.right = m.left; }\n return intoCoordSystem(cm, lineObj, m, context)\n }\n var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos], right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert)\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n return val\n }\n\n // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height}\n }\n\n // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) { pos.outside = outside; }\n return pos\n }\n\n // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n function coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n if (x < 0) { x = 0; }\n\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n if (!collapsed) { return found }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) { return rangeEnd }\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n return {begin: begin, end: end}\n }\n\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n }\n\n // Returns true if the given side of a box is after the given\n // coordinates, in top-to-bottom, left-to-right order.\n function boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n }\n\n function coordsCharInner(cm, lineObj, lineNo$$1, x, y) {\n // Move y into line-local coordinate space\n y -= heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight$$1 = widgetTopHeight(lineObj);\n var begin = 0, end = lineObj.text.length, ltr = true;\n\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\n // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n var chAround = null, boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight$$1; box.bottom += widgetHeight$$1;\n if (!boxIsAfter(box, x, y, false)) { return false }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true\n }, begin, end);\n\n var baseX, sticky, outside = false;\n // If a box around the coordinates was found, use that\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) { ch++; }\n // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ?\n \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), \"line\", lineObj, preparedMeasure);\n baseX = coords.left;\n outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX)\n }\n\n function coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i], ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n \"line\", lineObj, preparedMeasure), x, y, true)\n }, 0, order.length - 1);\n var part = order[index];\n // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y)\n { part = order[index - 1]; }\n }\n return part\n }\n\n function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n var part = null, closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) { continue }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) { part = order[order.length - 1]; }\n // Clip the part to the wrapped line.\n if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n return part\n }\n\n var measureText;\n // Compute the default text height.\n function textHeight(display) {\n if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n if (measureText == null) {\n measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) { display.cachedTextHeight = height; }\n removeChildren(display.measure);\n return height || 1\n }\n\n // Compute the default character width.\n function charWidth(display) {\n if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n if (width > 2) { display.cachedCharWidth = width; }\n return width || 10\n }\n\n // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n function getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n var id = cm.display.gutterSpecs[i].className;\n left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[id] = n.clientWidth;\n }\n return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth}\n }\n\n // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n }\n\n // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n function estimateHeight(cm) {\n var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) { return 0 }\n\n var widgetsHeight = 0;\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n } }\n\n if (wrapping)\n { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n else\n { return widgetsHeight + th }\n }\n }\n\n function estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n });\n }\n\n // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e) { return null }\n var coords = coordsChar(cm, x, y), line;\n if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords\n }\n\n // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) { return null }\n n -= cm.display.viewFrom;\n if (n < 0) { return null }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) { return i }\n }\n }\n\n // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n function regChange(cm, from, to, lendiff) {\n if (from == null) { from = cm.doc.first; }\n if (to == null) { to = cm.doc.first + cm.doc.size; }\n if (!lendiff) { lendiff = 0; }\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n { display.updateLineNumbers = from; }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n { resetView(cm); }\n } else if (to <= display.viewFrom) { // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) { // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN)\n { ext.lineN += lendiff; }\n else if (from < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n }\n }\n\n // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n\n if (line < display.viewFrom || line >= display.viewTo) { return }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) { return }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) { arr.push(type); }\n }\n\n // Clear the view.\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n { return {index: index, lineN: newN} }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++)\n { n += view[i].size; }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) { return null }\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN}\n }\n\n // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n function adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from)\n { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n else if (display.viewFrom < from)\n { display.view = display.view.slice(findViewIndex(cm, from)); }\n display.viewFrom = from;\n if (display.viewTo < to)\n { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n else if (display.viewTo > to)\n { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n }\n display.viewTo = to;\n }\n\n // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n function countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n }\n return dirty\n }\n\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n\n function prepareSelection(cm, primary) {\n if ( primary === void 0 ) primary = true;\n\n var doc = cm.doc, result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) { continue }\n var range$$1 = doc.sel.ranges[i];\n if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }\n var collapsed = range$$1.empty();\n if (collapsed || cm.options.showCursorWhenSelecting)\n { drawSelectionCursor(cm, range$$1.head, curFragment); }\n if (!collapsed)\n { drawSelectionRange(cm, range$$1, selFragment); }\n }\n return result\n }\n\n // Draws a cursor for the given range\n function drawSelectionCursor(cm, head, output) {\n var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n\n function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n // Draws the given range as a highlighted selection\n function drawSelectionRange(cm, range$$1, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) { top = 0; }\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\")));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop]\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n var first = i == 0, last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) { // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else { // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n if (cmpCoords(toPos, start) < 0) { start = toPos; }\n if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n if (cmpCoords(toPos, end) < 0) { end = toPos; }\n });\n return {start: start, end: end}\n }\n\n var sFrom = range$$1.from(), sTo = range$$1.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top)\n { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n }\n\n output.appendChild(fragment);\n }\n\n // Cursor-blinking\n function restartBlink(cm) {\n if (!cm.state.focused) { return }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\"; },\n cm.options.cursorBlinkRate); }\n else if (cm.options.cursorBlinkRate < 0)\n { display.cursorDiv.style.visibility = \"hidden\"; }\n }\n\n function ensureFocus(cm) {\n if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }\n }\n\n function delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n onBlur(cm);\n } }, 100);\n }\n\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }\n\n if (cm.options.readOnly == \"nocursor\") { return }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n }\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n }\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) { return }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n }\n\n // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], wrapping = cm.options.lineWrapping;\n var height = (void 0), width = 0;\n if (cur.hidden) { continue }\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n // Check that lines don't extend past the right of the current\n // editor width\n if (!wrapping && cur.text.firstChild)\n { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n }\n var diff = cur.line.height - height;\n if (diff > .005 || diff < -.005) {\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n { updateWidgetHeight(cur.rest[j]); } }\n }\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\n if (chWidth > cm.display.maxLineLength) {\n cm.display.maxLineLength = chWidth;\n cm.display.maxLine = cur.line;\n cm.display.maxLineChanged = true;\n }\n }\n }\n }\n\n // Read and store the height of line widgets associated with the\n // given line.\n function updateWidgetHeight(line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i], parent = w.node.parentNode;\n if (parent) { w.height = parent.offsetHeight; }\n } }\n }\n\n // Compute the lines that are visible in a given viewport (defaults\n // the the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {from: from, to: Math.max(to, from + 1)}\n }\n\n // SCROLLING THINGS INTO VIEW\n\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n if (rect.top + box.top < 0) { doScroll = true; }\n else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n }\n\n // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) { margin = 0; }\n var rect;\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n }\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n }\n if (!changed) { break }\n }\n return rect\n }\n\n // Scroll a given set of coordinates into view (immediately).\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n }\n\n // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n function calculateScrollPos(cm, rect) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (rect.top < 0) { rect.top = 0; }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n if (newTop != screentop) { result.scrollTop = newTop; }\n }\n\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);\n var tooWide = rect.right - rect.left > screenw;\n if (tooWide) { rect.right = rect.left + screenw; }\n if (rect.left < 10)\n { result.scrollLeft = 0; }\n else if (rect.left < screenleft)\n { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); }\n else if (rect.right > screenw + screenleft - 3)\n { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n return result\n }\n\n // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n function addToScrollTop(cm, top) {\n if (top == null) { return }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n }\n\n // Make sure that at the end of the operation the current cursor is\n // shown.\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n }\n\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) { resolveScrollToPos(cm); }\n if (x != null) { cm.curOp.scrollLeft = x; }\n if (y != null) { cm.curOp.scrollTop = y; }\n }\n\n function scrollToRange(cm, range$$1) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range$$1;\n }\n\n // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n function resolveScrollToPos(cm) {\n var range$$1 = cm.curOp.scrollToPos;\n if (range$$1) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to);\n scrollToCoordsRange(cm, from, to, range$$1.margin);\n }\n }\n\n function scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n }\n\n // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n setScrollTop(cm, val, true);\n if (gecko) { updateDisplaySimple(cm); }\n startWorker(cm, 100);\n }\n\n function setScrollTop(cm, val, forceScroll) {\n val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val);\n if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n }\n\n // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n cm.display.scrollbars.setScrollLeft(val);\n }\n\n // SCROLLBARS\n\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n function measureForScrollbars(cm) {\n var d = cm.display, gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n }\n }\n\n var NativeScrollbars = function(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert); place(horiz);\n\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n });\n\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n };\n\n NativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width =\n Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) { this.zeroWidthHack(); }\n this.checkedZeroWidth = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n };\n\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n };\n\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n };\n\n NativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n this.disableHoriz = new Delayed;\n this.disableVert = new Delayed;\n };\n\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.pointerEvents = \"auto\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt$$1 = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt$$1 != bar) { bar.style.pointerEvents = \"none\"; }\n else { delay.set(1000, maybeDisable); }\n }\n delay.set(1000, maybeDisable);\n };\n\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n\n var NullScrollbars = function () {};\n\n NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n NullScrollbars.prototype.setScrollLeft = function () {};\n NullScrollbars.prototype.setScrollTop = function () {};\n NullScrollbars.prototype.clear = function () {};\n\n function updateScrollbars(cm, measure) {\n if (!measure) { measure = measureForScrollbars(cm); }\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n { updateHeightsInViewport(cm); }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n }\n\n // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else { d.scrollbarFiller.style.display = \"\"; }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else { d.gutterFiller.style.display = \"\"; }\n }\n\n var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n else { updateScrollTop(cm, pos); }\n }, cm);\n if (cm.display.scrollbars.addClass)\n { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n var nextOpId = 0;\n // Start a new operation.\n function startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: 0, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId // Unique ID\n };\n pushOperation(cm.curOp);\n }\n\n // Finish an operation, updating the display and signalling delayed events\n function endOperation(cm) {\n var op = cm.curOp;\n if (op) { finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++)\n { group.ops[i].cm.curOp = null; }\n endOperations(group);\n }); }\n }\n\n // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n function endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n { endOperation_R1(ops[i]); }\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n { endOperation_W1(ops[i$1]); }\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n { endOperation_R2(ops[i$2]); }\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n { endOperation_W2(ops[i$3]); }\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n { endOperation_finish(ops[i$4]); }\n }\n\n function endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) { findMaxLine(cm); }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n }\n\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n\n function endOperation_R2(op) {\n var cm = op.cm, display = cm.display;\n if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth =\n Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged)\n { op.preparedSelection = display.input.prepareSelection(); }\n }\n\n function endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft)\n { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt();\n if (op.preparedSelection)\n { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n { updateScrollbars(cm, op.barMeasure); }\n if (op.updatedDisplay)\n { setDocumentHeight(cm, op.barMeasure); }\n\n if (op.selectionChanged) { restartBlink(cm); }\n\n if (cm.state.focused && op.updateInput)\n { cm.display.input.reset(op.typing); }\n if (takeFocus) { ensureFocus(op.cm); }\n }\n\n function endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n { display.wheelStartX = display.wheelStartY = null; }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) { for (var i = 0; i < hidden.length; ++i)\n { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n if (display.wrapper.offsetHeight)\n { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n { signal(cm, \"changes\", cm, op.changeObjs); }\n if (op.update)\n { op.update.finish(); }\n }\n\n // Run the given function in an operation\n function runInOp(cm, f) {\n if (cm.curOp) { return f() }\n startOperation(cm);\n try { return f() }\n finally { endOperation(cm); }\n }\n // Wraps a function in an operation. Returns the wrapped function.\n function operation(cm, f) {\n return function() {\n if (cm.curOp) { return f.apply(cm, arguments) }\n startOperation(cm);\n try { return f.apply(cm, arguments) }\n finally { endOperation(cm); }\n }\n }\n // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n function methodOp(f) {\n return function() {\n if (this.curOp) { return f.apply(this, arguments) }\n startOperation(this);\n try { return f.apply(this, arguments) }\n finally { endOperation(this); }\n }\n }\n function docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) { return f.apply(this, arguments) }\n startOperation(cm);\n try { return f.apply(this, arguments) }\n finally { endOperation(cm); }\n }\n }\n\n // HIGHLIGHT WORKER\n\n function startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo)\n { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n }\n\n function highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) { return }\n var end = +new Date + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) { // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) { context.state = resetState; }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) { line.styleClasses = newCls; }\n else if (oldCls) { line.styleClasses = null; }\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n if (ischange) { changedLines.push(context.line); }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength)\n { processLine(cm, line.text, context); }\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n if (+new Date > end) {\n startWorker(cm, cm.options.workDelay);\n return true\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n if (changedLines.length) { runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++)\n { regLineChange(cm, changedLines[i], \"text\"); }\n }); }\n }\n\n // DISPLAY DRAWING\n\n var DisplayUpdate = function(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n };\n\n DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type))\n { this.events.push(arguments); }\n };\n DisplayUpdate.prototype.finish = function () {\n var this$1 = this;\n\n for (var i = 0; i < this.events.length; i++)\n { signal.apply(null, this$1.events[i]); }\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n\n function selectionSnapshot(cm) {\n if (cm.hasFocus()) { return null }\n var active = activeElt();\n if (!active || !contains(cm.display.lineDiv, active)) { return null }\n var result = {activeElt: active};\n if (window.getSelection) {\n var sel = window.getSelection();\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n return result\n }\n\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n snapshot.activeElt.focus();\n if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var sel = window.getSelection(), range$$1 = document.createRange();\n range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range$$1.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range$$1);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n }\n\n // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n { return false }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n { return false }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n\n return true\n }\n\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null)\n { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n { break }\n }\n if (!updateDisplayIfNeeded(cm, update)) { break }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n }\n\n // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n { node.style.display = \"none\"; }\n else\n { node.parentNode.removeChild(node); }\n return next\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) { cur = rm(cur); }\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) { cur = rm(cur); }\n }\n\n function updateGutterSpace(display) {\n var width = display.gutters.offsetWidth;\n display.sizer.style.marginLeft = width + \"px\";\n }\n\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n }\n\n // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n function alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter)\n { view[i].gutter.style.left = left; }\n if (view[i].gutterBackground)\n { view[i].gutterBackground.style.left = left; }\n }\n var align = view[i].alignable;\n if (align) { for (var j = 0; j < align.length; j++)\n { align[j].style.left = left; } }\n } }\n if (cm.options.fixedGutter)\n { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n }\n\n // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) { return false }\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm.display);\n return true\n }\n return false\n }\n\n function getGutters(gutters, lineNumbers) {\n var result = [], sawLineNumbers = false;\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i], style = null;\n if (typeof name != \"string\") { style = name.style; name = name.className; }\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) { continue }\n else { sawLineNumbers = true; }\n }\n result.push({className: name, style: style});\n }\n if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n return result\n }\n\n // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n function renderGutters(display) {\n var gutters = display.gutters, specs = display.gutterSpecs;\n removeChildren(gutters);\n display.lineGutter = null;\n for (var i = 0; i < specs.length; ++i) {\n var ref = specs[i];\n var className = ref.className;\n var style = ref.style;\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n if (style) { gElt.style.cssText = style; }\n if (className == \"CodeMirror-linenumbers\") {\n display.lineGutter = gElt;\n gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = specs.length ? \"\" : \"none\";\n updateGutterSpace(display);\n }\n\n function updateGutters(cm) {\n renderGutters(cm.display);\n regChange(cm);\n alignHorizontally(cm);\n }\n\n // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n function Display(place, doc, input, options) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n if (place) {\n if (place.appendChild) { place.appendChild(d.wrapper); }\n else { place(d.wrapper); }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n\n d.activeTouch = null;\n\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\n\n input.init(d);\n }\n\n // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n var wheelSamples = 0, wheelPixelsPerUnit = null;\n // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n if (ie) { wheelPixelsPerUnit = -.53; }\n else if (gecko) { wheelPixelsPerUnit = 15; }\n else if (chrome) { wheelPixelsPerUnit = -.7; }\n else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n else if (dy == null) { dy = e.wheelDelta; }\n return {x: dx, y: dy}\n }\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta\n }\n\n function onScrollWheel(cm, e) {\n var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n if (dy && canScrollY)\n { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n if (!dy || (dy && canScrollY))\n { e_preventDefault(e); }\n display.wheelStartX = null; // Abort measurement, if in progress\n return\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && wheelPixelsPerUnit != null) {\n var pixels = dy * wheelPixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) { return }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) { return }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\n }\n\n // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n var Selection = function(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n\n Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n Selection.prototype.equals = function (other) {\n var this$1 = this;\n\n if (other == this) { return true }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this$1.ranges[i], there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n }\n return true\n };\n\n Selection.prototype.deepCopy = function () {\n var this$1 = this;\n\n var out = [];\n for (var i = 0; i < this.ranges.length; i++)\n { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); }\n return new Selection(out, this.primIndex)\n };\n\n Selection.prototype.somethingSelected = function () {\n var this$1 = this;\n\n for (var i = 0; i < this.ranges.length; i++)\n { if (!this$1.ranges[i].empty()) { return true } }\n return false\n };\n\n Selection.prototype.contains = function (pos, end) {\n var this$1 = this;\n\n if (!end) { end = pos; }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this$1.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n { return i }\n }\n return -1\n };\n\n var Range = function(anchor, head) {\n this.anchor = anchor; this.head = head;\n };\n\n Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) { --primIndex; }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex)\n }\n\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0)\n }\n\n // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n function changeEnd(change) {\n if (!change.text) { return change.to }\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n }\n\n // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) { return pos }\n if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n return Pos(line, ch)\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change),\n adjustForChange(range.head, change)));\n }\n return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n }\n\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line)\n { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n else\n { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n }\n\n // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex)\n }\n\n // Used to get the editor into a consistent state again when options change.\n\n function loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n\n function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) { regChange(cm); }\n }\n\n // DOCUMENT DATA STRUCTURE\n\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n }\n\n // Perform a change on the document data structure.\n function updateDoc(doc, change, markedSpans, estimateHeight$$1) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight$$1);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i)\n { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); }\n return result\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) { doc.remove(from.line, nlines); }\n if (added.length) { doc.insert(from.line, added); }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n }\n\n // Call f for all linked documents.\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) { continue }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) { continue }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n } }\n }\n propagate(doc, null, true);\n }\n\n // Attach a document to an editor.\n function attachDoc(cm, doc) {\n if (doc.cm) { throw new Error(\"This document is already in use.\") }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n if (!cm.options.lineWrapping) { findMaxLine(cm); }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n\n function History(startGen) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = []; this.undone = [];\n this.undoDepth = Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = startGen || 1;\n }\n\n // Create a history change event from an updateDoc-style change\n // object.\n function historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n return histChange\n }\n\n // Pop all selection events off the end of a history array. Stop at\n // a change event.\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) { array.pop(); }\n else { break }\n }\n }\n\n // Find the top change event in the history. Pop off selection\n // events that are in the way.\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done)\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done)\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done)\n }\n }\n\n // Register a change in the history. Merges changes that are within\n // a single operation, or are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n var last;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges)\n { pushSelectionToHistory(doc.sel, hist.done); }\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) { hist.done.shift(); }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) { signal(doc, \"historyAdded\"); }\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n }\n\n // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n { hist.done[hist.done.length - 1] = sel; }\n else\n { pushSelectionToHistory(sel, hist.done); }\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n { clearSelectionEvents(hist.undone); }\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n { dest.push(sel); }\n }\n\n // Used to store marked span information in the history.\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans)\n { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n ++n;\n });\n }\n\n // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n function removeClearedSpans(spans) {\n if (!spans) { return null }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n else if (out) { out.push(spans[i]); }\n }\n return !out ? spans : out.length ? out : null\n }\n\n // Retrieve and filter the old marked spans stored in a change event.\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) { return null }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i)\n { nw.push(removeClearedSpans(found[i])); }\n return nw\n }\n\n // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) { return stretched }\n if (!stretched) { return old }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n { if (oldCur[k].marker == span.marker) { continue spans } }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old\n }\n\n // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m = (void 0);\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n } } }\n }\n }\n return copy\n }\n\n // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != (cmp(other, anchor) < 0)) {\n anchor = head;\n head = other;\n } else if (posBefore != (cmp(head, other) < 0)) {\n head = other;\n }\n }\n return new Range(anchor, head)\n } else {\n return new Range(other || head, head)\n }\n }\n\n // Extend the primary selection range, discard the rest.\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n }\n\n // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++)\n { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n }\n\n // Updates a single range in the selection.\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n }\n\n // Reset the selection to a single range.\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n }\n\n // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n var this$1 = this;\n\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head)); }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n else { return sel }\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n }\n\n // Set a new selection.\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n { sel = filterSelectionChange(doc, sel, options); }\n\n var bias = options && options.bias ||\n (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm)\n { ensureCursorVisible(doc.cm); }\n }\n\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) { return }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = 1;\n doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n }\n\n // Verify that the selection does not partially select any atomic\n // marked ranges.\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n }\n\n // Return a selection that does not partially select any atomic\n // ranges.\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) { out = sel.ranges.slice(0, i); }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n }\n\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n\n // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n // is with selectLeft/Right\n var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) { break }\n else {--i; continue}\n }\n }\n if (!m.atomic) { continue }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n if (dir < 0 ? preventCursorRight : preventCursorLeft)\n { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? preventCursorLeft : preventCursorRight)\n { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n }\n } }\n return pos\n }\n\n // Ensure a given position is not inside an atomic range.\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0)\n }\n return found\n }\n\n function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n else { return null }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n else { return null }\n } else {\n return new Pos(pos.line, pos.ch + dir)\n }\n }\n\n function selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n }\n\n // UPDATING\n\n // Allow \"beforeChange\" event handlers to influence a change\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function () { return obj.canceled = true; }\n };\n if (update) { obj.update = function (from, to, text, origin) {\n if (from) { obj.from = clipPos(doc, from); }\n if (to) { obj.to = clipPos(doc, to); }\n if (text) { obj.text = text; }\n if (origin !== undefined) { obj.origin = origin; }\n }; }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n if (obj.canceled) {\n if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n return null\n }\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n }\n\n // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n if (doc.cm.state.suppressEdits) { return }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) { return }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n } else {\n makeChangeInner(doc, change);\n }\n }\n\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n }\n\n // Revert a change stored in a document's history.\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n if (suppress && !allowSelectionOnly) { return }\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n { break }\n }\n if (i == source.length) { return }\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return\n } else { break }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function ( i ) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {}\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop( i$1 );\n\n if ( returned ) return returned.v;\n }\n }\n\n // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n function shiftDoc(doc, distance) {\n if (distance == 0) { return }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch)\n ); }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n { regLineChange(doc.cm, l, \"gutter\"); }\n }\n }\n\n // More lower-level change function, handling only a single document\n // (not linked ones).\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp)\n { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return\n }\n if (change.from.line > doc.lastLine()) { return }\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n else { updateDoc(doc, change, spans); }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n { doc.cantEdit = false; }\n }\n\n // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1)\n { signalCursorActivity(cm); }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full)\n { regChange(cm); }\n else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n { regLineChange(cm, from.line, \"text\"); }\n else\n { regChange(cm, from.line, to.line + 1, lendiff); }\n\n var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n }\n cm.display.selForContextMenu = null;\n }\n\n function replaceRange(doc, code, from, to, origin) {\n var assign;\n\n if (!to) { to = from; }\n if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n if (typeof code == \"string\") { code = doc.splitLines(code); }\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n }\n\n // Rebasing/resetting history to deal with externally-sourced changes\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n }\n\n // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n\n function rebaseHist(hist, change) {\n var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n }\n\n // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n function changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n else { no = lineNo(handle); }\n if (no == null) { return null }\n if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n return line\n }\n\n // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n function LeafChunk(lines) {\n var this$1 = this;\n\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this$1;\n height += lines[i].height;\n }\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function() { return this.lines.length },\n\n // Remove the n lines at offset 'at'.\n removeInner: function(at, n) {\n var this$1 = this;\n\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this$1.lines[i];\n this$1.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n\n // Helper used to collapse a small branch into a single leaf.\n collapse: function(lines) {\n lines.push.apply(lines, this.lines);\n },\n\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function(at, lines, height) {\n var this$1 = this;\n\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; }\n },\n\n // Used to iterate over a part of the tree.\n iterN: function(at, n, op) {\n var this$1 = this;\n\n for (var e = at + n; at < e; ++at)\n { if (op(this$1.lines[at])) { return true } }\n }\n };\n\n function BranchChunk(children) {\n var this$1 = this;\n\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this$1;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function() { return this.size },\n\n removeInner: function(at, n) {\n var this$1 = this;\n\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this$1.height -= oldHeight - child.height;\n if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n\n collapse: function(lines) {\n var this$1 = this;\n\n for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }\n },\n\n insertInner: function(at, lines, height) {\n var this$1 = this;\n\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this$1.children.splice(++i, 0, leaf);\n leaf.parent = this$1;\n }\n child.lines = child.lines.slice(0, remaining);\n this$1.maybeSpill();\n }\n break\n }\n at -= sz;\n }\n },\n\n // When a node has grown, check whether it should be split.\n maybeSpill: function() {\n if (this.children.length <= 10) { return }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10)\n me.parent.maybeSpill();\n },\n\n iterN: function(at, n, op) {\n var this$1 = this;\n\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) { return true }\n if ((n -= used) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n }\n };\n\n // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function(doc, node, options) {\n var this$1 = this;\n\n if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n { this$1[opt] = options[opt]; } } }\n this.doc = doc;\n this.node = node;\n };\n\n LineWidget.prototype.clear = function () {\n var this$1 = this;\n\n var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) { return }\n for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } }\n if (!ws.length) { line.widgets = null; }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n };\n\n LineWidget.prototype.changed = function () {\n var this$1 = this;\n\n var oldH = this.height, cm = this.doc.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) { return }\n if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n eventMixin(LineWidget);\n\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n { addToScrollTop(cm, diff); }\n }\n\n function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) { widgets.push(widget); }\n else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) { addToScrollTop(cm, widget.height); }\n cm.curOp.forceUpdate = true;\n }\n return true\n });\n if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n return widget\n }\n\n // TEXTMARKERS\n\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n var nextMarkerId = 0;\n\n var TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n };\n\n // Clear the marker.\n TextMarker.prototype.clear = function () {\n var this$1 = this;\n\n if (this.explicitlyCleared) { return }\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) { startOperation(cm); }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) { signalLater(this, \"clear\", found.from, found.to); }\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this$1.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this$1);\n if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n else if (cm) {\n if (span.to != null) { max = lineNo(line); }\n if (span.from != null) { min = lineNo(line); }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)\n { updateLineHeight(line, textHeight(cm.display)); }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n } }\n\n if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) { reCheckSelection(cm.doc); }\n }\n if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n if (withOp) { endOperation(cm); }\n if (this.parent) { this.parent.clear(); }\n };\n\n // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n TextMarker.prototype.find = function (side, lineObj) {\n var this$1 = this;\n\n if (side == null && this.type == \"bookmark\") { side = 1; }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this$1.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this$1);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) { return from }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) { return to }\n }\n }\n return from && {from: from, to: to}\n };\n\n // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) { return }\n runInOp(cm, function () {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight)\n { updateLineHeight(line, line.height + dHeight); }\n }\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n };\n\n TextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n }\n this.lines.push(line);\n };\n\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp\n ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n eventMixin(TextMarker);\n\n // Create a marker, wire it up to the right lines, and\n function markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) { copyObj(options, marker, false); }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n { return marker }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory)\n { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n var curLine = from.line, cm = doc.cm, updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n { updateMaxLine = true; }\n if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null));\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n }); }\n\n if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length)\n { doc.clearHistory(); }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n if (marker.collapsed)\n { regChange(cm, from.line, to.line + 1); }\n else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n marker.attributes || marker.title)\n { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n if (marker.atomic) { reCheckSelection(cm.doc); }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker\n }\n\n // SHARED TEXTMARKERS\n\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n var SharedTextMarker = function(markers, primary) {\n var this$1 = this;\n\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n { markers[i].parent = this$1; }\n };\n\n SharedTextMarker.prototype.clear = function () {\n var this$1 = this;\n\n if (this.explicitlyCleared) { return }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n { this$1.markers[i].clear(); }\n signalLater(this, \"clear\");\n };\n\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj)\n };\n eventMixin(SharedTextMarker);\n\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) { options.widgetNode = widget.cloneNode(true); }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n { if (doc.linked[i].isParent) { return } }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary)\n }\n\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n var loop = function ( i ) {\n var marker = markers[i], linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) loop( i );\n }\n\n var nextDocId = 0;\n var Doc = function(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n if (firstLine == null) { firstLine = 0; }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") { text = this.splitLines(text); }\n updateDoc(this, {from: start, to: start, text: text});\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function(from, to, op) {\n if (op) { this.iterN(from - this.first, to - from, op); }\n else { this.iterN(this.first, this.first + this.size, from); }\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n getLineNumber: function(line) {return lineNo(line)},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") { line = getLine(this, line); }\n return visualLine(line)\n },\n\n lineCount: function() {return this.size},\n firstLine: function() {return this.first},\n lastLine: function() {return this.first + this.size - 1},\n\n clipPos: function(pos) {return clipPos(this, pos)},\n\n getCursor: function(start) {\n var range$$1 = this.sel.primary(), pos;\n if (start == null || start == \"head\") { pos = range$$1.head; }\n else if (start == \"anchor\") { pos = range$$1.anchor; }\n else if (start == \"end\" || start == \"to\" || start === false) { pos = range$$1.to(); }\n else { pos = range$$1.from(); }\n return pos\n },\n listSelections: function() { return this.sel.ranges },\n somethingSelected: function() {return this.sel.somethingSelected()},\n\n setCursor: docMethodOp(function(line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function(anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function(head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function(heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function(f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function(ranges, primary, options) {\n var this$1 = this;\n\n if (!ranges.length) { return }\n var out = [];\n for (var i = 0; i < ranges.length; i++)\n { out[i] = new Range(clipPos(this$1, ranges[i].anchor),\n clipPos(this$1, ranges[i].head)); }\n if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function(anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n\n getSelection: function(lineSep) {\n var this$1 = this;\n\n var ranges = this.sel.ranges, lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) { return lines }\n else { return lines.join(lineSep || this.lineSeparator()) }\n },\n getSelections: function(lineSep) {\n var this$1 = this;\n\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); }\n parts[i] = sel;\n }\n return parts\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n { dup[i] = code; }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var this$1 = this;\n\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range$$1 = sel.ranges[i];\n changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n { makeChange(this$1, changes[i$1]); }\n if (newSel) { setSelectionReplaceHistory(this, newSel); }\n else if (this.cm) { ensureCursorVisible(this.cm); }\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n return {undo: done, redo: undone}\n },\n clearHistory: function() {this.history = new History(this.history.maxGeneration);},\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n return this.history.generation\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration)\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)}\n },\n setHistory: function(histData) {\n var hist = this.history = new History(this.history.maxGeneration);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n\n setGutterMarker: docMethodOp(function(line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n return true\n })\n }),\n\n clearGutter: docMethodOp(function(gutterID) {\n var this$1 = this;\n\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n return true\n });\n }\n });\n }),\n\n lineInfo: function(line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) { return null }\n n = line;\n line = getLine(this, line);\n if (!line) { return null }\n } else {\n n = lineNo(line);\n if (n == null) { return null }\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n widgets: line.widgets}\n },\n\n addLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) { line[prop] = cls; }\n else if (classTest(cls).test(line[prop])) { return false }\n else { line[prop] += \" \" + cls; }\n return true\n })\n }),\n removeLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) { return false }\n else if (cls == null) { line[prop] = null; }\n else {\n var found = cur.match(classTest(cls));\n if (!found) { return false }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true\n })\n }),\n\n addLineWidget: docMethodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options)\n }),\n removeLineWidget: function(widget) { widget.clear(); },\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\")\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n { markers.push(span.marker.parent || span.marker); }\n } }\n return markers\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo$$1 = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) { for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to ||\n span.from == null && lineNo$$1 != from.line ||\n span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&\n (!filter || filter(span.marker)))\n { found.push(span.marker.parent || span.marker); }\n } }\n ++lineNo$$1;\n });\n return found\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i)\n { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n });\n return markers\n },\n\n posFromIndex: function(off) {\n var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) { ch = off; return true }\n off -= sz;\n ++lineNo$$1;\n });\n return clipPos(this, Pos(lineNo$$1, ch))\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) { return 0 }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size),\n this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc\n },\n\n linkedDoc: function(options) {\n if (!options) { options = {}; }\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) { from = options.from; }\n if (options.to != null && options.to < to) { to = options.to; }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) { copy.history = this.history\n ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy\n },\n unlinkDoc: function(other) {\n var this$1 = this;\n\n if (other instanceof CodeMirror) { other = other.doc; }\n if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n var link = this$1.linked[i];\n if (link.doc != other) { continue }\n this$1.linked.splice(i, 1);\n other.unlinkDoc(this$1);\n detachSharedMarkers(findSharedMarkers(this$1));\n break\n } }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode},\n getEditor: function() {return this.cm},\n\n splitLines: function(str) {\n if (this.lineSep) { return str.split(this.lineSep) }\n return splitLinesAuto(str)\n },\n lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") { dir = \"ltr\"; }\n if (dir == this.direction) { return }\n this.direction = dir;\n this.iter(function (line) { return line.order = null; });\n if (this.cm) { directionChanged(this.cm); }\n })\n });\n\n // Public alias.\n Doc.prototype.eachLine = Doc.prototype.iter;\n\n // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n { return }\n e_preventDefault(e);\n if (ie) { lastDrop = +new Date; }\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) { return }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var loadFile = function (file, i) {\n if (cm.options.allowDropFileTypes &&\n indexOf(cm.options.allowDropFileTypes, file.type) == -1)\n { return }\n\n var reader = new FileReader;\n reader.onload = operation(cm, function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) { content = \"\"; }\n text[i] = content;\n if (++read == n) {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos,\n text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),\n origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));\n }\n });\n reader.readAsText(file);\n };\n for (var i = 0; i < n; ++i) { loadFile(files[i], i); }\n } else { // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () { return cm.display.input.focus(); }, 20);\n return\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy)\n { selected = cm.listSelections(); }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n }\n catch(e){}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) { img.parentNode.removeChild(img); }\n }\n }\n\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) { return }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n }\n\n function clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n }\n\n // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) { return }\n var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) { editors.push(cm); }\n }\n if (editors.length) { editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n }); }\n }\n\n var globalsRegistered = false;\n function ensureGlobalHandlers() {\n if (globalsRegistered) { return }\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100); }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n }\n // Called when the window resizes\n function onResize(cm) {\n var d = cm.display;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n var keyNames = {\n 3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n 106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n };\n\n // Number keys\n for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n // Alphabetic keys\n for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n // Function keys\n for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n var keyMap = {};\n\n keyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n };\n // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n };\n // Very basic readline/emacs-style bindings, which are standard on Mac.\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { name = \"Alt-\" + name; }\n if (ctrl) { name = \"Ctrl-\" + name; }\n if (cmd) { name = \"Cmd-\" + name; }\n if (shift) { name = \"Shift-\" + name; }\n return name\n }\n\n // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n function normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n if (value == \"...\") { delete keymap[keyname]; continue }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = (void 0), name = (void 0);\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) { copy[name] = val; }\n else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n }\n delete keymap[keyname];\n } }\n for (var prop in copy) { keymap[prop] = copy[prop]; }\n return keymap\n }\n\n function lookupKey(key, map$$1, handle, context) {\n map$$1 = getKeyMap(map$$1);\n var found = map$$1.call ? map$$1.call(key, context) : map$$1[key];\n if (found === false) { return \"nothing\" }\n if (found === \"...\") { return \"multi\" }\n if (found != null && handle(found)) { return \"handled\" }\n\n if (map$$1.fallthrough) {\n if (Object.prototype.toString.call(map$$1.fallthrough) != \"[object Array]\")\n { return lookupKey(key, map$$1.fallthrough, handle, context) }\n for (var i = 0; i < map$$1.fallthrough.length; i++) {\n var result = lookupKey(key, map$$1.fallthrough[i], handle, context);\n if (result) { return result }\n }\n }\n }\n\n // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n function isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n }\n\n function addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") { name = \"Cmd-\" + name; }\n if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n return name\n }\n\n // Look up the name of a key as indicated by an event object.\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) { return false }\n // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n if (event.keyCode == 3 && event.code) { name = event.code; }\n return addModifierNames(name, event, noShift)\n }\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val\n }\n\n // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n ensureCursorVisible(cm);\n });\n }\n\n function moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target\n }\n\n function moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n }\n\n function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n var order = getOrder(lineObj, cm.doc.direction);\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = (dir < 0) == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch;\n // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n } else { ch = dir < 0 ? part.to : part.from; }\n return new Pos(lineNo, ch, sticky)\n }\n }\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n }\n\n function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) { return moveLogically(line, start, dir) }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir)\n }\n\n var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch)\n };\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = (part.level == 1) == (dir < 0);\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky)\n }\n }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n ? new Pos(start.line, mv(ch, 1), \"before\")\n : new Pos(start.line, ch, \"after\"); };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = (dir > 0) == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) { return res }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) { return res }\n }\n\n // Case 4: Nowhere to move\n return null\n }\n\n // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n var commands = {\n selectAll: selectAll,\n singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n else\n { return {from: range.head, to: Pos(range.head.line, len)} }\n } else {\n return {from: range.from(), to: range.to()}\n }\n }); },\n deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n }); }); },\n delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0), to: range.from()\n }); }); },\n delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()}\n }); },\n delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos }\n }); },\n undo: function (cm) { return cm.undo(); },\n redo: function (cm) { return cm.redo(); },\n undoSelection: function (cm) { return cm.undoSelection(); },\n redoSelection: function (cm) { return cm.redoSelection(); },\n goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1}\n ); },\n goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n }, sel_move); },\n goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\")\n }, sel_move); },\n goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n return pos\n }, sel_move); },\n goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n delCharBefore: function (cm) { return cm.deleteH(-1, \"char\"); },\n delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n insertSoftTab: function (cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n else { cm.execCommand(\"insertTab\"); }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) { return runInOp(cm, function () {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) { continue }\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n }); },\n newlineAndIndent: function (cm) { return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--)\n { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++)\n { cm.indentLine(sels[i$1].from().line, null, true); }\n ensureCursorVisible(cm);\n }); },\n openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n };\n\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, visual, lineN, 1)\n }\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, line, lineN, -1)\n }\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(0, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n }\n return start\n }\n\n // Run a handler that was bound to a key.\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) { return false }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift, done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n if (dropShift) { cm.display.shift = false; }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done\n }\n\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) { return result }\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm)\n }\n\n // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n var stopSeq = new Delayed;\n\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) { return \"handled\" }\n if (/\\'$/.test(name))\n { cm.state.keySeq = null; }\n else\n { stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n }); }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n }\n return dispatchKeyInner(cm, name, e, handle)\n }\n\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\")\n { cm.state.keySeq = name; }\n if (result == \"handled\")\n { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result\n }\n\n // Handle a key from the keydown event.\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) { return false }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n { return doHandleBinding(cm, b) }\n })\n } else {\n return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n }\n }\n\n // Handle a key from the keypress event\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n }\n\n var lastStoppedKey = null;\n function onKeyDown(e) {\n var cm = this;\n cm.curOp.focus = activeElt();\n if (signalDOMEvent(cm, e)) { return }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n { cm.replaceSelection(\"\", null, \"cut\"); }\n }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n { showCrossHair(cm); }\n }\n\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) { this.doc.sel.shift = false; }\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") { return }\n if (handleCharBinding(cm, e, ch)) { return }\n cm.display.input.onKeyPress(e);\n }\n\n var DOUBLECLICK_DELAY = 400;\n\n var PastClick = function(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time &&\n cmp(pos, this.pos) == 0 && button == this.button\n };\n\n var lastClick, lastDoubleClick;\n function clickRepeat(pos, button) {\n var now = +new Date;\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\"\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\"\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\"\n }\n }\n\n // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n function onMouseDown(e) {\n var cm = this, display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () { return display.scroller.draggable = true; }, 100);\n }\n return\n }\n if (clickInGutter(cm, e)) { return }\n var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n window.focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText)\n { cm.state.selectingText(e); }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n if (button == 1) {\n if (pos) { leftButtonDown(cm, pos, repeat, e); }\n else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n } else if (button == 2) {\n if (pos) { extendSelection(cm.doc, pos); }\n setTimeout(function () { return display.input.focus(); }, 20);\n } else if (button == 3) {\n if (captureRightClick) { cm.display.input.onContextMenu(e); }\n else { delayBlurEvent(cm); }\n }\n }\n\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") { name = \"Double\" + name; }\n else if (repeat == \"triple\") { name = \"Triple\" + name; }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") { bound = commands[bound]; }\n if (!bound) { return false }\n var done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done\n })\n }\n\n function configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n return value\n }\n\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n else { cm.curOp.focus = activeElt(); }\n\n var behavior = configureMouse(cm, repeat, event);\n\n var sel = cm.doc.sel, contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n { leftButtonStartDrag(cm, event, pos, behavior); }\n else\n { leftButtonSelect(cm, event, pos, behavior); }\n }\n\n // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display, moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) { display.scroller.draggable = false; }\n cm.state.draggingText = false;\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew)\n { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if (webkit || ie && ie_version == 9)\n { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); }\n else\n { display.input.focus(); }\n }\n });\n var mouseMove = function(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () { return moved = true; };\n // Let the drag handler handle this.\n if (webkit) { display.scroller.draggable = true; }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n // IE's approach to draggable\n if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n\n delayBlurEvent(cm);\n setTimeout(function () { return display.input.focus(); }, 20);\n }\n\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") { return new Range(pos, pos) }\n if (unit == \"word\") { return cm.findWordAt(pos) }\n if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n var result = unit(cm, pos);\n return new Range(result.from, result.to)\n }\n\n // Normal selection, as opposed to text dragging.\n function leftButtonSelect(cm, event, start, behavior) {\n var display = cm.display, doc = cm.doc;\n e_preventDefault(event);\n\n var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n if (ourIndex > -1)\n { ourRange = ranges[ourIndex]; }\n else\n { ourRange = new Range(start, start); }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) { ourRange = new Range(start, start); }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range$$1 = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend)\n { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); }\n else\n { ourRange = range$$1; }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n {scroll: false, origin: \"*mouse\"});\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n {scroll: false, origin: \"*mouse\"});\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) { return }\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [], tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n if (left == right)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n else if (text.length > leftPos)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n }\n if (!ranges.length) { ranges.push(new Range(start, start)); }\n setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range$$1 = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor, head;\n if (cmp(range$$1.anchor, anchor) > 0) {\n head = range$$1.head;\n anchor = minPos(oldRange.from(), range$$1.anchor);\n } else {\n head = range$$1.anchor;\n anchor = maxPos(oldRange.to(), range$$1.head);\n }\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) { return }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt();\n extendTo(cur);\n var visible = visibleLines(display, doc);\n if (cur.line >= visible.to || cur.line < visible.from)\n { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) { setTimeout(operation(cm, function () {\n if (counter != curCount) { return }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50); }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n // If e is null or undefined we interpret this as someone trying\n // to explicitly cancel the selection rather than the user\n // letting go of the mouse button.\n if (e) {\n e_preventDefault(e);\n display.input.focus();\n }\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) { done(e); }\n else { extend(e); }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n }\n\n // Used when mouse-selecting to adjust the anchor to the proper side\n // of a bidi jump depending on the visual position of the head.\n function bidiSimplify(cm, range$$1) {\n var anchor = range$$1.anchor;\n var head = range$$1.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 }\n var order = getOrder(anchorLine);\n if (!order) { return range$$1 }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 }\n var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) { return range$$1 }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n if (headIndex == boundary - 1 || headIndex == boundary)\n { leftSide = dir < 0; }\n else\n { leftSide = dir > 0; }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head)\n }\n\n\n // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try { mX = e.clientX; mY = e.clientY; }\n catch(e) { return false }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n if (prevent) { e_preventDefault(e); }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.display.gutterSpecs[i];\n signal(cm, type, cm, line, gutter.className, e);\n return e_defaultPrevented(e)\n }\n }\n }\n\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true)\n }\n\n // CONTEXT MENU HANDLING\n\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n return gutterEvent(cm, e, \"gutterContextMenu\", false)\n }\n\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n var defaults = {};\n var optionHandlers = {};\n\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) { optionHandlers[name] =\n notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n }\n\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) { return }\n var newBreaks = [], lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) { break }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\n });\n for (var i = newBreaks.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n if (old != Init) { cm.refresh(); }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n updateGutters(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) { prev.detach(cm, next); }\n if (next.attach) { next.attach(cm, prev || null); }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm, val) {\n cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n updateGutters(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm, val) {\n cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n updateGutters(cm);\n }, true);\n option(\"firstLineNumber\", 1, updateGutters, true);\n option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) { cm.display.input.resetPosition(); }\n });\n\n option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n option(\"phrases\", null);\n }\n\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n }\n\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () { return updateScrollbars(cm); }, 100);\n }\n\n // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n function CodeMirror(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n\n var doc = options.value;\n if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n else if (options.mode) { doc.modeOption = options.mode; }\n this.doc = doc;\n\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input, options);\n display.wrapper.CodeMirror = this;\n themeChanged(this);\n if (options.lineWrapping)\n { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null, // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) { display.input.focus(); }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if ((options.autofocus && !mobile) || this.hasFocus())\n { setTimeout(bind(onFocus, this), 20); }\n else\n { onBlur(this); }\n\n for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n { optionHandlers[opt](this$1, options[opt], Init); } }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) { options.finishInit(this); }\n for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n { display.lineDiv.style.textRendering = \"auto\"; }\n }\n\n // The default configuration options.\n CodeMirror.defaults = defaults;\n // Functions to run when options are changed.\n CodeMirror.optionHandlers = optionHandlers;\n\n // Attach the necessary event handlers when initializing the editor\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) { return }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n })); }\n else\n { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished, prevTouch = {end: 0};\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date;\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) { return false }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1\n }\n function farAway(touch, other) {\n if (other.left == null) { return true }\n var dx = other.left - touch.left, dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20\n }\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date;\n d.activeTouch = {start: now, moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null};\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) { d.activeTouch.moved = true; }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null &&\n !touch.moved && new Date - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n { range = new Range(pos, pos); }\n else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n { range = cm.findWordAt(pos); }\n else // Triple tap\n { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n d.dragFunctions = {\n enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n start: function (e) { return onDragStart(cm, e); },\n drop: operation(cm, onDrop),\n leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n };\n\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n }\n\n var initHooks = [];\n CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) { how = \"add\"; }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) { how = \"prev\"; }\n else { state = getContextBefore(cm, n).state; }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) { line.stateAfter = null; }\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) { return }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n else { indentation = 0; }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n line.stateAfter = null;\n return true\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break\n }\n }\n }\n }\n\n // This will be set to a {lineWise: bool, text: [string]} object, so\n // that, when pasting, we know what kind of selections the copied\n // text was made out of.\n var lastCopied = null;\n\n function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) { sel = doc.sel; }\n\n var recent = +new Date - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted), multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n for (var i = 0; i < lastCopied.text.length; i++)\n { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) { return [l]; });\n }\n }\n\n var updateInput = cm.curOp.updateInput;\n // Normal behavior is to insert the new text into every selection\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range$$1 = sel.ranges[i$1];\n var from = range$$1.from(), to = range$$1.to();\n if (range$$1.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n { from = Pos(from.line, from.ch - deleted); }\n else if (cm.state.overwrite && !paste) // Handle overwrite\n { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == inserted)\n { from = to = Pos(from.line, 0); }\n }\n var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste)\n { triggerElectric(cm, inserted); }\n\n ensureCursorVisible(cm);\n if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n }\n\n function handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput)\n { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n return true\n }\n }\n\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range$$1 = sel.ranges[i];\n if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }\n var mode = cm.getModeAt(range$$1.head);\n var indented = false;\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++)\n { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range$$1.head.line, \"smart\");\n break\n } }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))\n { indented = indentLine(cm, range$$1.head.line, \"smart\"); }\n }\n if (indented) { signalLater(cm, \"electricInput\", cm, range$$1.head.line); }\n }\n }\n\n function copyableRanges(cm) {\n var text = [], ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {text: text, ranges: ranges}\n }\n\n function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n }\n\n function hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) { te.style.width = \"1000px\"; }\n else { te.setAttribute(\"wrap\", \"off\"); }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) { te.style.border = \"1px solid black\"; }\n disableBrowserMagic(te);\n return div\n }\n\n // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n var helpers = CodeMirror.helpers = {};\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){window.focus(); this.display.input.focus();},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") { return }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n { operation(this, optionHandlers[option])(this, value, old); }\n signal(this, \"optionChange\", this, option);\n },\n\n getOption: function(option) {return this.options[option]},\n getDoc: function() {return this.doc},\n\n addKeyMap: function(map$$1, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map$$1));\n },\n removeKeyMap: function(map$$1) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i)\n { if (maps[i] == map$$1 || maps[i].name == map$$1) {\n maps.splice(i, 1);\n return true\n } }\n },\n\n addOverlay: methodOp(function(spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n insertSorted(this.state.overlays,\n {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n priority: (options && options.priority) || 0},\n function (overlay) { return overlay.priority; });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var this$1 = this;\n\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this$1.state.modeGen++;\n regChange(this$1);\n return\n }\n }\n }),\n\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n else { dir = dir ? \"add\" : \"subtract\"; }\n }\n if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n }),\n indentSelection: methodOp(function(how) {\n var this$1 = this;\n\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range$$1 = ranges[i];\n if (!range$$1.empty()) {\n var from = range$$1.from(), to = range$$1.to();\n var start = Math.max(end, from.line);\n end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j)\n { indentLine(this$1, j, how); }\n var newRanges = this$1.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n } else if (range$$1.head.line > end) {\n indentLine(this$1, range$$1.head.line, how, true);\n end = range$$1.head.line;\n if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); }\n }\n }\n }),\n\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function(pos, precise) {\n return takeToken(this, pos, precise)\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true)\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) { type = styles[2]; }\n else { for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n else { type = styles[mid * 2 + 2]; break }\n } }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) { return mode }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0]\n },\n\n getHelpers: function(pos, type) {\n var this$1 = this;\n\n var found = [];\n if (!helpers.hasOwnProperty(type)) { return found }\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) { found.push(help[mode[type]]); }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) { found.push(val); }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)\n { found.push(cur.val); }\n }\n return found\n },\n\n getStateAfter: function(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n return getContextBefore(this, line + 1, precise).state\n },\n\n cursorCoords: function(start, mode) {\n var pos, range$$1 = this.doc.sel.primary();\n if (start == null) { pos = range$$1.head; }\n else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n else { pos = start ? range$$1.from() : range$$1.to(); }\n return cursorCoords(this, pos, mode || \"page\")\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top)\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset)\n },\n heightAtLine: function(line, mode, includeWidgets) {\n var end = false, lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) { line = this.doc.first; }\n else if (line > last) { line = last; end = true; }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0)\n },\n\n defaultTextHeight: function() { return textHeight(this.display) },\n defaultCharWidth: function() { return charWidth(this.display) },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n { top = pos.top - node.offsetHeight; }\n else if (pos.bottom + node.offsetHeight <= vspace)\n { top = pos.bottom; }\n if (left + node.offsetWidth > hspace)\n { left = hspace - node.offsetWidth; }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") { left = 0; }\n else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n node.style.left = left + \"px\";\n }\n if (scroll)\n { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n { return commands[cmd].call(null, this) }\n },\n\n triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n findPosH: function(from, amount, unit, visually) {\n var this$1 = this;\n\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this$1.doc, cur, dir, unit, visually);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveH: methodOp(function(dir, unit) {\n var this$1 = this;\n\n this.extendSelectionsBy(function (range$$1) {\n if (this$1.display.shift || this$1.doc.extend || range$$1.empty())\n { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }\n else\n { return dir < 0 ? range$$1.from() : range$$1.to() }\n }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\n if (sel.somethingSelected())\n { doc.replaceSelection(\"\", null, \"+delete\"); }\n else\n { deleteNearSelection(this, function (range$$1) {\n var other = findPosH(doc, range$$1.head, dir, unit, false);\n return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other}\n }); }\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var this$1 = this;\n\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this$1, cur, \"div\");\n if (x == null) { x = coords.left; }\n else { coords.left = x; }\n cur = findPosV(this$1, coords, dir, unit);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveV: methodOp(function(dir, unit) {\n var this$1 = this;\n\n var doc = this.doc, goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range$$1) {\n if (collapse)\n { return dir < 0 ? range$$1.from() : range$$1.to() }\n var headPos = cursorCoords(this$1, range$$1.head, \"div\");\n if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range$$1 == doc.sel.primary())\n { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n return pos\n }, sel_move);\n if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n { doc.sel.ranges[i].goalColumn = goals[i]; } }\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function (ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n while (start > 0 && check(line.charAt(start - 1))) { --start; }\n while (end < line.length && check(line.charAt(end))) { ++end; }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end))\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) { return }\n if (this.state.overwrite = !this.state.overwrite)\n { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n else\n { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return this.display.input.getField() == activeElt() },\n isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n },\n\n scrollIntoView: methodOp(function(range$$1, margin) {\n if (range$$1 == null) {\n range$$1 = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) { margin = this.options.cursorScrollMargin; }\n } else if (typeof range$$1 == \"number\") {\n range$$1 = {from: Pos(range$$1, 0), to: null};\n } else if (range$$1.from == null) {\n range$$1 = {from: range$$1, to: null};\n }\n if (!range$$1.to) { range$$1.to = range$$1.from; }\n range$$1.margin = margin || 0;\n\n if (range$$1.from.line != null) {\n scrollToRange(this, range$$1);\n } else {\n scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin);\n }\n }),\n\n setSize: methodOp(function(width, height) {\n var this$1 = this;\n\n var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n if (width != null) { this.display.wrapper.style.width = interpret(width); }\n if (height != null) { this.display.wrapper.style.height = interpret(height); }\n if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n var lineNo$$1 = this.display.viewFrom;\n this.doc.iter(lineNo$$1, this.display.viewTo, function (line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, \"widget\"); break } } }\n ++lineNo$$1;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f)},\n startOperation: function(){return startOperation(this)},\n endOperation: function(){return endOperation(this)},\n\n refresh: methodOp(function() {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this.display);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n { estimateLineHeights(this); }\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n // Cancel the current text selection if any (#5821)\n if (this.state.selectingText) { this.state.selectingText(); }\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old\n }),\n\n phrase: function(phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n },\n\n getInputField: function(){return this.display.input.getField()},\n getWrapperElement: function(){return this.display.wrapper},\n getScrollerElement: function(){return this.display.scroller},\n getGutterElement: function(){return this.display.gutters}\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\n }\n\n // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"char\", \"column\" (like char, but doesn't\n // cross line boundaries), \"word\" (across next word), or \"group\" (to\n // the start of next group of word or non-word-non-whitespace\n // chars). The visually param controls whether, in right-to-left\n // text, direction 1 means to move towards the next index in the\n // string, or towards the character to the right of the current\n // position. The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n function findNextLine() {\n var l = pos.line + dir;\n if (l < doc.first || l >= doc.first + doc.size) { return false }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l)\n }\n function moveOnce(boundToLine) {\n var next;\n if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n if (next == null) {\n if (!boundToLine && findNextLine())\n { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); }\n else\n { return false }\n } else {\n pos = next;\n }\n return true\n }\n\n if (unit == \"char\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) { break }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) { type = \"s\"; }\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n break\n }\n\n if (type) { sawType = type; }\n if (dir > 0 && !moveOnce(!first)) { break }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n return result\n }\n\n // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) { break }\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n y += dir * 5;\n }\n return target\n }\n\n // CONTENTEDITABLE INPUT STYLE\n\n var ContentEditableInput = function(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n };\n\n ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = input.cm;\n var div = input.div = display.lineDiv;\n disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n on(div, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n });\n\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {data: e.data, done: false};\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n this$1.composing.done = true;\n }\n });\n\n on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n on(div, \"input\", function () {\n if (!this$1.composing) { this$1.readFromDOMSoon(); }\n });\n\n function onCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(), te = kludge.firstChild;\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = document.activeElement;\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n if (hadFocus == div) { input.showPrimarySelection(); }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n };\n\n ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = this.cm.state.focused;\n return result\n };\n\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) { return }\n if (info.focus || takeFocus) { this.showPrimarySelection(); }\n this.showMultipleSelections(info);\n };\n\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection()\n };\n\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n var from = prim.from(), to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n cmp(minPos(curAnchor, curFocus), from) == 0 &&\n cmp(maxPos(curAnchor, curFocus), to) == 0)\n { return }\n\n var view = cm.display.view;\n var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n {node: view[0].measure.map[2], offset: 0};\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]};\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0), rng;\n try { rng = range(start.node, start.offset, end.offset, end.node); }\n catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) { sel.addRange(old); }\n else if (gecko) { this.startGracePeriod(); }\n }\n this.rememberSelection();\n };\n\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged())\n { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n }, 20);\n };\n\n ContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n };\n\n ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n };\n\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) { return false }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node)\n };\n\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor())\n { this.showSelection(this.prepareSelection(), true); }\n this.div.focus();\n }\n };\n ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n ContentEditableInput.prototype.getField = function () { return this.div };\n\n ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n ContentEditableInput.prototype.receivedFocus = function () {\n var input = this;\n if (this.selectionInEditor())\n { this.pollSelection(); }\n else\n { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n };\n\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n var sel = this.getSelection(), cm = this.cm;\n // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n this.blur();\n this.focus();\n return\n }\n if (this.composing) { return }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) { runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n }); }\n };\n\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n var from = sel.from(), to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine())\n { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n { to = Pos(to.line + 1, 0); }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n var fromIndex, fromLine, fromNode;\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) { return false }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n else { break }\n }\n\n var cutFront = 0, cutEnd = 0;\n var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n { ++cutFront; }\n var newBot = lst(newText), oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n { ++cutEnd; }\n // Try to move start of change to start of selection if ambiguous\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true\n }\n };\n\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) { return }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) { return }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) { this$1.composing = null; }\n else { return }\n }\n this$1.updateFromDOM();\n }, 80);\n };\n\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent())\n { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n };\n\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) { return }\n e.preventDefault();\n if (!this.cm.isReadOnly())\n { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n };\n\n ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n\n ContentEditableInput.prototype.onContextMenu = function () {};\n ContentEditableInput.prototype.resetPosition = function () {};\n\n ContentEditableInput.prototype.needsContentAttribute = true;\n\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) { return null }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n\n var order = getOrder(line, cm.doc.direction), side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result\n }\n\n function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode)\n { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n return false\n }\n\n function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) { text += lineSep; }\n closing = extraLinebreak = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText) {\n addText(cmText);\n return\n }\n var markerID = node.getAttribute(\"cm-marker\"), range$$1;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range$$1 = found[0].find(0)))\n { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); }\n return\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n if (isBlock) { close(); }\n for (var i = 0; i < node.childNodes.length; i++)\n { walk(node.childNodes[i]); }\n\n if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n if (isBlock) { closing = true; }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) { break }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text\n }\n\n function domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n node = null; offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode)\n { return locateNodeInLineView(lineView, node, offset) }\n }\n }\n\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild, bad = false;\n if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad)\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null, topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) { offset = textNode.nodeValue.length; }\n }\n while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n var measure = lineView.measure, maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map$$1 = i < 0 ? measure.map : maps[i];\n for (var j = 0; j < map$$1.length; j += 3) {\n var curNode = map$$1[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map$$1[j] + offset;\n if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; }\n return Pos(line, ch)\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) { return badPos(found, bad) }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n if (found)\n { return badPos(Pos(found.line, found.ch - dist), bad) }\n else\n { dist += after.textContent.length; }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n if (found)\n { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n else\n { dist$1 += before.textContent.length; }\n }\n }\n\n // TEXTAREA INPUT STYLE\n\n var TextareaInput = function(cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n };\n\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) { te.style.width = \"0px\"; }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n input.poll();\n });\n\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n cm.state.pasteIncoming = +new Date;\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n if (!te.dispatchEvent) {\n cm.state.pasteIncoming = +new Date;\n input.focus();\n return\n }\n\n // Pass the `paste` event to the textarea so it's handled by its event listener.\n var event = new Event(\"paste\");\n event.clipboardData = e.clipboardData;\n te.dispatchEvent(event);\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) { e_preventDefault(e); }\n });\n\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) { input.composing.range.clear(); }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n\n TextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n this.textarea = this.wrapper.firstChild;\n };\n\n TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm, display = cm.display, doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result\n };\n\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm, display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n };\n\n // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing) { return }\n var cm = this.cm;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) { selectInput(this.textarea); }\n if (ie && ie_version >= 9) { this.hasSelection = content; }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n }\n };\n\n TextareaInput.prototype.getField = function () { return this.textarea };\n\n TextareaInput.prototype.supportsTouch = function () { return false };\n\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n try { this.textarea.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n };\n\n TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n\n TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) { return }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) { this$1.slowPoll(); }\n });\n };\n\n // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n TextareaInput.prototype.fastPoll = function () {\n var missed = false, input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n else {input.pollingFast = false; input.slowPoll();}\n }\n input.polling.set(20, p);\n };\n\n // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n TextareaInput.prototype.poll = function () {\n var this$1 = this;\n\n var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (this.contextMenuPending || !cm.state.focused ||\n (hasSelection(input) && !prevInput && !this.composing) ||\n cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n { return false }\n\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) { return false }\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && this.hasSelection === text ||\n mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n }\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same,\n null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n else { this$1.prevInput = text; }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n {className: \"CodeMirror-composing\"});\n }\n });\n return true\n };\n\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n };\n\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n this.fastPoll();\n };\n\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n if (input.contextMenuPending) { input.contextMenuPending(); }\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) { return } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) { window.scrollTo(null, oldScrollY); }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200b\" + (selected ? te.value : \"\");\n te.value = \"\\u21da\"; // Used to catch context-menu undo\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1; te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n if (input.contextMenuPending != rehide) { return }\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n var i = 0, poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) { this.reset(); }\n this.textarea.disabled = val == \"nocursor\";\n };\n\n TextareaInput.prototype.setUneditable = function () {};\n\n TextareaInput.prototype.needsContentAttribute = false;\n\n function fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabIndex)\n { options.tabindex = textarea.tabIndex; }\n if (!options.placeholder && textarea.placeholder)\n { options.placeholder = textarea.placeholder; }\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch(e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () { return textarea; };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n { textarea.form.submit = realSubmit; }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n options);\n return cm\n }\n\n function addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n }\n\n // EDITOR CONSTRUCTOR\n\n defineOptions(CodeMirror);\n\n addEditorMethods(CodeMirror);\n\n // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n { CodeMirror.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments)}\n })(Doc.prototype[prop]); } }\n\n eventMixin(Doc);\n CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n CodeMirror.defineMode = function(name/*, mode, …*/) {\n if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n defineMode.apply(this, arguments);\n };\n\n CodeMirror.defineMIME = defineMIME;\n\n // Minimal default mode.\n CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n\n CodeMirror.fromTextArea = fromTextArea;\n\n addLegacyProps(CodeMirror);\n\n CodeMirror.version = \"5.49.0\";\n\n return CodeMirror;\n\n})));\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _objectWithoutProperties(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 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\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar isIE = isBrowser ? !!document.documentElement.currentStyle : false;\nvar hiddenTextarea = isBrowser && document.createElement('textarea');\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};\nvar SIZING_STYLE = ['letter-spacing', 'line-height', 'font-family', 'font-weight', 'font-size', 'font-style', 'tab-size', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left', 'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width', 'box-sizing'];\nvar computedStyleCache = {};\nfunction calculateNodeHeight(uiTextNode, uid, useCache, minRows, maxRows) {\n if (useCache === void 0) {\n useCache = false;\n }\n\n if (minRows === void 0) {\n minRows = null;\n }\n\n if (maxRows === void 0) {\n maxRows = null;\n }\n\n if (hiddenTextarea.parentNode === null) {\n document.body.appendChild(hiddenTextarea);\n } // Copy all CSS properties that have an impact on the height of the content in\n // the textbox\n\n\n var nodeStyling = calculateNodeStyling(uiTextNode, uid, useCache);\n\n if (nodeStyling === null) {\n return null;\n }\n\n var paddingSize = nodeStyling.paddingSize,\n borderSize = nodeStyling.borderSize,\n boxSizing = nodeStyling.boxSizing,\n sizingStyle = nodeStyling.sizingStyle; // Need to have the overflow attribute to hide the scrollbar otherwise\n // text-lines will not calculated properly as the shadow will technically be\n // narrower for content\n\n Object.keys(sizingStyle).forEach(function (key) {\n hiddenTextarea.style[key] = sizingStyle[key];\n });\n Object.keys(HIDDEN_TEXTAREA_STYLE).forEach(function (key) {\n hiddenTextarea.style.setProperty(key, HIDDEN_TEXTAREA_STYLE[key], 'important');\n });\n hiddenTextarea.value = uiTextNode.value || uiTextNode.placeholder || 'x';\n var minHeight = -Infinity;\n var maxHeight = Infinity;\n var height = hiddenTextarea.scrollHeight;\n\n if (boxSizing === 'border-box') {\n // border-box: add border, since height = content + padding + border\n height = height + borderSize;\n } else if (boxSizing === 'content-box') {\n // remove padding, since height = content\n height = height - paddingSize;\n } // measure height of a textarea with a single row\n\n\n hiddenTextarea.value = 'x';\n var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n\n if (minRows !== null || maxRows !== null) {\n if (minRows !== null) {\n minHeight = singleRowHeight * minRows;\n\n if (boxSizing === 'border-box') {\n minHeight = minHeight + paddingSize + borderSize;\n }\n\n height = Math.max(minHeight, height);\n }\n\n if (maxRows !== null) {\n maxHeight = singleRowHeight * maxRows;\n\n if (boxSizing === 'border-box') {\n maxHeight = maxHeight + paddingSize + borderSize;\n }\n\n height = Math.min(maxHeight, height);\n }\n }\n\n var rowCount = Math.floor(height / singleRowHeight);\n return {\n height: height,\n minHeight: minHeight,\n maxHeight: maxHeight,\n rowCount: rowCount\n };\n}\n\nfunction calculateNodeStyling(node, uid, useCache) {\n if (useCache === void 0) {\n useCache = false;\n }\n\n if (useCache && computedStyleCache[uid]) {\n return computedStyleCache[uid];\n }\n\n var style = window.getComputedStyle(node);\n\n if (style === null) {\n return null;\n }\n\n var sizingStyle = SIZING_STYLE.reduce(function (obj, name) {\n obj[name] = style.getPropertyValue(name);\n return obj;\n }, {});\n var boxSizing = sizingStyle['box-sizing']; // 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 if (isIE && boxSizing === 'border-box') {\n sizingStyle.width = parseFloat(sizingStyle.width) + parseFloat(style['border-right-width']) + parseFloat(style['border-left-width']) + parseFloat(style['padding-right']) + parseFloat(style['padding-left']) + 'px';\n }\n\n var paddingSize = parseFloat(sizingStyle['padding-bottom']) + parseFloat(sizingStyle['padding-top']);\n var borderSize = parseFloat(sizingStyle['border-bottom-width']) + parseFloat(sizingStyle['border-top-width']);\n var nodeInfo = {\n sizingStyle: sizingStyle,\n paddingSize: paddingSize,\n borderSize: borderSize,\n boxSizing: boxSizing\n };\n\n if (useCache) {\n computedStyleCache[uid] = nodeInfo;\n }\n\n return nodeInfo;\n}\n\nvar purgeCache = function purgeCache(uid) {\n return delete computedStyleCache[uid];\n};\n\nfunction autoInc(seed) {\n if (seed === void 0) {\n seed = 0;\n }\n\n return function () {\n return ++seed;\n };\n}\n\nvar uid = autoInc();\n\n/**\n * \n */\nvar noop = function noop() {}; // IE11 has a problem with eval source maps, can be reproduced with:\n// eval('\"use strict\"; var onNextFrame = window.cancelAnimationFrame; onNextFrame(4);')\n// so we bind window as context in dev modes\n\n\nvar _ref = isBrowser && window.requestAnimationFrame ? process.env.NODE_ENV !== 'development' ? [window.requestAnimationFrame, window.cancelAnimationFrame] : [window.requestAnimationFrame.bind(window), window.cancelAnimationFrame.bind(window)] : [setTimeout, clearTimeout];\nvar onNextFrame = _ref[0];\nvar clearNextFrameAction = _ref[1];\n\nvar TextareaAutosize =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(TextareaAutosize, _React$Component);\n\n function TextareaAutosize(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this._resizeLock = false;\n\n _this._onRootDOMNode = function (node) {\n _this._rootDOMNode = node;\n\n if (_this.props.inputRef) {\n _this.props.inputRef(node);\n }\n };\n\n _this._onChange = function (event) {\n if (!_this._controlled) {\n _this._resizeComponent();\n }\n\n _this.props.onChange(event);\n };\n\n _this._resizeComponent = function (callback) {\n if (callback === void 0) {\n callback = noop;\n }\n\n if (typeof _this._rootDOMNode === 'undefined') {\n callback();\n return;\n }\n\n var nodeHeight = calculateNodeHeight(_this._rootDOMNode, _this._uid, _this.props.useCacheForDOMMeasurements, _this.props.minRows, _this.props.maxRows);\n\n if (nodeHeight === null) {\n callback();\n return;\n }\n\n var height = nodeHeight.height,\n minHeight = nodeHeight.minHeight,\n maxHeight = nodeHeight.maxHeight,\n rowCount = nodeHeight.rowCount;\n _this.rowCount = rowCount;\n\n if (_this.state.height !== height || _this.state.minHeight !== minHeight || _this.state.maxHeight !== maxHeight) {\n _this.setState({\n height: height,\n minHeight: minHeight,\n maxHeight: maxHeight\n }, callback);\n\n return;\n }\n\n callback();\n };\n\n _this.state = {\n height: props.style && props.style.height || 0,\n minHeight: -Infinity,\n maxHeight: Infinity\n };\n _this._uid = uid();\n _this._controlled = typeof props.value === 'string';\n return _this;\n }\n\n var _proto = TextareaAutosize.prototype;\n\n _proto.render = function render() {\n var _props = this.props,\n _minRows = _props.minRows,\n _maxRows = _props.maxRows,\n _onHeightChange = _props.onHeightChange,\n _useCacheForDOMMeasurements = _props.useCacheForDOMMeasurements,\n _inputRef = _props.inputRef,\n props = _objectWithoutProperties(_props, [\"minRows\", \"maxRows\", \"onHeightChange\", \"useCacheForDOMMeasurements\", \"inputRef\"]);\n props.style = _extends({}, props.style, {\n height: this.state.height\n });\n var maxHeight = Math.max(props.style.maxHeight || Infinity, this.state.maxHeight);\n\n if (maxHeight < this.state.height) {\n props.style.overflow = 'hidden';\n }\n\n return React.createElement(\"textarea\", _extends({}, props, {\n onChange: this._onChange,\n ref: this._onRootDOMNode\n }));\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n this._resizeComponent(); // Working around Firefox bug which runs resize listeners even when other JS is running at the same moment\n // causing competing rerenders (due to setState in the listener) in React.\n // More can be found here - facebook/react#6324\n\n\n this._resizeListener = function () {\n if (_this2._resizeLock) {\n return;\n }\n\n _this2._resizeLock = true;\n\n _this2._resizeComponent(function () {\n return _this2._resizeLock = false;\n });\n };\n\n window.addEventListener('resize', this._resizeListener);\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps() {\n var _this3 = this;\n\n this._clearNextFrame();\n\n this._onNextFrameActionId = onNextFrame(function () {\n return _this3._resizeComponent();\n });\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (this.state.height !== prevState.height) {\n this.props.onHeightChange(this.state.height, this);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this._clearNextFrame();\n\n window.removeEventListener('resize', this._resizeListener);\n purgeCache(this._uid);\n };\n\n _proto._clearNextFrame = function _clearNextFrame() {\n clearNextFrameAction(this._onNextFrameActionId);\n };\n\n return TextareaAutosize;\n}(React.Component);\n\nTextareaAutosize.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func,\n onHeightChange: PropTypes.func,\n useCacheForDOMMeasurements: PropTypes.bool,\n minRows: PropTypes.number,\n maxRows: PropTypes.number,\n inputRef: PropTypes.func\n};\nTextareaAutosize.defaultProps = {\n onChange: noop,\n onHeightChange: noop,\n useCacheForDOMMeasurements: false\n};\n\nexport default TextareaAutosize;\n","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactFeatureFlags = require('./ReactFeatureFlags');\nvar ReactReconciler = require('./ReactReconciler');\nvar Transaction = require('./Transaction');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar dirtyComponents = [];\nvar updateBatchNumber = 0;\nvar asapCallbackQueue = CallbackQueue.getPooled();\nvar asapEnqueued = false;\n\nvar batchingStrategy = null;\n\nfunction ensureInjected() {\n !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching strategy') : _prodInvariant('123') : void 0;\n}\n\nvar NESTED_UPDATES = {\n initialize: function () {\n this.dirtyComponentsLength = dirtyComponents.length;\n },\n close: function () {\n if (this.dirtyComponentsLength !== dirtyComponents.length) {\n // Additional updates were enqueued by componentDidUpdate handlers or\n // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\n // these new updates so that if A's componentDidUpdate calls setState on\n // B, B will update before the callback A's updater provided when calling\n // setState.\n dirtyComponents.splice(0, this.dirtyComponentsLength);\n flushBatchedUpdates();\n } else {\n dirtyComponents.length = 0;\n }\n }\n};\n\nvar UPDATE_QUEUEING = {\n initialize: function () {\n this.callbackQueue.reset();\n },\n close: function () {\n this.callbackQueue.notifyAll();\n }\n};\n\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\n\nfunction ReactUpdatesFlushTransaction() {\n this.reinitializeTransaction();\n this.dirtyComponentsLength = null;\n this.callbackQueue = CallbackQueue.getPooled();\n this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n /* useCreateElement */true);\n}\n\n_assign(ReactUpdatesFlushTransaction.prototype, Transaction, {\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n },\n\n destructor: function () {\n this.dirtyComponentsLength = null;\n CallbackQueue.release(this.callbackQueue);\n this.callbackQueue = null;\n ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\n this.reconcileTransaction = null;\n },\n\n perform: function (method, scope, a) {\n // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\n // with this transaction's wrappers around it.\n return Transaction.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);\n }\n});\n\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\n\nfunction batchedUpdates(callback, a, b, c, d, e) {\n ensureInjected();\n return batchingStrategy.batchedUpdates(callback, a, b, c, d, e);\n}\n\n/**\n * Array comparator for ReactComponents by mount ordering.\n *\n * @param {ReactComponent} c1 first component you're comparing\n * @param {ReactComponent} c2 second component you're comparing\n * @return {number} Return value usable by Array.prototype.sort().\n */\nfunction mountOrderComparator(c1, c2) {\n return c1._mountOrder - c2._mountOrder;\n}\n\nfunction runBatchedUpdates(transaction) {\n var len = transaction.dirtyComponentsLength;\n !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\\'s stored dirty-components length (%s) to match dirty-components array length (%s).', len, dirtyComponents.length) : _prodInvariant('124', len, dirtyComponents.length) : void 0;\n\n // Since reconciling a component higher in the owner hierarchy usually (not\n // always -- see shouldComponentUpdate()) will reconcile children, reconcile\n // them before their children by sorting the array.\n dirtyComponents.sort(mountOrderComparator);\n\n // Any updates enqueued while reconciling must be performed after this entire\n // batch. Otherwise, if dirtyComponents is [A, B] where A has children B and\n // C, B could update twice in a single batch if C's render enqueues an update\n // to B (since B would have already updated, we should skip it, and the only\n // way we can know to do so is by checking the batch counter).\n updateBatchNumber++;\n\n for (var i = 0; i < len; i++) {\n // If a component is unmounted before pending changes apply, it will still\n // be here, but we assume that it has cleared its _pendingCallbacks and\n // that performUpdateIfNecessary is a noop.\n var component = dirtyComponents[i];\n\n // If performUpdateIfNecessary happens to enqueue any new updates, we\n // shouldn't execute the callbacks until the next render happens, so\n // stash the callbacks first\n var callbacks = component._pendingCallbacks;\n component._pendingCallbacks = null;\n\n var markerName;\n if (ReactFeatureFlags.logTopLevelRenders) {\n var namedComponent = component;\n // Duck type TopLevelWrapper. This is probably always true.\n if (component._currentElement.type.isReactTopLevelWrapper) {\n namedComponent = component._renderedComponent;\n }\n markerName = 'React update: ' + namedComponent.getName();\n console.time(markerName);\n }\n\n ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber);\n\n if (markerName) {\n console.timeEnd(markerName);\n }\n\n if (callbacks) {\n for (var j = 0; j < callbacks.length; j++) {\n transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());\n }\n }\n }\n}\n\nvar flushBatchedUpdates = function () {\n // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\n // array and perform any updates enqueued by mount-ready handlers (i.e.,\n // componentDidUpdate) but we need to check here too in order to catch\n // updates enqueued by setState callbacks and asap calls.\n while (dirtyComponents.length || asapEnqueued) {\n if (dirtyComponents.length) {\n var transaction = ReactUpdatesFlushTransaction.getPooled();\n transaction.perform(runBatchedUpdates, null, transaction);\n ReactUpdatesFlushTransaction.release(transaction);\n }\n\n if (asapEnqueued) {\n asapEnqueued = false;\n var queue = asapCallbackQueue;\n asapCallbackQueue = CallbackQueue.getPooled();\n queue.notifyAll();\n CallbackQueue.release(queue);\n }\n }\n};\n\n/**\n * Mark a component as needing a rerender, adding an optional callback to a\n * list of functions which will be executed once the rerender occurs.\n */\nfunction enqueueUpdate(component) {\n ensureInjected();\n\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case. (This is called by each top-level update\n // function, like setState, forceUpdate, etc.; creation and\n // destruction of top-level components is guarded in ReactMount.)\n\n if (!batchingStrategy.isBatchingUpdates) {\n batchingStrategy.batchedUpdates(enqueueUpdate, component);\n return;\n }\n\n dirtyComponents.push(component);\n if (component._updateBatchNumber == null) {\n component._updateBatchNumber = updateBatchNumber + 1;\n }\n}\n\n/**\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\n * if no updates are currently being performed.\n */\nfunction asap(callback, context) {\n !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\\'t enqueue an asap callback in a context whereupdates are not being batched.') : _prodInvariant('125') : void 0;\n asapCallbackQueue.enqueue(callback, context);\n asapEnqueued = true;\n}\n\nvar ReactUpdatesInjection = {\n injectReconcileTransaction: function (ReconcileTransaction) {\n !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : _prodInvariant('126') : void 0;\n ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\n },\n\n injectBatchingStrategy: function (_batchingStrategy) {\n !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : _prodInvariant('127') : void 0;\n !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : _prodInvariant('128') : void 0;\n !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : _prodInvariant('129') : void 0;\n batchingStrategy = _batchingStrategy;\n }\n};\n\nvar ReactUpdates = {\n /**\n * React references `ReactReconcileTransaction` using this property in order\n * to allow dependency injection.\n *\n * @internal\n */\n ReactReconcileTransaction: null,\n\n batchedUpdates: batchedUpdates,\n enqueueUpdate: enqueueUpdate,\n flushBatchedUpdates: flushBatchedUpdates,\n injection: ReactUpdatesInjection,\n asap: asap\n};\n\nmodule.exports = ReactUpdates;","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","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 * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n\n};\n\nmodule.exports = ReactCurrentOwner;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnForAddedNewProperty = false;\nvar isProxySupported = typeof Proxy === 'function';\n\nvar shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances'];\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar EventInterface = {\n type: null,\n target: null,\n // currentTarget is set when dispatching; no use in copying it here\n currentTarget: emptyFunction.thatReturnsNull,\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\n\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {*} targetInst Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @param {DOMEventTarget} nativeEventTarget Target node.\n */\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n if (process.env.NODE_ENV !== 'production') {\n // these have a getter/setter for warnings\n delete this.nativeEvent;\n delete this.preventDefault;\n delete this.stopPropagation;\n }\n\n this.dispatchConfig = dispatchConfig;\n this._targetInst = targetInst;\n this.nativeEvent = nativeEvent;\n\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n if (!Interface.hasOwnProperty(propName)) {\n continue;\n }\n if (process.env.NODE_ENV !== 'production') {\n delete this[propName]; // this has a getter/setter for warnings\n }\n var normalize = Interface[propName];\n if (normalize) {\n this[propName] = normalize(nativeEvent);\n } else {\n if (propName === 'target') {\n this.target = nativeEventTarget;\n } else {\n this[propName] = nativeEvent[propName];\n }\n }\n }\n\n var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n if (defaultPrevented) {\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n } else {\n this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\n }\n this.isPropagationStopped = emptyFunction.thatReturnsFalse;\n return this;\n}\n\n_assign(SyntheticEvent.prototype, {\n\n preventDefault: function () {\n this.defaultPrevented = true;\n var event = this.nativeEvent;\n if (!event) {\n return;\n }\n\n if (event.preventDefault) {\n event.preventDefault();\n } else if (typeof event.returnValue !== 'unknown') {\n // eslint-disable-line valid-typeof\n event.returnValue = false;\n }\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n },\n\n stopPropagation: function () {\n var event = this.nativeEvent;\n if (!event) {\n return;\n }\n\n if (event.stopPropagation) {\n event.stopPropagation();\n } else if (typeof event.cancelBubble !== 'unknown') {\n // eslint-disable-line valid-typeof\n // The ChangeEventPlugin registers a \"propertychange\" event for\n // IE. This event does not support bubbling or cancelling, and\n // any references to cancelBubble throw \"Member not found\". A\n // typeof check of \"unknown\" circumvents this issue (and is also\n // IE specific).\n event.cancelBubble = true;\n }\n\n this.isPropagationStopped = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * We release all dispatched `SyntheticEvent`s after each event loop, adding\n * them back into the pool. This allows a way to hold onto a reference that\n * won't be added back into the pool.\n */\n persist: function () {\n this.isPersistent = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * Checks if this event should be released back into the pool.\n *\n * @return {boolean} True if this should not be released, false otherwise.\n */\n isPersistent: emptyFunction.thatReturnsFalse,\n\n /**\n * `PooledClass` looks for `destructor` on each instance it releases.\n */\n destructor: function () {\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n if (process.env.NODE_ENV !== 'production') {\n Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n } else {\n this[propName] = null;\n }\n }\n for (var i = 0; i < shouldBeReleasedProperties.length; i++) {\n this[shouldBeReleasedProperties[i]] = null;\n }\n if (process.env.NODE_ENV !== 'production') {\n Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', emptyFunction));\n Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', emptyFunction));\n }\n }\n\n});\n\nSyntheticEvent.Interface = EventInterface;\n\nif (process.env.NODE_ENV !== 'production') {\n if (isProxySupported) {\n /*eslint-disable no-func-assign */\n SyntheticEvent = new Proxy(SyntheticEvent, {\n construct: function (target, args) {\n return this.apply(target, Object.create(target.prototype), args);\n },\n apply: function (constructor, that, args) {\n return new Proxy(constructor.apply(that, args), {\n set: function (target, prop, value) {\n if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) {\n process.env.NODE_ENV !== 'production' ? warning(didWarnForAddedNewProperty || target.isPersistent(), 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re adding a new property in the synthetic event object. ' + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.') : void 0;\n didWarnForAddedNewProperty = true;\n }\n target[prop] = value;\n return true;\n }\n });\n }\n });\n /*eslint-enable no-func-assign */\n }\n}\n/**\n * Helper to reduce boilerplate when creating subclasses.\n *\n * @param {function} Class\n * @param {?object} Interface\n */\nSyntheticEvent.augmentClass = function (Class, Interface) {\n var Super = this;\n\n var E = function () {};\n E.prototype = Super.prototype;\n var prototype = new E();\n\n _assign(prototype, Class.prototype);\n Class.prototype = prototype;\n Class.prototype.constructor = Class;\n\n Class.Interface = _assign({}, Super.Interface, Interface);\n Class.augmentClass = Super.augmentClass;\n\n PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);\n};\n\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);\n\nmodule.exports = SyntheticEvent;\n\n/**\n * Helper to nullify syntheticEvent instance properties when destructing\n *\n * @param {object} SyntheticEvent\n * @param {String} propName\n * @return {object} defineProperty object\n */\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\n var isFunction = typeof getVal === 'function';\n return {\n configurable: true,\n set: set,\n get: get\n };\n\n function set(val) {\n var action = isFunction ? 'setting the method' : 'setting the property';\n warn(action, 'This is effectively a no-op');\n return val;\n }\n\n function get() {\n var action = isFunction ? 'accessing the method' : 'accessing the property';\n var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n warn(action, result);\n return getVal;\n }\n\n function warn(action, result) {\n var warningCondition = false;\n process.env.NODE_ENV !== 'production' ? warning(warningCondition, 'This synthetic event is reused for performance reasons. If you\\'re seeing this, ' + 'you\\'re %s `%s` on a released/nullified synthetic event. %s. ' + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;\n }\n}","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\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 warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\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\n if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n throw new Error(\n 'The warning format should be able to uniquely identify this ' +\n 'warning. Please, use a more descriptive format than: ' + format\n );\n }\n\n if (!condition) {\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 // 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}\n\nmodule.exports = warning;\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","'use strict';\n\nexports.__esModule = true;\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.isReactChildren = isReactChildren;\nexports.createRouteFromReactElement = createRouteFromReactElement;\nexports.createRoutesFromReactChildren = createRoutesFromReactChildren;\nexports.createRoutes = createRoutes;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isValidChild(object) {\n return object == null || _react2.default.isValidElement(object);\n}\n\nfunction isReactChildren(object) {\n return isValidChild(object) || Array.isArray(object) && object.every(isValidChild);\n}\n\nfunction createRoute(defaultProps, props) {\n return _extends({}, defaultProps, props);\n}\n\nfunction createRouteFromReactElement(element) {\n var type = element.type;\n var route = createRoute(type.defaultProps, element.props);\n\n if (route.children) {\n var childRoutes = createRoutesFromReactChildren(route.children, route);\n\n if (childRoutes.length) route.childRoutes = childRoutes;\n\n delete route.children;\n }\n\n return route;\n}\n\n/**\n * Creates and returns a routes object from the given ReactChildren. JSX\n * provides a convenient way to visualize how routes in the hierarchy are\n * nested.\n *\n * import { Route, createRoutesFromReactChildren } from 'react-router'\n *\n * const routes = createRoutesFromReactChildren(\n * \n * \n * \n * \n * )\n *\n * Note: This method is automatically used when you provide children\n * to a component.\n */\nfunction createRoutesFromReactChildren(children, parentRoute) {\n var routes = [];\n\n _react2.default.Children.forEach(children, function (element) {\n if (_react2.default.isValidElement(element)) {\n // Component classes may have a static create* method.\n if (element.type.createRouteFromReactElement) {\n var route = element.type.createRouteFromReactElement(element, parentRoute);\n\n if (route) routes.push(route);\n } else {\n routes.push(createRouteFromReactElement(element));\n }\n }\n });\n\n return routes;\n}\n\n/**\n * Creates and returns an array of routes from the given object which\n * may be a JSX route, a plain object route, or an array of either.\n */\nfunction createRoutes(routes) {\n if (isReactChildren(routes)) {\n routes = createRoutesFromReactChildren(routes);\n } else if (routes && !Array.isArray(routes)) {\n routes = [routes];\n }\n\n return routes;\n}","'use strict';\n\nexports.__esModule = true;\nexports.createPath = exports.parsePath = exports.getQueryStringValueFromPath = exports.stripQueryStringValueFromPath = exports.addQueryStringValueToPath = undefined;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar addQueryStringValueToPath = exports.addQueryStringValueToPath = function addQueryStringValueToPath(path, key, value) {\n var _parsePath = parsePath(path),\n pathname = _parsePath.pathname,\n search = _parsePath.search,\n hash = _parsePath.hash;\n\n return createPath({\n pathname: pathname,\n search: search + (search.indexOf('?') === -1 ? '?' : '&') + key + '=' + value,\n hash: hash\n });\n};\n\nvar stripQueryStringValueFromPath = exports.stripQueryStringValueFromPath = function stripQueryStringValueFromPath(path, key) {\n var _parsePath2 = parsePath(path),\n pathname = _parsePath2.pathname,\n search = _parsePath2.search,\n hash = _parsePath2.hash;\n\n return createPath({\n pathname: pathname,\n search: search.replace(new RegExp('([?&])' + key + '=[a-zA-Z0-9]+(&?)'), function (match, prefix, suffix) {\n return prefix === '?' ? prefix : suffix;\n }),\n hash: hash\n });\n};\n\nvar getQueryStringValueFromPath = exports.getQueryStringValueFromPath = function getQueryStringValueFromPath(path, key) {\n var _parsePath3 = parsePath(path),\n search = _parsePath3.search;\n\n var match = search.match(new RegExp('[?&]' + key + '=([a-zA-Z0-9]+)'));\n return match && match[1];\n};\n\nvar extractPath = function extractPath(string) {\n var match = string.match(/^(https?:)?\\/\\/[^\\/]*/);\n return match == null ? string : string.substring(match[0].length);\n};\n\nvar parsePath = exports.parsePath = function parsePath(path) {\n var pathname = extractPath(path);\n var search = '';\n var hash = '';\n\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(path === pathname, 'A path must be pathname + search + hash only, not a full URL like \"%s\"', path) : void 0;\n\n var hashIndex = pathname.indexOf('#');\n if (hashIndex !== -1) {\n hash = pathname.substring(hashIndex);\n pathname = pathname.substring(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n if (searchIndex !== -1) {\n search = pathname.substring(searchIndex);\n pathname = pathname.substring(0, searchIndex);\n }\n\n if (pathname === '') pathname = '/';\n\n return {\n pathname: pathname,\n search: search,\n hash: hash\n };\n};\n\nvar createPath = exports.createPath = function createPath(location) {\n if (location == null || typeof location === 'string') return location;\n\n var basename = location.basename,\n pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n\n var path = (basename || '') + pathname;\n\n if (search && search !== '?') path += search;\n\n if (hash) path += hash;\n\n return path;\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _dateArithmetic = _interopRequireDefault(require(\"date-arithmetic\"));\n\nvar _localizers = require(\"./localizers\");\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 dates = _extends({}, _dateArithmetic.default, {\n monthsInYear: function monthsInYear(year) {\n var date = new Date(year, 0, 1);\n return [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map(function (i) {\n return dates.month(date, i);\n });\n },\n firstVisibleDay: function firstVisibleDay(date, culture) {\n var firstOfMonth = dates.startOf(date, 'month');\n return dates.startOf(firstOfMonth, 'week', _localizers.date.firstOfWeek(culture));\n },\n lastVisibleDay: function lastVisibleDay(date, culture) {\n var endOfMonth = dates.endOf(date, 'month');\n return dates.endOf(endOfMonth, 'week', _localizers.date.firstOfWeek(culture));\n },\n visibleDays: function visibleDays(date, culture) {\n var current = dates.firstVisibleDay(date, culture);\n var last = dates.lastVisibleDay(date, culture);\n var days = [];\n\n while (dates.lte(current, last, 'day')) {\n days.push(current);\n current = dates.add(current, 1, 'day');\n }\n\n return days;\n },\n merge: function merge(date, time, defaultDate) {\n if (time == null && date == null) return null;\n if (time == null) time = defaultDate || new Date();\n if (date == null) date = defaultDate || new Date();\n date = dates.startOf(date, 'day');\n date = dates.hours(date, dates.hours(time));\n date = dates.minutes(date, dates.minutes(time));\n date = dates.seconds(date, dates.seconds(time));\n return dates.milliseconds(date, dates.milliseconds(time));\n },\n today: function today() {\n return dates.startOf(new Date(), 'day');\n },\n tomorrow: function tomorrow() {\n return dates.add(dates.startOf(new Date(), 'day'), 1, 'day');\n }\n});\n\nvar _default = dates;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Static poolers. Several custom versions for each potential number of\n * arguments. A completely generic pooler is easy to implement, but would\n * require accessing the `arguments` object. In each of these, `this` refers to\n * the Class itself, not an instance. If any others are needed, simply add them\n * here, or in their own files.\n */\nvar oneArgumentPooler = function (copyFieldsFrom) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, copyFieldsFrom);\n return instance;\n } else {\n return new Klass(copyFieldsFrom);\n }\n};\n\nvar twoArgumentPooler = function (a1, a2) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2);\n return instance;\n } else {\n return new Klass(a1, a2);\n }\n};\n\nvar threeArgumentPooler = function (a1, a2, a3) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3);\n return instance;\n } else {\n return new Klass(a1, a2, a3);\n }\n};\n\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3, a4);\n return instance;\n } else {\n return new Klass(a1, a2, a3, a4);\n }\n};\n\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3, a4, a5);\n return instance;\n } else {\n return new Klass(a1, a2, a3, a4, a5);\n }\n};\n\nvar standardReleaser = function (instance) {\n var Klass = this;\n !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;\n instance.destructor();\n if (Klass.instancePool.length < Klass.poolSize) {\n Klass.instancePool.push(instance);\n }\n};\n\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = oneArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances.\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function (CopyConstructor, pooler) {\n // Casting as any so that flow ignores the actual implementation and trusts\n // it to match the type we declared\n var NewKlass = CopyConstructor;\n NewKlass.instancePool = [];\n NewKlass.getPooled = pooler || DEFAULT_POOLER;\n if (!NewKlass.poolSize) {\n NewKlass.poolSize = DEFAULT_POOL_SIZE;\n }\n NewKlass.release = standardReleaser;\n return NewKlass;\n};\n\nvar PooledClass = {\n addPoolingTo: addPoolingTo,\n oneArgumentPooler: oneArgumentPooler,\n twoArgumentPooler: twoArgumentPooler,\n threeArgumentPooler: threeArgumentPooler,\n fourArgumentPooler: fourArgumentPooler,\n fiveArgumentPooler: fiveArgumentPooler\n};\n\nmodule.exports = PooledClass;","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\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 */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\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","/**\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","/**\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\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\nexport { polyfill };\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _default = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.isShallowEqual = isShallowEqual;\nexports.chunk = chunk;\nexports.groupBySortedKeys = groupBySortedKeys;\nexports.has = exports.makeArray = void 0;\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar makeArray = function makeArray(obj) {\n return obj == null ? [] : [].concat(obj);\n};\n\nexports.makeArray = makeArray;\n\nvar has = function has(o, k) {\n return o ? Object.prototype.hasOwnProperty.call(o, k) : false;\n};\n\nexports.has = has;\n\nfunction isShallowEqual(a, b) {\n if (a === b) return true;\n if (a instanceof Date && b instanceof Date) return +a === +b;\n if (typeof a !== 'object' && typeof b !== 'object') return a === b;\n if (typeof a !== typeof b) return false;\n if (a == null || b == null) return false; // if they were both null we wouldn't be here\n\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n\n for (var i = 0; i < keysA.length; i++) {\n if (!has(b, keysA[i]) || a[keysA[i]] !== b[keysA[i]]) return false;\n }\n\n return true;\n}\n\nfunction chunk(array, chunkSize) {\n var index = 0,\n length = array ? array.length : 0;\n var result = [];\n chunkSize = Math.max(+chunkSize || 1, 1);\n\n while (index < length) {\n result.push(array.slice(index, index += chunkSize));\n }\n\n return result;\n}\n\nfunction groupBySortedKeys(groupBy, data, keys) {\n var iter = typeof groupBy === 'function' ? groupBy : function (item) {\n return item[groupBy];\n }; // the keys array ensures that groups are rendered in the order they came in\n // which means that if you sort the data array it will render sorted,\n // so long as you also sorted by group\n\n keys = keys || [];\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(typeof groupBy !== 'string' || !data.length || has(data[0], groupBy), \"[React Widgets] You seem to be trying to group this list by a \" + (\"property `\" + groupBy + \"` that doesn't exist in the dataset items, this may be a typo\")) : void 0;\n return data.reduce(function (grps, item) {\n var group = iter(item);\n\n if (has(grps, group)) {\n grps[group].push(item);\n } else {\n keys.push(group);\n grps[group] = [item];\n }\n\n return grps;\n }, {});\n}","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\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 */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar ReactChildren = require('./ReactChildren');\nvar ReactComponent = require('./ReactComponent');\nvar ReactPureComponent = require('./ReactPureComponent');\nvar ReactClass = require('./ReactClass');\nvar ReactDOMFactories = require('./ReactDOMFactories');\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypes = require('./ReactPropTypes');\nvar ReactVersion = require('./ReactVersion');\n\nvar onlyChild = require('./onlyChild');\nvar warning = require('fbjs/lib/warning');\n\nvar createElement = ReactElement.createElement;\nvar createFactory = ReactElement.createFactory;\nvar cloneElement = ReactElement.cloneElement;\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactElementValidator = require('./ReactElementValidator');\n createElement = ReactElementValidator.createElement;\n createFactory = ReactElementValidator.createFactory;\n cloneElement = ReactElementValidator.cloneElement;\n}\n\nvar __spread = _assign;\n\nif (process.env.NODE_ENV !== 'production') {\n var warned = false;\n __spread = function () {\n process.env.NODE_ENV !== 'production' ? warning(warned, 'React.__spread is deprecated and should not be used. Use ' + 'Object.assign directly or another helper function with similar ' + 'semantics. You may be seeing this warning due to your compiler. ' + 'See https://fb.me/react-spread-deprecation for more details.') : void 0;\n warned = true;\n return _assign.apply(null, arguments);\n };\n}\n\nvar React = {\n\n // Modern\n\n Children: {\n map: ReactChildren.map,\n forEach: ReactChildren.forEach,\n count: ReactChildren.count,\n toArray: ReactChildren.toArray,\n only: onlyChild\n },\n\n Component: ReactComponent,\n PureComponent: ReactPureComponent,\n\n createElement: createElement,\n cloneElement: cloneElement,\n isValidElement: ReactElement.isValidElement,\n\n // Classic\n\n PropTypes: ReactPropTypes,\n createClass: ReactClass.createClass,\n createFactory: createFactory,\n createMixin: function (mixin) {\n // Currently a noop. Will be used to validate and trace mixins.\n return mixin;\n },\n\n // This looks DOM specific but these are actually isomorphic helpers\n // since they are just generating DOM strings.\n DOM: ReactDOMFactories,\n\n version: ReactVersion,\n\n // Deprecated hook for JSX spread, don't use this for anything.\n __spread: __spread\n};\n\nmodule.exports = React;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n'use strict';\n\n/**\n * WARNING: DO NOT manually require this module.\n * This is a replacement for `invariant(...)` used by the error code system\n * and will _only_ be required by the corresponding babel pass.\n * It always throws.\n */\n\nfunction reactProdInvariant(code) {\n var argCount = arguments.length - 1;\n\n var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;\n\n for (var argIdx = 0; argIdx < argCount; argIdx++) {\n message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);\n }\n\n message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';\n\n var error = new Error(message);\n error.name = 'Invariant Violation';\n error.framesToPop = 1; // we don't care about reactProdInvariant's own frame\n\n throw error;\n}\n\nmodule.exports = reactProdInvariant;","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar warning = require('fbjs/lib/warning');\nvar canDefineProperty = require('./canDefineProperty');\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar REACT_ELEMENT_TYPE = require('./ReactElementSymbol');\n\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\n\nvar specialPropKeyWarningShown, specialPropRefWarningShown;\n\nfunction hasValidRef(config) {\n if (process.env.NODE_ENV !== 'production') {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n if (process.env.NODE_ENV !== 'production') {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n process.env.NODE_ENV !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\n }\n };\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n process.env.NODE_ENV !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\n }\n };\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n}\n\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, no instanceof check\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allow us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n if (process.env.NODE_ENV !== 'production') {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {};\n\n // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n if (canDefineProperty) {\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n });\n // self and source are DEV only properties.\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n });\n // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n } else {\n element._store.validated = false;\n element._self = self;\n element._source = source;\n }\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n\n/**\n * Create and return a new ReactElement of the given type.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createelement\n */\nReactElement.createElement = function (type, config, children) {\n var propName;\n\n // Reserved names are extracted\n var props = {};\n\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n if (hasValidRef(config)) {\n ref = config.ref;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source;\n // Remaining properties are added to a new props object\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n if (process.env.NODE_ENV !== 'production') {\n if (Object.freeze) {\n Object.freeze(childArray);\n }\n }\n props.children = childArray;\n }\n\n // Resolve default props\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n if (key || ref) {\n if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n }\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n};\n\n/**\n * Return a function that produces ReactElements of a given type.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createfactory\n */\nReactElement.createFactory = function (type) {\n var factory = ReactElement.createElement.bind(null, type);\n // Expose the type on the factory and the prototype so that it can be\n // easily accessed on elements. E.g. `.type === Foo`.\n // This should not be named `constructor` since this may not be the function\n // that created the element, and it may not even be a constructor.\n // Legacy hook TODO: Warn if this is accessed\n factory.type = type;\n return factory;\n};\n\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n return newElement;\n};\n\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement\n */\nReactElement.cloneElement = function (element, config, children) {\n var propName;\n\n // Original props are copied\n var props = _assign({}, element.props);\n\n // Reserved names are extracted\n var key = element.key;\n var ref = element.ref;\n // Self is preserved since the owner is preserved.\n var self = element._self;\n // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n var source = element._source;\n\n // Owner will be preserved, unless ref is overridden\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n // Remaining properties override existing props\n var defaultProps;\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n};\n\n/**\n * Verifies the object is a ReactElement.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a valid component.\n * @final\n */\nReactElement.isValidElement = function (object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n};\n\nmodule.exports = ReactElement;","/**\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\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\nfunction checkMask(value, bitmask) {\n return (value & bitmask) === bitmask;\n}\n\nvar DOMPropertyInjection = {\n /**\n * Mapping from normalized, camelcased property names to a configuration that\n * specifies how the associated DOM property should be accessed or rendered.\n */\n MUST_USE_PROPERTY: 0x1,\n HAS_BOOLEAN_VALUE: 0x4,\n HAS_NUMERIC_VALUE: 0x8,\n HAS_POSITIVE_NUMERIC_VALUE: 0x10 | 0x8,\n HAS_OVERLOADED_BOOLEAN_VALUE: 0x20,\n\n /**\n * Inject some specialized knowledge about the DOM. This takes a config object\n * with the following properties:\n *\n * isCustomAttribute: function that given an attribute name will return true\n * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\n * attributes where it's impossible to enumerate all of the possible\n * attribute names,\n *\n * Properties: object mapping DOM property name to one of the\n * DOMPropertyInjection constants or null. If your attribute isn't in here,\n * it won't get written to the DOM.\n *\n * DOMAttributeNames: object mapping React attribute name to the DOM\n * attribute name. Attribute names not specified use the **lowercase**\n * normalized name.\n *\n * DOMAttributeNamespaces: object mapping React attribute name to the DOM\n * attribute namespace URL. (Attribute names not specified use no namespace.)\n *\n * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\n * Property names not specified use the normalized name.\n *\n * DOMMutationMethods: Properties that require special mutation methods. If\n * `value` is undefined, the mutation method should unset the property.\n *\n * @param {object} domPropertyConfig the config as described above.\n */\n injectDOMPropertyConfig: function (domPropertyConfig) {\n var Injection = DOMPropertyInjection;\n var Properties = domPropertyConfig.Properties || {};\n var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};\n var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\n var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\n var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\n\n if (domPropertyConfig.isCustomAttribute) {\n DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);\n }\n\n for (var propName in Properties) {\n !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\\'re trying to inject DOM property \\'%s\\' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.', propName) : _prodInvariant('48', propName) : void 0;\n\n var lowerCased = propName.toLowerCase();\n var propConfig = Properties[propName];\n\n var propertyInfo = {\n attributeName: lowerCased,\n attributeNamespace: null,\n propertyName: propName,\n mutationMethod: null,\n\n mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),\n hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),\n hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),\n hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),\n hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)\n };\n !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s', propName) : _prodInvariant('50', propName) : void 0;\n\n if (process.env.NODE_ENV !== 'production') {\n DOMProperty.getPossibleStandardName[lowerCased] = propName;\n }\n\n if (DOMAttributeNames.hasOwnProperty(propName)) {\n var attributeName = DOMAttributeNames[propName];\n propertyInfo.attributeName = attributeName;\n if (process.env.NODE_ENV !== 'production') {\n DOMProperty.getPossibleStandardName[attributeName] = propName;\n }\n }\n\n if (DOMAttributeNamespaces.hasOwnProperty(propName)) {\n propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];\n }\n\n if (DOMPropertyNames.hasOwnProperty(propName)) {\n propertyInfo.propertyName = DOMPropertyNames[propName];\n }\n\n if (DOMMutationMethods.hasOwnProperty(propName)) {\n propertyInfo.mutationMethod = DOMMutationMethods[propName];\n }\n\n DOMProperty.properties[propName] = propertyInfo;\n }\n }\n};\n\n/* eslint-disable max-len */\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';\n/* eslint-enable max-len */\n\n/**\n * DOMProperty exports lookup objects that can be used like functions:\n *\n * > DOMProperty.isValid['id']\n * true\n * > DOMProperty.isValid['foobar']\n * undefined\n *\n * Although this may be confusing, it performs better in general.\n *\n * @see http://jsperf.com/key-exists\n * @see http://jsperf.com/key-missing\n */\nvar DOMProperty = {\n\n ID_ATTRIBUTE_NAME: 'data-reactid',\n ROOT_ATTRIBUTE_NAME: 'data-reactroot',\n\n ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,\n ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040',\n\n /**\n * Map from property \"standard name\" to an object with info about how to set\n * the property in the DOM. Each object contains:\n *\n * attributeName:\n * Used when rendering markup or with `*Attribute()`.\n * attributeNamespace\n * propertyName:\n * Used on DOM node instances. (This includes properties that mutate due to\n * external factors.)\n * mutationMethod:\n * If non-null, used instead of the property or `setAttribute()` after\n * initial render.\n * mustUseProperty:\n * Whether the property must be accessed and mutated as an object property.\n * hasBooleanValue:\n * Whether the property should be removed when set to a falsey value.\n * hasNumericValue:\n * Whether the property must be numeric or parse as a numeric and should be\n * removed when set to a falsey value.\n * hasPositiveNumericValue:\n * Whether the property must be positive numeric or parse as a positive\n * numeric and should be removed when set to a falsey value.\n * hasOverloadedBooleanValue:\n * Whether the property can be used as a flag as well as with a value.\n * Removed when strictly equal to false; present without a value when\n * strictly equal to true; present with a value otherwise.\n */\n properties: {},\n\n /**\n * Mapping from lowercase property names to the properly cased version, used\n * to warn in the case of missing properties. Available only in __DEV__.\n *\n * autofocus is predefined, because adding it to the property whitelist\n * causes unintended side effects.\n *\n * @type {Object}\n */\n getPossibleStandardName: process.env.NODE_ENV !== 'production' ? { autofocus: 'autoFocus' } : null,\n\n /**\n * All of the isCustomAttribute() functions that have been injected.\n */\n _isCustomAttributeFunctions: [],\n\n /**\n * Checks whether a property name is a custom attribute.\n * @method\n */\n isCustomAttribute: function (attributeName) {\n for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\n var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\n if (isCustomAttributeFn(attributeName)) {\n return true;\n }\n }\n return false;\n },\n\n injection: DOMPropertyInjection\n};\n\nmodule.exports = DOMProperty;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ReactRef = require('./ReactRef');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Helper to call ReactRef.attachRefs with this composite component, split out\n * to avoid allocations in the transaction mount-ready queue.\n */\nfunction attachRefs() {\n ReactRef.attachRefs(this, this._currentElement);\n}\n\nvar ReactReconciler = {\n\n /**\n * Initializes the component, renders markup, and registers event listeners.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {?object} the containing host component instance\n * @param {?object} info about the host container\n * @return {?string} Rendered markup to be inserted into the DOM.\n * @final\n * @internal\n */\n mountComponent: function (internalInstance, transaction, hostParent, hostContainerInfo, context, parentDebugID // 0 in production and for roots\n ) {\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeMountComponent(internalInstance._debugID, internalInstance._currentElement, parentDebugID);\n }\n }\n var markup = internalInstance.mountComponent(transaction, hostParent, hostContainerInfo, context, parentDebugID);\n if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onMountComponent(internalInstance._debugID);\n }\n }\n return markup;\n },\n\n /**\n * Returns a value that can be passed to\n * ReactComponentEnvironment.replaceNodeWithMarkup.\n */\n getHostNode: function (internalInstance) {\n return internalInstance.getHostNode();\n },\n\n /**\n * Releases any resources allocated by `mountComponent`.\n *\n * @final\n * @internal\n */\n unmountComponent: function (internalInstance, safely) {\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeUnmountComponent(internalInstance._debugID);\n }\n }\n ReactRef.detachRefs(internalInstance, internalInstance._currentElement);\n internalInstance.unmountComponent(safely);\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onUnmountComponent(internalInstance._debugID);\n }\n }\n },\n\n /**\n * Update a component using a new element.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactElement} nextElement\n * @param {ReactReconcileTransaction} transaction\n * @param {object} context\n * @internal\n */\n receiveComponent: function (internalInstance, nextElement, transaction, context) {\n var prevElement = internalInstance._currentElement;\n\n if (nextElement === prevElement && context === internalInstance._context) {\n // Since elements are immutable after the owner is rendered,\n // we can do a cheap identity compare here to determine if this is a\n // superfluous reconcile. It's possible for state to be mutable but such\n // change should trigger an update of the owner which would recreate\n // the element. We explicitly check for the existence of an owner since\n // it's possible for an element created outside a composite to be\n // deeply mutated and reused.\n\n // TODO: Bailing out early is just a perf optimization right?\n // TODO: Removing the return statement should affect correctness?\n return;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, nextElement);\n }\n }\n\n var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);\n\n if (refsChanged) {\n ReactRef.detachRefs(internalInstance, prevElement);\n }\n\n internalInstance.receiveComponent(nextElement, transaction, context);\n\n if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);\n }\n }\n },\n\n /**\n * Flush any dirty changes in a component.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n performUpdateIfNecessary: function (internalInstance, transaction, updateBatchNumber) {\n if (internalInstance._updateBatchNumber !== updateBatchNumber) {\n // The component's enqueued batch number should always be the current\n // batch or the following one.\n process.env.NODE_ENV !== 'production' ? warning(internalInstance._updateBatchNumber == null || internalInstance._updateBatchNumber === updateBatchNumber + 1, 'performUpdateIfNecessary: Unexpected batch number (current %s, ' + 'pending %s)', updateBatchNumber, internalInstance._updateBatchNumber) : void 0;\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, internalInstance._currentElement);\n }\n }\n internalInstance.performUpdateIfNecessary(transaction);\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);\n }\n }\n }\n\n};\n\nmodule.exports = ReactReconciler;","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar DOMNamespaces = require('./DOMNamespaces');\nvar setInnerHTML = require('./setInnerHTML');\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\nvar setTextContent = require('./setTextContent');\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\n/**\n * In IE (8-11) and Edge, appending nodes with no children is dramatically\n * faster than appending a full subtree, so we essentially queue up the\n * .appendChild calls here and apply them so each node is added to its parent\n * before any children are added.\n *\n * In other browsers, doing so is slower or neutral compared to the other order\n * (in Firefox, twice as slow) so we only do this inversion in IE.\n *\n * See https://github.com/spicyj/innerhtml-vs-createelement-vs-clonenode.\n */\nvar enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\\bEdge\\/\\d/.test(navigator.userAgent);\n\nfunction insertTreeChildren(tree) {\n if (!enableLazy) {\n return;\n }\n var node = tree.node;\n var children = tree.children;\n if (children.length) {\n for (var i = 0; i < children.length; i++) {\n insertTreeBefore(node, children[i], null);\n }\n } else if (tree.html != null) {\n setInnerHTML(node, tree.html);\n } else if (tree.text != null) {\n setTextContent(node, tree.text);\n }\n}\n\nvar insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) {\n // DocumentFragments aren't actually part of the DOM after insertion so\n // appending children won't update the DOM. We need to ensure the fragment\n // is properly populated first, breaking out of our lazy approach for just\n // this level. Also, some plugins (like Flash Player) will read\n // nodes immediately upon insertion into the DOM, so \n // must also be populated prior to insertion into the DOM.\n if (tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE || tree.node.nodeType === ELEMENT_NODE_TYPE && tree.node.nodeName.toLowerCase() === 'object' && (tree.node.namespaceURI == null || tree.node.namespaceURI === DOMNamespaces.html)) {\n insertTreeChildren(tree);\n parentNode.insertBefore(tree.node, referenceNode);\n } else {\n parentNode.insertBefore(tree.node, referenceNode);\n insertTreeChildren(tree);\n }\n});\n\nfunction replaceChildWithTree(oldNode, newTree) {\n oldNode.parentNode.replaceChild(newTree.node, oldNode);\n insertTreeChildren(newTree);\n}\n\nfunction queueChild(parentTree, childTree) {\n if (enableLazy) {\n parentTree.children.push(childTree);\n } else {\n parentTree.node.appendChild(childTree.node);\n }\n}\n\nfunction queueHTML(tree, html) {\n if (enableLazy) {\n tree.html = html;\n } else {\n setInnerHTML(tree.node, html);\n }\n}\n\nfunction queueText(tree, text) {\n if (enableLazy) {\n tree.text = text;\n } else {\n setTextContent(tree.node, text);\n }\n}\n\nfunction toString() {\n return this.node.nodeName;\n}\n\nfunction DOMLazyTree(node) {\n return {\n node: node,\n children: [],\n html: null,\n text: null,\n toString: toString\n };\n}\n\nDOMLazyTree.insertTreeBefore = insertTreeBefore;\nDOMLazyTree.replaceChildWithTree = replaceChildWithTree;\nDOMLazyTree.queueChild = queueChild;\nDOMLazyTree.queueHTML = queueHTML;\nDOMLazyTree.queueText = queueText;\n\nmodule.exports = DOMLazyTree;","'use strict';\n\nexports.__esModule = true;\nexports.compilePattern = compilePattern;\nexports.matchPattern = matchPattern;\nexports.getParamNames = getParamNames;\nexports.getParams = getParams;\nexports.formatPattern = formatPattern;\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction _compilePattern(pattern) {\n var regexpSource = '';\n var paramNames = [];\n var tokens = [];\n\n var match = void 0,\n lastIndex = 0,\n matcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|\\*\\*|\\*|\\(|\\)/g;\n while (match = matcher.exec(pattern)) {\n if (match.index !== lastIndex) {\n tokens.push(pattern.slice(lastIndex, match.index));\n regexpSource += escapeRegExp(pattern.slice(lastIndex, match.index));\n }\n\n if (match[1]) {\n regexpSource += '([^/]+)';\n paramNames.push(match[1]);\n } else if (match[0] === '**') {\n regexpSource += '(.*)';\n paramNames.push('splat');\n } else if (match[0] === '*') {\n regexpSource += '(.*?)';\n paramNames.push('splat');\n } else if (match[0] === '(') {\n regexpSource += '(?:';\n } else if (match[0] === ')') {\n regexpSource += ')?';\n }\n\n tokens.push(match[0]);\n\n lastIndex = matcher.lastIndex;\n }\n\n if (lastIndex !== pattern.length) {\n tokens.push(pattern.slice(lastIndex, pattern.length));\n regexpSource += escapeRegExp(pattern.slice(lastIndex, pattern.length));\n }\n\n return {\n pattern: pattern,\n regexpSource: regexpSource,\n paramNames: paramNames,\n tokens: tokens\n };\n}\n\nvar CompiledPatternsCache = Object.create(null);\n\nfunction compilePattern(pattern) {\n if (!CompiledPatternsCache[pattern]) CompiledPatternsCache[pattern] = _compilePattern(pattern);\n\n return CompiledPatternsCache[pattern];\n}\n\n/**\n * Attempts to match a pattern on the given pathname. Patterns may use\n * the following special characters:\n *\n * - :paramName Matches a URL segment up to the next /, ?, or #. The\n * captured string is considered a \"param\"\n * - () Wraps a segment of the URL that is optional\n * - * Consumes (non-greedy) all characters up to the next\n * character in the pattern, or to the end of the URL if\n * there is none\n * - ** Consumes (greedy) all characters up to the next character\n * in the pattern, or to the end of the URL if there is none\n *\n * The function calls callback(error, matched) when finished.\n * The return value is an object with the following properties:\n *\n * - remainingPathname\n * - paramNames\n * - paramValues\n */\nfunction matchPattern(pattern, pathname) {\n // Ensure pattern starts with leading slash for consistency with pathname.\n if (pattern.charAt(0) !== '/') {\n pattern = '/' + pattern;\n }\n\n var _compilePattern2 = compilePattern(pattern),\n regexpSource = _compilePattern2.regexpSource,\n paramNames = _compilePattern2.paramNames,\n tokens = _compilePattern2.tokens;\n\n if (pattern.charAt(pattern.length - 1) !== '/') {\n regexpSource += '/?'; // Allow optional path separator at end.\n }\n\n // Special-case patterns like '*' for catch-all routes.\n if (tokens[tokens.length - 1] === '*') {\n regexpSource += '$';\n }\n\n var match = pathname.match(new RegExp('^' + regexpSource, 'i'));\n if (match == null) {\n return null;\n }\n\n var matchedPath = match[0];\n var remainingPathname = pathname.substr(matchedPath.length);\n\n if (remainingPathname) {\n // Require that the match ends at a path separator, if we didn't match\n // the full path, so any remaining pathname is a new path segment.\n if (matchedPath.charAt(matchedPath.length - 1) !== '/') {\n return null;\n }\n\n // If there is a remaining pathname, treat the path separator as part of\n // the remaining pathname for properly continuing the match.\n remainingPathname = '/' + remainingPathname;\n }\n\n return {\n remainingPathname: remainingPathname,\n paramNames: paramNames,\n paramValues: match.slice(1).map(function (v) {\n return v && decodeURIComponent(v);\n })\n };\n}\n\nfunction getParamNames(pattern) {\n return compilePattern(pattern).paramNames;\n}\n\nfunction getParams(pattern, pathname) {\n var match = matchPattern(pattern, pathname);\n if (!match) {\n return null;\n }\n\n var paramNames = match.paramNames,\n paramValues = match.paramValues;\n\n var params = {};\n\n paramNames.forEach(function (paramName, index) {\n params[paramName] = paramValues[index];\n });\n\n return params;\n}\n\n/**\n * Returns a version of the given pattern with params interpolated. Throws\n * if there is a dynamic segment of the pattern for which there is no param.\n */\nfunction formatPattern(pattern, params) {\n params = params || {};\n\n var _compilePattern3 = compilePattern(pattern),\n tokens = _compilePattern3.tokens;\n\n var parenCount = 0,\n pathname = '',\n splatIndex = 0,\n parenHistory = [];\n\n var token = void 0,\n paramName = void 0,\n paramValue = void 0;\n for (var i = 0, len = tokens.length; i < len; ++i) {\n token = tokens[i];\n\n if (token === '*' || token === '**') {\n paramValue = Array.isArray(params.splat) ? params.splat[splatIndex++] : params.splat;\n\n !(paramValue != null || parenCount > 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Missing splat #%s for path \"%s\"', splatIndex, pattern) : (0, _invariant2.default)(false) : void 0;\n\n if (paramValue != null) pathname += encodeURI(paramValue);\n } else if (token === '(') {\n parenHistory[parenCount] = '';\n parenCount += 1;\n } else if (token === ')') {\n var parenText = parenHistory.pop();\n parenCount -= 1;\n\n if (parenCount) parenHistory[parenCount - 1] += parenText;else pathname += parenText;\n } else if (token.charAt(0) === ':') {\n paramName = token.substring(1);\n paramValue = params[paramName];\n\n !(paramValue != null || parenCount > 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Missing \"%s\" parameter for path \"%s\"', paramName, pattern) : (0, _invariant2.default)(false) : void 0;\n\n if (paramValue == null) {\n if (parenCount) {\n parenHistory[parenCount - 1] = '';\n\n var curTokenIdx = tokens.indexOf(token);\n var tokensSubset = tokens.slice(curTokenIdx, tokens.length);\n var nextParenIdx = -1;\n\n for (var _i = 0; _i < tokensSubset.length; _i++) {\n if (tokensSubset[_i] == ')') {\n nextParenIdx = _i;\n break;\n }\n }\n\n !(nextParenIdx > 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Path \"%s\" is missing end paren at segment \"%s\"', pattern, tokensSubset.join('')) : (0, _invariant2.default)(false) : void 0;\n\n // jump to ending paren\n i = curTokenIdx + nextParenIdx - 1;\n }\n } else if (parenCount) parenHistory[parenCount - 1] += encodeURIComponent(paramValue);else pathname += encodeURIComponent(paramValue);\n } else {\n if (parenCount) parenHistory[parenCount - 1] += token;else pathname += token;\n }\n }\n\n !(parenCount <= 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Path \"%s\" is missing end paren', pattern) : (0, _invariant2.default)(false) : void 0;\n\n return pathname.replace(/\\/+/g, '/');\n}","'use strict';\n\nexports.__esModule = true;\nexports.default = routerWarning;\nexports._resetWarned = _resetWarned;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar warned = {};\n\nfunction routerWarning(falseToWarn, message) {\n // Only issue deprecation warnings once.\n if (message.indexOf('deprecated') !== -1) {\n if (warned[message]) {\n return;\n }\n\n warned[message] = true;\n }\n\n message = '[react-router] ' + message;\n\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n _warning2.default.apply(undefined, [falseToWarn, message].concat(args));\n}\n\nfunction _resetWarned() {\n warned = {};\n}","'use strict';\n\nexports.__esModule = true;\nexports.locationsAreEqual = exports.statesAreEqual = exports.createLocation = exports.createQuery = undefined;\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 _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 _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _PathUtils = require('./PathUtils');\n\nvar _Actions = require('./Actions');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createQuery = exports.createQuery = function createQuery(props) {\n return _extends(Object.create(null), props);\n};\n\nvar createLocation = exports.createLocation = function createLocation() {\n var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '/';\n var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _Actions.POP;\n var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n var object = typeof input === 'string' ? (0, _PathUtils.parsePath)(input) : input;\n\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(!object.path, 'Location descriptor objects should have a `pathname`, not a `path`.') : void 0;\n\n var pathname = object.pathname || '/';\n var search = object.search || '';\n var hash = object.hash || '';\n var state = object.state;\n\n return {\n pathname: pathname,\n search: search,\n hash: hash,\n state: state,\n action: action,\n key: key\n };\n};\n\nvar isDate = function isDate(object) {\n return Object.prototype.toString.call(object) === '[object Date]';\n};\n\nvar statesAreEqual = exports.statesAreEqual = function statesAreEqual(a, b) {\n if (a === b) return true;\n\n var typeofA = typeof a === 'undefined' ? 'undefined' : _typeof(a);\n var typeofB = typeof b === 'undefined' ? 'undefined' : _typeof(b);\n\n if (typeofA !== typeofB) return false;\n\n !(typeofA !== 'function') ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'You must not store functions in location state') : (0, _invariant2.default)(false) : void 0;\n\n // Not the same object, but same type.\n if (typeofA === 'object') {\n !!(isDate(a) && isDate(b)) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'You must not store Date objects in location state') : (0, _invariant2.default)(false) : void 0;\n\n if (!Array.isArray(a)) {\n var keysofA = Object.keys(a);\n var keysofB = Object.keys(b);\n return keysofA.length === keysofB.length && keysofA.every(function (key) {\n return statesAreEqual(a[key], b[key]);\n });\n }\n\n return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {\n return statesAreEqual(item, b[index]);\n });\n }\n\n // All other serializable types (string, number, boolean)\n // should be strict equal.\n return false;\n};\n\nvar locationsAreEqual = exports.locationsAreEqual = function locationsAreEqual(a, b) {\n return a.key === b.key &&\n // a.action === b.action && // Different action !== location change.\n a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && statesAreEqual(a.state, b.state);\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\nmodule.exports = isArray;\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","'use strict';\n\n\nfunction isNothing(subject) {\n return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n\n return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n\n if (source) {\n sourceKeys = Object.keys(source);\n\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n\nfunction repeat(string, count) {\n var result = '', cycle;\n\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n\n return result;\n}\n\n\nfunction isNegativeZero(number) {\n return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nmodule.exports.isNothing = isNothing;\nmodule.exports.isObject = isObject;\nmodule.exports.toArray = toArray;\nmodule.exports.repeat = repeat;\nmodule.exports.isNegativeZero = isNegativeZero;\nmodule.exports.extend = extend;\n","'use strict';\n\n/*eslint-disable max-len*/\n\nvar common = require('./common');\nvar YAMLException = require('./exception');\nvar Type = require('./type');\n\n\nfunction compileList(schema, name, result) {\n var exclude = [];\n\n schema.include.forEach(function (includedSchema) {\n result = compileList(includedSchema, name, result);\n });\n\n schema[name].forEach(function (currentType) {\n result.forEach(function (previousType, previousIndex) {\n if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) {\n exclude.push(previousIndex);\n }\n });\n\n result.push(currentType);\n });\n\n return result.filter(function (type, index) {\n return exclude.indexOf(index) === -1;\n });\n}\n\n\nfunction compileMap(/* lists... */) {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {}\n }, index, length;\n\n function collectType(type) {\n result[type.kind][type.tag] = result['fallback'][type.tag] = type;\n }\n\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n\n\nfunction Schema(definition) {\n this.include = definition.include || [];\n this.implicit = definition.implicit || [];\n this.explicit = definition.explicit || [];\n\n this.implicit.forEach(function (type) {\n if (type.loadKind && type.loadKind !== 'scalar') {\n throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n }\n });\n\n this.compiledImplicit = compileList(this, 'implicit', []);\n this.compiledExplicit = compileList(this, 'explicit', []);\n this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit);\n}\n\n\nSchema.DEFAULT = null;\n\n\nSchema.create = function createSchema() {\n var schemas, types;\n\n switch (arguments.length) {\n case 1:\n schemas = Schema.DEFAULT;\n types = arguments[0];\n break;\n\n case 2:\n schemas = arguments[0];\n types = arguments[1];\n break;\n\n default:\n throw new YAMLException('Wrong number of arguments for Schema.create function');\n }\n\n schemas = common.toArray(schemas);\n types = common.toArray(types);\n\n if (!schemas.every(function (schema) { return schema instanceof Schema; })) {\n throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.');\n }\n\n if (!types.every(function (type) { return type instanceof Type; })) {\n throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n\n return new Schema({\n include: schemas,\n explicit: types\n });\n};\n\n\nmodule.exports = Schema;\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 freeGlobal from './_freeGlobal.js';\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\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\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\nexport default 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\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\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\nexport default baseGetTag;\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 */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\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\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\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 */\nfunction 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\nexport default isPlainObject;\n","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPluginUtils = require('./EventPluginUtils');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\nvar warning = require('fbjs/lib/warning');\n\nvar getListener = EventPluginHub.getListener;\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(inst, event, propagationPhase) {\n var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n return getListener(inst, registrationName);\n}\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\nfunction accumulateDirectionalDispatches(inst, phase, event) {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(inst, 'Dispatching inst must not be null') : void 0;\n }\n var listener = listenerAtPhase(inst, event, phase);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n}\n\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory. We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n EventPluginUtils.traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.\n */\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n var targetInst = event._targetInst;\n var parentInst = targetInst ? EventPluginUtils.getParentInstance(targetInst) : null;\n EventPluginUtils.traverseTwoPhase(parentInst, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\nfunction accumulateDispatches(inst, ignoredDirection, event) {\n if (event && event.dispatchConfig.registrationName) {\n var registrationName = event.dispatchConfig.registrationName;\n var listener = getListener(inst, registrationName);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n }\n}\n\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\nfunction accumulateDirectDispatchesSingle(event) {\n if (event && event.dispatchConfig.registrationName) {\n accumulateDispatches(event._targetInst, null, event);\n }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\n\nfunction accumulateTwoPhaseDispatchesSkipTarget(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);\n}\n\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\n EventPluginUtils.traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\n}\n\nfunction accumulateDirectDispatches(events) {\n forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing event a\n * single one.\n *\n * @constructor EventPropagators\n */\nvar EventPropagators = {\n accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\n accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,\n accumulateDirectDispatches: accumulateDirectDispatches,\n accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\n};\n\nmodule.exports = EventPropagators;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar EventPluginUtils = require('./EventPluginUtils');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Internal store for event listeners\n */\nvar listenerBank = {};\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\nvar eventQueue = null;\n\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @private\n */\nvar executeDispatchesAndRelease = function (event, simulated) {\n if (event) {\n EventPluginUtils.executeDispatchesInOrder(event, simulated);\n\n if (!event.isPersistent()) {\n event.constructor.release(event);\n }\n }\n};\nvar executeDispatchesAndReleaseSimulated = function (e) {\n return executeDispatchesAndRelease(e, true);\n};\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n return executeDispatchesAndRelease(e, false);\n};\n\nvar getDictionaryKey = function (inst) {\n // Prevents V8 performance issue:\n // https://github.com/facebook/react/pull/7232\n return '.' + inst._rootNodeID;\n};\n\nfunction isInteractive(tag) {\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nfunction shouldPreventMouseEvent(name, type, props) {\n switch (name) {\n case 'onClick':\n case 'onClickCapture':\n case 'onDoubleClick':\n case 'onDoubleClickCapture':\n case 'onMouseDown':\n case 'onMouseDownCapture':\n case 'onMouseMove':\n case 'onMouseMoveCapture':\n case 'onMouseUp':\n case 'onMouseUpCapture':\n return !!(props.disabled && isInteractive(type));\n default:\n return false;\n }\n}\n\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n * `extractEvents` {function(string, DOMEventTarget, string, object): *}\n * Required. When a top-level event is fired, this method is expected to\n * extract synthetic events that will in turn be queued and dispatched.\n *\n * `eventTypes` {object}\n * Optional, plugins that fire events must publish a mapping of registration\n * names that are used to register listeners. Values of this mapping must\n * be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n * `executeDispatch` {function(object, function, string)}\n * Optional, allows plugins to override how an event gets dispatched. By\n * default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\nvar EventPluginHub = {\n\n /**\n * Methods for injecting dependencies.\n */\n injection: {\n\n /**\n * @param {array} InjectedEventPluginOrder\n * @public\n */\n injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\n\n /**\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n */\n injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\n\n },\n\n /**\n * Stores `listener` at `listenerBank[registrationName][key]`. Is idempotent.\n *\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {function} listener The callback to store.\n */\n putListener: function (inst, registrationName, listener) {\n !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : _prodInvariant('94', registrationName, typeof listener) : void 0;\n\n var key = getDictionaryKey(inst);\n var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});\n bankForRegistrationName[key] = listener;\n\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.didPutListener) {\n PluginModule.didPutListener(inst, registrationName, listener);\n }\n },\n\n /**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n getListener: function (inst, registrationName) {\n // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not\n // live here; needs to be moved to a better place soon\n var bankForRegistrationName = listenerBank[registrationName];\n if (shouldPreventMouseEvent(registrationName, inst._currentElement.type, inst._currentElement.props)) {\n return null;\n }\n var key = getDictionaryKey(inst);\n return bankForRegistrationName && bankForRegistrationName[key];\n },\n\n /**\n * Deletes a listener from the registration bank.\n *\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n */\n deleteListener: function (inst, registrationName) {\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.willDeleteListener) {\n PluginModule.willDeleteListener(inst, registrationName);\n }\n\n var bankForRegistrationName = listenerBank[registrationName];\n // TODO: This should never be null -- when is it?\n if (bankForRegistrationName) {\n var key = getDictionaryKey(inst);\n delete bankForRegistrationName[key];\n }\n },\n\n /**\n * Deletes all listeners for the DOM element with the supplied ID.\n *\n * @param {object} inst The instance, which is the source of events.\n */\n deleteAllListeners: function (inst) {\n var key = getDictionaryKey(inst);\n for (var registrationName in listenerBank) {\n if (!listenerBank.hasOwnProperty(registrationName)) {\n continue;\n }\n\n if (!listenerBank[registrationName][key]) {\n continue;\n }\n\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.willDeleteListener) {\n PluginModule.willDeleteListener(inst, registrationName);\n }\n\n delete listenerBank[registrationName][key];\n }\n },\n\n /**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var events;\n var plugins = EventPluginRegistry.plugins;\n for (var i = 0; i < plugins.length; i++) {\n // Not every plugin in the ordering may be loaded at runtime.\n var possiblePlugin = plugins[i];\n if (possiblePlugin) {\n var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n if (extractedEvents) {\n events = accumulateInto(events, extractedEvents);\n }\n }\n }\n return events;\n },\n\n /**\n * Enqueues a synthetic event that should be dispatched when\n * `processEventQueue` is invoked.\n *\n * @param {*} events An accumulation of synthetic events.\n * @internal\n */\n enqueueEvents: function (events) {\n if (events) {\n eventQueue = accumulateInto(eventQueue, events);\n }\n },\n\n /**\n * Dispatches all synthetic events on the event queue.\n *\n * @internal\n */\n processEventQueue: function (simulated) {\n // Set `eventQueue` to null before processing it so that we can tell if more\n // events get enqueued while processing.\n var processingEventQueue = eventQueue;\n eventQueue = null;\n if (simulated) {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);\n } else {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n }\n !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : _prodInvariant('95') : void 0;\n // This would be a good time to rethrow if any of the event handlers threw.\n ReactErrorUtils.rethrowCaughtError();\n },\n\n /**\n * These are needed for tests only. Do not use!\n */\n __purge: function () {\n listenerBank = {};\n },\n\n __getListenerBank: function () {\n return listenerBank;\n }\n\n};\n\nmodule.exports = EventPluginHub;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\n\n/**\n * @interface UIEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar UIEventInterface = {\n view: function (event) {\n if (event.view) {\n return event.view;\n }\n\n var target = getEventTarget(event);\n if (target.window === target) {\n // target is a window object\n return target;\n }\n\n var doc = target.ownerDocument;\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n if (doc) {\n return doc.defaultView || doc.parentWindow;\n } else {\n return window;\n }\n },\n detail: function (event) {\n return event.detail || 0;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\n\nmodule.exports = SyntheticUIEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n */\n\n// TODO: Replace this with ES6: var ReactInstanceMap = new Map();\n\nvar ReactInstanceMap = {\n\n /**\n * This API should be called `delete` but we'd have to make sure to always\n * transform these to strings for IE support. When this transform is fully\n * supported we can rename it.\n */\n remove: function (key) {\n key._reactInternalInstance = undefined;\n },\n\n get: function (key) {\n return key._reactInternalInstance;\n },\n\n has: function (key) {\n return key._reactInternalInstance !== undefined;\n },\n\n set: function (key, value) {\n key._reactInternalInstance = value;\n }\n\n};\n\nmodule.exports = ReactInstanceMap;","'use strict';\n\nexports.__esModule = true;\nexports.routes = exports.route = exports.components = exports.component = exports.history = undefined;\nexports.falsy = falsy;\n\nvar _react = require('react');\n\nvar func = _react.PropTypes.func,\n object = _react.PropTypes.object,\n arrayOf = _react.PropTypes.arrayOf,\n oneOfType = _react.PropTypes.oneOfType,\n element = _react.PropTypes.element,\n shape = _react.PropTypes.shape,\n string = _react.PropTypes.string;\nfunction falsy(props, propName, componentName) {\n if (props[propName]) return new Error('<' + componentName + '> should not have a \"' + propName + '\" prop');\n}\n\nvar history = exports.history = shape({\n listen: func.isRequired,\n push: func.isRequired,\n replace: func.isRequired,\n go: func.isRequired,\n goBack: func.isRequired,\n goForward: func.isRequired\n});\n\nvar component = exports.component = oneOfType([func, string]);\nvar components = exports.components = oneOfType([component, object]);\nvar route = exports.route = oneOfType([object, element]);\nvar routes = exports.routes = oneOfType([route, arrayOf(route)]);","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 assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\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 */\nfunction 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\nmodule.exports = copyObject;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\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\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\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 */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","// YAML error class. http://stackoverflow.com/questions/8458984\n//\n'use strict';\n\nfunction YAMLException(reason, mark) {\n // Super constructor\n Error.call(this);\n\n this.name = 'YAMLException';\n this.reason = reason;\n this.mark = mark;\n this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : '');\n\n // Include stack trace in error object\n if (Error.captureStackTrace) {\n // Chrome and NodeJS\n Error.captureStackTrace(this, this.constructor);\n } else {\n // FF, IE 10+ and Safari 6+. Fallback for others\n this.stack = (new Error()).stack || '';\n }\n}\n\n\n// Inherit from Error\nYAMLException.prototype = Object.create(Error.prototype);\nYAMLException.prototype.constructor = YAMLException;\n\n\nYAMLException.prototype.toString = function toString(compact) {\n var result = this.name + ': ';\n\n result += this.reason || '(unknown reason)';\n\n if (!compact && this.mark) {\n result += ' ' + this.mark.toString();\n }\n\n return result;\n};\n\n\nmodule.exports = YAMLException;\n","// JS-YAML's default schema for `safeLoad` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on standard YAML's Core schema and includes most of\n// extra types described at YAML tag repository. (http://yaml.org/type/)\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n include: [\n require('./core')\n ],\n implicit: [\n require('../type/timestamp'),\n require('../type/merge')\n ],\n explicit: [\n require('../type/binary'),\n require('../type/omap'),\n require('../type/pairs'),\n require('../type/set')\n ]\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\n'use strict';\n\nvar React = require('react');\nvar factory = require('./factory');\n\nif (typeof React === 'undefined') {\n throw Error(\n 'create-react-class could not find the React object. If you are using script tags, ' +\n 'make sure that React is being loaded before create-react-class.'\n );\n}\n\n// Hack to grab NoopUpdateQueue from isomorphic React\nvar ReactNoopUpdateQueue = new React.Component().updater;\n\nmodule.exports = factory(\n React.Component,\n React.isValidElement,\n ReactNoopUpdateQueue\n);\n","\"use strict\";\n\nexports.__esModule = true;\nexports.notify = notify;\nexports.instanceId = instanceId;\nexports.isFirstFocusedRender = isFirstFocusedRender;\nvar idCount = 0;\n\nfunction uniqueId(prefix) {\n return '' + ((prefix == null ? '' : prefix) + ++idCount);\n}\n\nfunction notify(handler, args) {\n handler && handler.apply(null, [].concat(args));\n}\n\nfunction instanceId(component, suffix) {\n if (suffix === void 0) {\n suffix = '';\n }\n\n component.__id || (component.__id = uniqueId('rw_'));\n return (component.props.id || component.__id) + suffix;\n}\n/**\n * Allows for defering popup rendering untill the widget is focused,\n * or has been opened (in order to not remove it suddenly on close)\n */\n\n\nfunction isFirstFocusedRender(component) {\n return component._firstFocus || (component.state.focused || !!component.props.open) && (component._firstFocus = true);\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.dataIndexOf = dataIndexOf;\nexports.valueMatcher = valueMatcher;\nexports.dataItem = dataItem;\nexports.dataText = exports.dataValue = void 0;\n\nvar _ = require(\"./_\");\n\nvar dataValue = function dataValue(data, field) {\n var value = data;\n if (typeof field === 'function') value = field(data);else if (data == null) value = data;else if (typeof field === 'string' && typeof data === 'object' && field in data) value = data[field];\n return value;\n};\n\nexports.dataValue = dataValue;\n\nvar dataText = function dataText(item, textField) {\n var value = dataValue(item, textField);\n return value == null ? '' : value + '';\n};\n\nexports.dataText = dataText;\n\nfunction dataIndexOf(data, item, valueField) {\n var idx = -1;\n\n var isValueEqual = function isValueEqual(datum) {\n return valueMatcher(item, datum, valueField);\n };\n\n while (++idx < data.length) {\n var datum = data[idx];\n if (datum === item || isValueEqual(datum)) return idx;\n }\n\n return -1;\n}\n/**\n * I don't know that the shallow equal makes sense here but am too afraid to\n * remove it.\n */\n\n\nfunction valueMatcher(a, b, valueField) {\n return (0, _.isShallowEqual)(dataValue(a, valueField), dataValue(b, valueField));\n}\n\nfunction dataItem(data, item, valueField) {\n var idx = dataIndexOf(data, item, valueField);\n return idx !== -1 ? data[idx] : item;\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}","export default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar OBSERVED_ERROR = {};\n\n/**\n * `Transaction` creates a black box that is able to wrap any method such that\n * certain invariants are maintained before and after the method is invoked\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\n * instantiates a transaction can provide enforcers of the invariants at\n * creation time. The `Transaction` class itself will supply one additional\n * automatic invariant for you - the invariant that any transaction instance\n * should not be run while it is already being run. You would typically create a\n * single instance of a `Transaction` for reuse multiple times, that potentially\n * is used to wrap several different methods. Wrappers are extremely simple -\n * they only require implementing two methods.\n *\n *
\n *                       wrappers (injected at creation time)\n *                                      +        +\n *                                      |        |\n *                    +-----------------|--------|--------------+\n *                    |                 v        |              |\n *                    |      +---------------+   |              |\n *                    |   +--|    wrapper1   |---|----+         |\n *                    |   |  +---------------+   v    |         |\n *                    |   |          +-------------+  |         |\n *                    |   |     +----|   wrapper2  |--------+   |\n *                    |   |     |    +-------------+  |     |   |\n *                    |   |     |                     |     |   |\n *                    |   v     v                     v     v   | wrapper\n *                    | +---+ +---+   +---------+   +---+ +---+ | invariants\n * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | +---+ +---+   +---------+   +---+ +---+ |\n *                    |  initialize                    close    |\n *                    +-----------------------------------------+\n * 
\n *\n * Use cases:\n * - Preserving the input selection ranges before/after reconciliation.\n * Restoring selection even in the event of an unexpected error.\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\n * while guaranteeing that afterwards, the event system is reactivated.\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\n * reconciliation takes place in a worker thread.\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\n * content.\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\n * to preserve the `scrollTop` (an automatic scroll aware DOM).\n * - (Future use case): Layout calculations before and after DOM updates.\n *\n * Transactional plugin API:\n * - A module that has an `initialize` method that returns any precomputation.\n * - and a `close` method that accepts the precomputation. `close` is invoked\n * when the wrapped process is completed, or has failed.\n *\n * @param {Array} transactionWrapper Wrapper modules\n * that implement `initialize` and `close`.\n * @return {Transaction} Single transaction for reuse in thread.\n *\n * @class Transaction\n */\nvar TransactionImpl = {\n /**\n * Sets up this instance so that it is prepared for collecting metrics. Does\n * so such that this setup method may be used on an instance that is already\n * initialized, in a way that does not consume additional memory upon reuse.\n * That can be useful if you decide to make your subclass of this mixin a\n * \"PooledClass\".\n */\n reinitializeTransaction: function () {\n this.transactionWrappers = this.getTransactionWrappers();\n if (this.wrapperInitData) {\n this.wrapperInitData.length = 0;\n } else {\n this.wrapperInitData = [];\n }\n this._isInTransaction = false;\n },\n\n _isInTransaction: false,\n\n /**\n * @abstract\n * @return {Array} Array of transaction wrappers.\n */\n getTransactionWrappers: null,\n\n isInTransaction: function () {\n return !!this._isInTransaction;\n },\n\n /**\n * Executes the function within a safety window. Use this for the top level\n * methods that result in large amounts of computation/mutations that would\n * need to be safety checked. The optional arguments helps prevent the need\n * to bind in many cases.\n *\n * @param {function} method Member of scope to call.\n * @param {Object} scope Scope to invoke from.\n * @param {Object?=} a Argument to pass to the method.\n * @param {Object?=} b Argument to pass to the method.\n * @param {Object?=} c Argument to pass to the method.\n * @param {Object?=} d Argument to pass to the method.\n * @param {Object?=} e Argument to pass to the method.\n * @param {Object?=} f Argument to pass to the method.\n *\n * @return {*} Return value from `method`.\n */\n perform: function (method, scope, a, b, c, d, e, f) {\n !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there is already an outstanding transaction.') : _prodInvariant('27') : void 0;\n var errorThrown;\n var ret;\n try {\n this._isInTransaction = true;\n // Catching errors makes debugging more difficult, so we start with\n // errorThrown set to true before setting it to false after calling\n // close -- if it's still set to true in the finally block, it means\n // one of these calls threw.\n errorThrown = true;\n this.initializeAll(0);\n ret = method.call(scope, a, b, c, d, e, f);\n errorThrown = false;\n } finally {\n try {\n if (errorThrown) {\n // If `method` throws, prefer to show that stack trace over any thrown\n // by invoking `closeAll`.\n try {\n this.closeAll(0);\n } catch (err) {}\n } else {\n // Since `method` didn't throw, we don't want to silence the exception\n // here.\n this.closeAll(0);\n }\n } finally {\n this._isInTransaction = false;\n }\n }\n return ret;\n },\n\n initializeAll: function (startIndex) {\n var transactionWrappers = this.transactionWrappers;\n for (var i = startIndex; i < transactionWrappers.length; i++) {\n var wrapper = transactionWrappers[i];\n try {\n // Catching errors makes debugging more difficult, so we start with the\n // OBSERVED_ERROR state before overwriting it with the real return value\n // of initialize -- if it's still set to OBSERVED_ERROR in the finally\n // block, it means wrapper.initialize threw.\n this.wrapperInitData[i] = OBSERVED_ERROR;\n this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;\n } finally {\n if (this.wrapperInitData[i] === OBSERVED_ERROR) {\n // The initializer for wrapper i threw an error; initialize the\n // remaining wrappers but silence any exceptions from them to ensure\n // that the first error is the one to bubble up.\n try {\n this.initializeAll(i + 1);\n } catch (err) {}\n }\n }\n }\n },\n\n /**\n * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\n * them the respective return values of `this.transactionWrappers.init[i]`\n * (`close`rs that correspond to initializers that failed will not be\n * invoked).\n */\n closeAll: function (startIndex) {\n !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : _prodInvariant('28') : void 0;\n var transactionWrappers = this.transactionWrappers;\n for (var i = startIndex; i < transactionWrappers.length; i++) {\n var wrapper = transactionWrappers[i];\n var initData = this.wrapperInitData[i];\n var errorThrown;\n try {\n // Catching errors makes debugging more difficult, so we start with\n // errorThrown set to true before setting it to false after calling\n // close -- if it's still set to true in the finally block, it means\n // wrapper.close threw.\n errorThrown = true;\n if (initData !== OBSERVED_ERROR && wrapper.close) {\n wrapper.close.call(this, initData);\n }\n errorThrown = false;\n } finally {\n if (errorThrown) {\n // The closer for wrapper i threw an error; close the remaining\n // wrappers but silence any exceptions from them to ensure that the\n // first error is the one to bubble up.\n try {\n this.closeAll(i + 1);\n } catch (e) {}\n }\n }\n }\n this.wrapperInitData.length = 0;\n }\n};\n\nmodule.exports = TransactionImpl;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar MouseEventInterface = {\n screenX: null,\n screenY: null,\n clientX: null,\n clientY: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n getModifierState: getEventModifierState,\n button: function (event) {\n // Webkit, Firefox, IE9+\n // which: 1 2 3\n // button: 0 1 2 (standard)\n var button = event.button;\n if ('which' in event) {\n return button;\n }\n // IE<9\n // which: undefined\n // button: 0 0 0\n // button: 1 4 2 (onmouseup)\n return button === 2 ? 2 : button === 4 ? 1 : 0;\n },\n buttons: null,\n relatedTarget: function (event) {\n return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n },\n // \"Proprietary\" Interface.\n pageX: function (event) {\n return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;\n },\n pageY: function (event) {\n return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\n\nmodule.exports = SyntheticMouseEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar DOMNamespaces = require('./DOMNamespaces');\n\nvar WHITESPACE_TEST = /^[ \\r\\n\\t\\f]/;\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/;\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\n\n// SVG temp container for IE lacking innerHTML\nvar reusableSVGContainer;\n\n/**\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\n * even in IE8.\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n // IE does not have innerHTML for SVG nodes, so instead we inject the\n // new markup in a temp node and then move the child nodes across into\n // the target node\n if (node.namespaceURI === DOMNamespaces.svg && !('innerHTML' in node)) {\n reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n reusableSVGContainer.innerHTML = '' + html + '';\n var svgNode = reusableSVGContainer.firstChild;\n while (svgNode.firstChild) {\n node.appendChild(svgNode.firstChild);\n }\n } else {\n node.innerHTML = html;\n }\n});\n\nif (ExecutionEnvironment.canUseDOM) {\n // IE8: When updating a just created node with innerHTML only leading\n // whitespace is removed. When updating an existing node with innerHTML\n // whitespace in root TextNodes is also collapsed.\n // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\n\n // Feature detection; only IE8 is known to behave improperly like this.\n var testElement = document.createElement('div');\n testElement.innerHTML = ' ';\n if (testElement.innerHTML === '') {\n setInnerHTML = function (node, html) {\n // Magic theory: IE8 supposedly differentiates between added and updated\n // nodes when processing innerHTML, innerHTML on updated nodes suffers\n // from worse whitespace behavior. Re-adding a node like this triggers\n // the initial and more favorable whitespace behavior.\n // TODO: What to do on a detached node?\n if (node.parentNode) {\n node.parentNode.replaceChild(node, node);\n }\n\n // We also implement a workaround for non-visible tags disappearing into\n // thin air on IE8, this only happens if there is no visible text\n // in-front of the non-visible tags. Piggyback on the whitespace fix\n // and simply check if any non-visible tags appear in the source.\n if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {\n // Recover leading whitespace by temporarily prepending any character.\n // \\uFEFF has the potential advantage of being zero-width/invisible.\n // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode\n // in hopes that this is preserved even if \"\\uFEFF\" is transformed to\n // the actual Unicode character (by Babel, for example).\n // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216\n node.innerHTML = String.fromCharCode(0xFEFF) + html;\n\n // deleteData leaves an empty `TextNode` which offsets the index of all\n // children. Definitely want to avoid this.\n var textNode = node.firstChild;\n if (textNode.data.length === 1) {\n node.removeChild(textNode);\n } else {\n textNode.deleteData(0, 1);\n }\n } else {\n node.innerHTML = html;\n }\n };\n }\n testElement = null;\n}\n\nmodule.exports = setInnerHTML;","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * Based on the escape-html library, which is used under the MIT License below:\n *\n * Copyright (c) 2012-2013 TJ Holowaychuk\n * Copyright (c) 2015 Andreas Lubbe\n * Copyright (c) 2015 Tiancheng \"Timothy\" Gu\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a 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\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n */\n\n'use strict';\n\n// code copied and modified from escape-html\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n // \"\n escape = '"';\n break;\n case 38:\n // &\n escape = '&';\n break;\n case 39:\n // '\n escape = '''; // modified from escape-html; used to be '''\n break;\n case 60:\n // <\n escape = '<';\n break;\n case 62:\n // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\n}\n// end code copied and modified from escape-html\n\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\nfunction escapeTextContentForBrowser(text) {\n if (typeof text === 'boolean' || typeof text === 'number') {\n // this shortcircuit helps perf for types that we know will never have\n // special characters, especially given that this function is used often\n // for numeric dom ids.\n return '' + text;\n }\n return escapeHtml(text);\n}\n\nmodule.exports = escapeTextContentForBrowser;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar ReactEventEmitterMixin = require('./ReactEventEmitterMixin');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar getVendorPrefixedEventName = require('./getVendorPrefixedEventName');\nvar isEventSupported = require('./isEventSupported');\n\n/**\n * Summary of `ReactBrowserEventEmitter` event handling:\n *\n * - Top-level delegation is used to trap most native browser events. This\n * may only occur in the main thread and is the responsibility of\n * ReactEventListener, which is injected and can therefore support pluggable\n * event sources. This is the only work that occurs in the main thread.\n *\n * - We normalize and de-duplicate events to account for browser quirks. This\n * may be done in the worker thread.\n *\n * - Forward these native events (with the associated top-level type used to\n * trap it) to `EventPluginHub`, which in turn will ask plugins if they want\n * to extract any synthetic events.\n *\n * - The `EventPluginHub` will then process each event by annotating them with\n * \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n * - The `EventPluginHub` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+ .\n * | DOM | .\n * +------------+ .\n * | .\n * v .\n * +------------+ .\n * | ReactEvent | .\n * | Listener | .\n * +------------+ . +-----------+\n * | . +--------+|SimpleEvent|\n * | . | |Plugin |\n * +-----|------+ . v +-----------+\n * | | | . +--------------+ +------------+\n * | +-----------.--->|EventPluginHub| | Event |\n * | | . | | +-----------+ | Propagators|\n * | ReactEvent | . | | |TapEvent | |------------|\n * | Emitter | . | |<---+|Plugin | |other plugin|\n * | | . | | +-----------+ | utilities |\n * | +-----------.--->| | +------------+\n * | | | . +--------------+\n * +-----|------+ . ^ +-----------+\n * | . | |Enter/Leave|\n * + . +-------+|Plugin |\n * +-------------+ . +-----------+\n * | application | .\n * |-------------| .\n * | | .\n * | | .\n * +-------------+ .\n * .\n * React Core . General Purpose Event Plugin System\n */\n\nvar hasEventPageXY;\nvar alreadyListeningTo = {};\nvar isMonitoringScrollValue = false;\nvar reactTopListenersCounter = 0;\n\n// For events like 'submit' which don't consistently bubble (which we trap at a\n// lower node than `document`), binding at `document` would cause duplicate\n// events so we don't include them here\nvar topEventMapping = {\n topAbort: 'abort',\n topAnimationEnd: getVendorPrefixedEventName('animationend') || 'animationend',\n topAnimationIteration: getVendorPrefixedEventName('animationiteration') || 'animationiteration',\n topAnimationStart: getVendorPrefixedEventName('animationstart') || 'animationstart',\n topBlur: 'blur',\n topCanPlay: 'canplay',\n topCanPlayThrough: 'canplaythrough',\n topChange: 'change',\n topClick: 'click',\n topCompositionEnd: 'compositionend',\n topCompositionStart: 'compositionstart',\n topCompositionUpdate: 'compositionupdate',\n topContextMenu: 'contextmenu',\n topCopy: 'copy',\n topCut: 'cut',\n topDoubleClick: 'dblclick',\n topDrag: 'drag',\n topDragEnd: 'dragend',\n topDragEnter: 'dragenter',\n topDragExit: 'dragexit',\n topDragLeave: 'dragleave',\n topDragOver: 'dragover',\n topDragStart: 'dragstart',\n topDrop: 'drop',\n topDurationChange: 'durationchange',\n topEmptied: 'emptied',\n topEncrypted: 'encrypted',\n topEnded: 'ended',\n topError: 'error',\n topFocus: 'focus',\n topInput: 'input',\n topKeyDown: 'keydown',\n topKeyPress: 'keypress',\n topKeyUp: 'keyup',\n topLoadedData: 'loadeddata',\n topLoadedMetadata: 'loadedmetadata',\n topLoadStart: 'loadstart',\n topMouseDown: 'mousedown',\n topMouseMove: 'mousemove',\n topMouseOut: 'mouseout',\n topMouseOver: 'mouseover',\n topMouseUp: 'mouseup',\n topPaste: 'paste',\n topPause: 'pause',\n topPlay: 'play',\n topPlaying: 'playing',\n topProgress: 'progress',\n topRateChange: 'ratechange',\n topScroll: 'scroll',\n topSeeked: 'seeked',\n topSeeking: 'seeking',\n topSelectionChange: 'selectionchange',\n topStalled: 'stalled',\n topSuspend: 'suspend',\n topTextInput: 'textInput',\n topTimeUpdate: 'timeupdate',\n topTouchCancel: 'touchcancel',\n topTouchEnd: 'touchend',\n topTouchMove: 'touchmove',\n topTouchStart: 'touchstart',\n topTransitionEnd: getVendorPrefixedEventName('transitionend') || 'transitionend',\n topVolumeChange: 'volumechange',\n topWaiting: 'waiting',\n topWheel: 'wheel'\n};\n\n/**\n * To ensure no conflicts with other potential React instances on the page\n */\nvar topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);\n\nfunction getListeningForDocument(mountAt) {\n // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\n // directly.\n if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\n mountAt[topListenersIDKey] = reactTopListenersCounter++;\n alreadyListeningTo[mountAt[topListenersIDKey]] = {};\n }\n return alreadyListeningTo[mountAt[topListenersIDKey]];\n}\n\n/**\n * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For\n * example:\n *\n * EventPluginHub.putListener('myID', 'onClick', myFunction);\n *\n * This would allocate a \"registration\" of `('onClick', myFunction)` on 'myID'.\n *\n * @internal\n */\nvar ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {\n\n /**\n * Injectable event backend\n */\n ReactEventListener: null,\n\n injection: {\n /**\n * @param {object} ReactEventListener\n */\n injectReactEventListener: function (ReactEventListener) {\n ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);\n ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;\n }\n },\n\n /**\n * Sets whether or not any created callbacks should be enabled.\n *\n * @param {boolean} enabled True if callbacks should be enabled.\n */\n setEnabled: function (enabled) {\n if (ReactBrowserEventEmitter.ReactEventListener) {\n ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);\n }\n },\n\n /**\n * @return {boolean} True if callbacks are enabled.\n */\n isEnabled: function () {\n return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());\n },\n\n /**\n * We listen for bubbled touch events on the document object.\n *\n * Firefox v8.01 (and possibly others) exhibited strange behavior when\n * mounting `onmousemove` events at some node that was not the document\n * element. The symptoms were that if your mouse is not moving over something\n * contained within that mount point (for example on the background) the\n * top-level listeners for `onmousemove` won't be called. However, if you\n * register the `mousemove` on the document object, then it will of course\n * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n * top-level listeners to the document object only, at least for these\n * movement types of events and possibly all events.\n *\n * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n *\n * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n * they bubble to document.\n *\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {object} contentDocumentHandle Document which owns the container\n */\n listenTo: function (registrationName, contentDocumentHandle) {\n var mountAt = contentDocumentHandle;\n var isListening = getListeningForDocument(mountAt);\n var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];\n\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n if (dependency === 'topWheel') {\n if (isEventSupported('wheel')) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topWheel', 'wheel', mountAt);\n } else if (isEventSupported('mousewheel')) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topWheel', 'mousewheel', mountAt);\n } else {\n // Firefox needs to capture a different mouse scroll event.\n // @see http://www.quirksmode.org/dom/events/tests/scroll.html\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topWheel', 'DOMMouseScroll', mountAt);\n }\n } else if (dependency === 'topScroll') {\n\n if (isEventSupported('scroll', true)) {\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent('topScroll', 'scroll', mountAt);\n } else {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topScroll', 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);\n }\n } else if (dependency === 'topFocus' || dependency === 'topBlur') {\n\n if (isEventSupported('focus', true)) {\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent('topFocus', 'focus', mountAt);\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent('topBlur', 'blur', mountAt);\n } else if (isEventSupported('focusin')) {\n // IE has `focusin` and `focusout` events which bubble.\n // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topFocus', 'focusin', mountAt);\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topBlur', 'focusout', mountAt);\n }\n\n // to make sure blur and focus event listeners are only attached once\n isListening.topBlur = true;\n isListening.topFocus = true;\n } else if (topEventMapping.hasOwnProperty(dependency)) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);\n }\n\n isListening[dependency] = true;\n }\n }\n },\n\n trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);\n },\n\n trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);\n },\n\n /**\n * Protect against document.createEvent() returning null\n * Some popup blocker extensions appear to do this:\n * https://github.com/facebook/react/issues/6887\n */\n supportsEventPageXY: function () {\n if (!document.createEvent) {\n return false;\n }\n var ev = document.createEvent('MouseEvent');\n return ev != null && 'pageX' in ev;\n },\n\n /**\n * Listens to window scroll and resize events. We cache scroll values so that\n * application code can access them without triggering reflows.\n *\n * ViewportMetrics is only used by SyntheticMouse/TouchEvent and only when\n * pageX/pageY isn't supported (legacy browsers).\n *\n * NOTE: Scroll events do not bubble.\n *\n * @see http://www.quirksmode.org/dom/events/scroll.html\n */\n ensureScrollValueMonitoring: function () {\n if (hasEventPageXY === undefined) {\n hasEventPageXY = ReactBrowserEventEmitter.supportsEventPageXY();\n }\n if (!hasEventPageXY && !isMonitoringScrollValue) {\n var refresh = ViewportMetrics.refreshScrollValues;\n ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\n isMonitoringScrollValue = true;\n }\n }\n\n});\n\nmodule.exports = ReactBrowserEventEmitter;","'use strict';\n\nexports.__esModule = true;\n/**\n * Indicates that navigation was caused by a call to history.push.\n */\nvar PUSH = exports.PUSH = 'PUSH';\n\n/**\n * Indicates that navigation was caused by a call to history.replace.\n */\nvar REPLACE = exports.REPLACE = 'REPLACE';\n\n/**\n * Indicates that navigation was caused by some other action such\n * as using a browser's back/forward buttons and/or manually manipulating\n * the URL in a browser's location bar. This is the default.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate\n * for more information.\n */\nvar POP = exports.POP = 'POP';","'use strict';\n\nexports.__esModule = true;\nvar addEventListener = exports.addEventListener = function addEventListener(node, event, listener) {\n return node.addEventListener ? node.addEventListener(event, listener, false) : node.attachEvent('on' + event, listener);\n};\n\nvar removeEventListener = exports.removeEventListener = function removeEventListener(node, event, listener) {\n return node.removeEventListener ? node.removeEventListener(event, listener, false) : node.detachEvent('on' + event, listener);\n};\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\nvar supportsHistory = exports.supportsHistory = function supportsHistory() {\n var ua = window.navigator.userAgent;\n\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n\n return window.history && 'pushState' in window.history;\n};\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\nvar supportsGoWithoutReloadUsingHash = exports.supportsGoWithoutReloadUsingHash = function supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n};\n\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\nvar supportsPopstateOnHashchange = exports.supportsPopstateOnHashchange = function supportsPopstateOnHashchange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n};\n\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\nvar isExtraneousPopstateEvent = exports.isExtraneousPopstateEvent = function isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n};","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\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 */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\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 */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction 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// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var eq = require('./eq');\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 */\nfunction 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\nmodule.exports = assocIndexOf;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var isKeyable = require('./_isKeyable');\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 */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\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 */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((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\nmodule.exports = getTag;\n","// JS-YAML's default schema for `load` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on JS-YAML's default safe schema and includes\n// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function.\n//\n// Also this schema is used as default base schema at `Schema.create` function.\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = Schema.DEFAULT = new Schema({\n include: [\n require('./default_safe')\n ],\n explicit: [\n require('../type/js/undefined'),\n require('../type/js/regexp'),\n require('../type/js/function')\n ]\n});\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = height;\n\nvar _offset = _interopRequireDefault(require(\"./offset\"));\n\nvar _isWindow = _interopRequireDefault(require(\"./isWindow\"));\n\nfunction height(node, client) {\n var win = (0, _isWindow.default)(node);\n return win ? win.innerHeight : client ? node.clientHeight : (0, _offset.default)(node).height;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = getWindow;\n\nfunction getWindow(node) {\n return node === node.window ? node : node.nodeType === 9 ? node.defaultView || node.parentWindow : false;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar Loading = function Loading() {\n return _react.default.createElement(\"span\", {\n \"aria-hidden\": \"true\",\n className: \"rw-i rw-loading\"\n });\n};\n\nvar Button =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Button, _React$Component);\n\n function Button() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Button.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n className = _this$props.className,\n disabled = _this$props.disabled,\n label = _this$props.label,\n icon = _this$props.icon,\n busy = _this$props.busy,\n active = _this$props.active,\n children = _this$props.children,\n _this$props$variant = _this$props.variant,\n variant = _this$props$variant === void 0 ? 'primary' : _this$props$variant,\n _this$props$spinner = _this$props.spinner,\n spinner = _this$props$spinner === void 0 ? _react.default.createElement(Loading, null) : _this$props$spinner,\n _this$props$component = _this$props.component,\n Tag = _this$props$component === void 0 ? 'button' : _this$props$component,\n props = _objectWithoutProperties(_this$props, [\"className\", \"disabled\", \"label\", \"icon\", \"busy\", \"active\", \"children\", \"variant\", \"spinner\", \"component\"]);\n\n var type = props.type;\n if (Tag === 'button') type = type || 'button';\n return _react.default.createElement(Tag, _extends({}, props, {\n tabIndex: \"-1\",\n title: label,\n type: type,\n disabled: disabled,\n \"aria-disabled\": disabled,\n \"aria-label\": label,\n className: (0, _classnames.default)(className, 'rw-btn', active && !disabled && 'rw-state-active', variant && 'rw-btn-' + variant)\n }), busy ? spinner : icon, children);\n };\n\n return Button;\n}(_react.default.Component);\n\nButton.propTypes = {\n disabled: _propTypes.default.bool,\n label: _propTypes.default.string,\n icon: _propTypes.default.node,\n busy: _propTypes.default.bool,\n active: _propTypes.default.bool,\n variant: _propTypes.default.oneOf(['primary', 'select']),\n component: _propTypes.default.any,\n spinner: _propTypes.default.node\n};\nvar _default = Button;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\n\nvar _spyOnComponent = _interopRequireDefault(require(\"spy-on-component\"));\n\nexports.spyOnComponent = _spyOnComponent.default;\n\nvar _autoFocus = _interopRequireDefault(require(\"./autoFocus\"));\n\nexports.autoFocus = _autoFocus.default;\n\nvar _focusManager = _interopRequireDefault(require(\"./focusManager\"));\n\nexports.focusManager = _focusManager.default;\n\nvar _mountManager = _interopRequireDefault(require(\"./mountManager\"));\n\nexports.mountManager = _mountManager.default;\n\nvar _timeoutManager = _interopRequireDefault(require(\"./timeoutManager\"));\n\nexports.timeoutManager = _timeoutManager.default;\n\nvar _mixin = _interopRequireDefault(require(\"./mixin\"));\n\nexports.mixin = _mixin.default;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","var LIFECYCLE_HOOKS = {\n componentWillMount: true,\n componentDidMount: true,\n componentWillReceiveProps: true,\n getSnapshotBeforeUpdate: true,\n shouldComponentUpdate: true,\n componentWillUpdate: true,\n componentDidUpdate: true,\n componentWillUnmount: true,\n}\n\nvar STATIC_HOOKS = {\n getDerivedStateFromProps: true,\n}\n\nfunction wrap(base, method, isStatic) {\n var before = true\n\n if (Array.isArray(method)) {\n before = method[0] !== 'after'\n method = method[1]\n }\n\n if (!base) return method\n\n return function wrappedLifecyclehook() {\n var ctx = isStatic ? null : this\n before && method.apply(ctx, arguments)\n base.apply(ctx, arguments)\n !before && method.apply(ctx, arguments)\n }\n}\n\nmodule.exports = function spyOnComponent(component, hooks) {\n var originals = Object.create(null)\n\n for (var key in hooks)\n if (STATIC_HOOKS[key])\n component.constructor[key] = wrap(\n (originals[key] = component.constructor[key]),\n hooks[key],\n true\n )\n\n for (var key in hooks)\n if (LIFECYCLE_HOOKS[key])\n component[key] = wrap((originals[key] = component[key]), hooks[key])\n\n return function reset(key) {\n var subject = STATIC_HOOKS[key] ? component.constructor : component\n\n if (key && key in originals) subject[key] = originals[key]\n else for (var key in originals) subject[key] = originals[key]\n }\n}\n\nmodule.exports.mixin = function mixinIntoComponent(componentClass, hooks) {\n spyOnComponent(componentClass.prototype, hooks)\n return componentClass\n}\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _dates = _interopRequireDefault(require(\"./util/dates\"));\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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar VIEW_UNITS = ['month', 'year', 'decade', 'century'];\n\nfunction clamp(date, min, max) {\n return _dates.default.max(_dates.default.min(date, max), min);\n}\n\nvar CalendarView =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(CalendarView, _React$Component);\n\n function CalendarView() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = CalendarView.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n className = _this$props.className,\n activeId = _this$props.activeId,\n props = _objectWithoutProperties(_this$props, [\"className\", \"activeId\"]);\n\n return _react.default.createElement(\"table\", _extends({}, props, {\n role: \"grid\",\n tabIndex: \"-1\",\n \"aria-activedescendant\": activeId || null,\n className: (0, _classnames.default)(className, 'rw-nav-view', 'rw-calendar-grid')\n }));\n };\n\n return CalendarView;\n}(_react.default.Component);\n\nCalendarView.propTypes = {\n activeId: _propTypes.default.string\n};\n\nvar CalendarViewCell =\n/*#__PURE__*/\nfunction (_React$Component2) {\n _inheritsLoose(CalendarViewCell, _React$Component2);\n\n function CalendarViewCell() {\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 = _React$Component2.call.apply(_React$Component2, [this].concat(args)) || this;\n\n _this.handleChange = function () {\n var _this$props2 = _this.props,\n onChange = _this$props2.onChange,\n min = _this$props2.min,\n max = _this$props2.max,\n date = _this$props2.date;\n onChange(clamp(date, min, max));\n };\n\n return _this;\n }\n\n var _proto2 = CalendarViewCell.prototype;\n\n _proto2.isEmpty = function isEmpty() {\n var _this$props3 = this.props,\n unit = _this$props3.unit,\n min = _this$props3.min,\n max = _this$props3.max,\n date = _this$props3.date;\n return !_dates.default.inRange(date, min, max, unit);\n };\n\n _proto2.isEqual = function isEqual(date) {\n return _dates.default.eq(this.props.date, date, this.props.unit);\n };\n\n _proto2.isFocused = function isFocused() {\n return !this.props.disabled && !this.isEmpty() && this.isEqual(this.props.focused);\n };\n\n _proto2.isNow = function isNow() {\n return this.props.now && this.isEqual(this.props.now);\n };\n\n _proto2.isOffView = function isOffView() {\n var _this$props4 = this.props,\n viewUnit = _this$props4.viewUnit,\n focused = _this$props4.focused,\n date = _this$props4.date;\n return date && focused && viewUnit && _dates.default[viewUnit](date) !== _dates.default[viewUnit](focused);\n };\n\n _proto2.isSelected = function isSelected() {\n return this.props.selected && this.isEqual(this.props.selected);\n };\n\n _proto2.render = function render() {\n var _this$props5 = this.props,\n children = _this$props5.children,\n activeId = _this$props5.activeId,\n label = _this$props5.label,\n disabled = _this$props5.disabled;\n var isDisabled = disabled || this.isEmpty();\n return _react.default.createElement(\"td\", {\n role: \"gridcell\",\n id: this.isFocused() ? activeId : null,\n title: label,\n \"aria-label\": label,\n \"aria-readonly\": disabled,\n \"aria-selected\": this.isSelected(),\n onClick: !isDisabled ? this.handleChange : undefined,\n className: (0, _classnames.default)('rw-cell', this.isNow() && 'rw-now', isDisabled && 'rw-state-disabled', this.isEmpty() && 'rw-cell-not-allowed', this.isOffView() && 'rw-cell-off-range', this.isFocused() && 'rw-state-focus', this.isSelected() && 'rw-state-selected')\n }, children);\n };\n\n return CalendarViewCell;\n}(_react.default.Component);\n\nCalendarViewCell.propTypes = {\n id: _propTypes.default.string,\n activeId: _propTypes.default.string.isRequired,\n label: _propTypes.default.string,\n now: _propTypes.default.instanceOf(Date),\n date: _propTypes.default.instanceOf(Date),\n selected: _propTypes.default.instanceOf(Date),\n focused: _propTypes.default.instanceOf(Date),\n min: _propTypes.default.instanceOf(Date),\n max: _propTypes.default.instanceOf(Date),\n unit: _propTypes.default.oneOf(['day'].concat(VIEW_UNITS)),\n viewUnit: _propTypes.default.oneOf(VIEW_UNITS),\n onChange: _propTypes.default.func.isRequired,\n disabled: _propTypes.default.bool\n};\n\nCalendarView.Body = function (props) {\n return _react.default.createElement(\"tbody\", _extends({\n className: \"rw-calendar-body\"\n }, props));\n};\n\nCalendarView.Row = function (props) {\n return _react.default.createElement(\"tr\", _extends({\n role: \"row\",\n className: \"rw-calendar-row\"\n }, props));\n};\n\nCalendarView.Cell = CalendarViewCell;\nvar _default = CalendarView;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.getMessages = getMessages;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar messages = {\n moveBack: 'Navigate back',\n moveForward: 'Navigate forward',\n dateButton: 'Select date',\n timeButton: 'Select time',\n openCombobox: 'open combobox',\n openDropdown: 'open dropdown',\n placeholder: '',\n filterPlaceholder: '',\n emptyList: 'There are no items in this list',\n emptyFilter: 'The filter returned no results',\n createOption: function createOption(_ref) {\n var searchTerm = _ref.searchTerm;\n return [' Create option', searchTerm && ' ', searchTerm && _react.default.createElement(\"strong\", {\n key: \"_\"\n }, \"\\\"\" + searchTerm + \"\\\"\")];\n },\n tagsLabel: 'Selected items',\n removeLabel: 'Remove selected item',\n noneSelected: 'no selected items',\n selectedItems: function selectedItems(labels) {\n return \"Selected items: \" + labels.join(', ');\n },\n // number\n increment: 'Increment value',\n decrement: 'Decrement value'\n};\n\nfunction getMessages(defaults) {\n if (defaults === void 0) {\n defaults = {};\n }\n\n var processed = {};\n Object.keys(messages).forEach(function (message) {\n var value = defaults[message];\n if (value == null) value = messages[message];\n processed[message] = typeof value === 'function' ? value : function () {\n return value;\n };\n });\n return processed;\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.widgetEditable = exports.widgetEnabled = exports.isInDisabledFieldset = void 0;\n\nvar _reactDom = require(\"react-dom\");\n\nvar _matches = _interopRequireDefault(require(\"dom-helpers/query/matches\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar isInDisabledFieldset = function isInDisabledFieldset(inst) {\n var node;\n\n try {\n node = (0, _reactDom.findDOMNode)(inst);\n } catch (err) {\n /* ignore */\n }\n\n return !!node && (0, _matches.default)(node, 'fieldset[disabled] *');\n};\n\nexports.isInDisabledFieldset = isInDisabledFieldset;\nvar widgetEnabled = interactionDecorator(true);\nexports.widgetEnabled = widgetEnabled;\nvar widgetEditable = interactionDecorator(false);\nexports.widgetEditable = widgetEditable;\n\nfunction interactionDecorator(disabledOnly) {\n function wrap(method) {\n return function decoratedMethod() {\n var _this$props = this.props,\n disabled = _this$props.disabled,\n readOnly = _this$props.readOnly;\n disabled = isInDisabledFieldset(this) || disabled == true || !disabledOnly && readOnly === true;\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 (!disabled) return method.apply(this, args);\n };\n }\n\n return function decorate(target, key, desc) {\n if (desc.initializer) {\n var init = desc.initializer;\n\n desc.initializer = function () {\n return wrap(init.call(this)).bind(this);\n };\n } else desc.value = wrap(desc.value);\n\n return desc;\n };\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.routerMiddleware = exports.routerActions = exports.goForward = exports.goBack = exports.go = exports.replace = exports.push = exports.CALL_HISTORY_METHOD = exports.routerReducer = exports.LOCATION_CHANGE = exports.syncHistoryWithStore = undefined;\n\nvar _reducer = require('./reducer');\n\nObject.defineProperty(exports, 'LOCATION_CHANGE', {\n enumerable: true,\n get: function get() {\n return _reducer.LOCATION_CHANGE;\n }\n});\nObject.defineProperty(exports, 'routerReducer', {\n enumerable: true,\n get: function get() {\n return _reducer.routerReducer;\n }\n});\n\nvar _actions = require('./actions');\n\nObject.defineProperty(exports, 'CALL_HISTORY_METHOD', {\n enumerable: true,\n get: function get() {\n return _actions.CALL_HISTORY_METHOD;\n }\n});\nObject.defineProperty(exports, 'push', {\n enumerable: true,\n get: function get() {\n return _actions.push;\n }\n});\nObject.defineProperty(exports, 'replace', {\n enumerable: true,\n get: function get() {\n return _actions.replace;\n }\n});\nObject.defineProperty(exports, 'go', {\n enumerable: true,\n get: function get() {\n return _actions.go;\n }\n});\nObject.defineProperty(exports, 'goBack', {\n enumerable: true,\n get: function get() {\n return _actions.goBack;\n }\n});\nObject.defineProperty(exports, 'goForward', {\n enumerable: true,\n get: function get() {\n return _actions.goForward;\n }\n});\nObject.defineProperty(exports, 'routerActions', {\n enumerable: true,\n get: function get() {\n return _actions.routerActions;\n }\n});\n\nvar _sync = require('./sync');\n\nvar _sync2 = _interopRequireDefault(_sync);\n\nvar _middleware = require('./middleware');\n\nvar _middleware2 = _interopRequireDefault(_middleware);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports.syncHistoryWithStore = _sync2['default'];\nexports.routerMiddleware = _middleware2['default'];","export default function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\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","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nReactComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nReactComponent.prototype.setState = function (partialState, callback) {\n !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;\n this.updater.enqueueSetState(this, partialState);\n if (callback) {\n this.updater.enqueueCallback(this, callback, 'setState');\n }\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nReactComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this);\n if (callback) {\n this.updater.enqueueCallback(this, callback, 'forceUpdate');\n }\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\nif (process.env.NODE_ENV !== 'production') {\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n var defineDeprecationWarning = function (methodName, info) {\n if (canDefineProperty) {\n Object.defineProperty(ReactComponent.prototype, methodName, {\n get: function () {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : void 0;\n return undefined;\n }\n });\n }\n };\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nmodule.exports = ReactComponent;","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar warning = require('fbjs/lib/warning');\n\nfunction warnNoop(publicInstance, callerName) {\n if (process.env.NODE_ENV !== 'production') {\n var constructor = publicInstance.constructor;\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;\n }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Enqueue a callback that will be executed after all the pending updates\n * have processed.\n *\n * @param {ReactClass} publicInstance The instance to use as `this` context.\n * @param {?function} callback Called after state is updated.\n * @internal\n */\n enqueueCallback: function (publicInstance, callback) {},\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState) {\n warnNoop(publicInstance, 'setState');\n }\n};\n\nmodule.exports = ReactNoopUpdateQueue;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Injectable ordering of event plugins.\n */\nvar eventPluginOrder = null;\n\n/**\n * Injectable mapping from names to event plugin modules.\n */\nvar namesToPlugins = {};\n\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\nfunction recomputePluginOrdering() {\n if (!eventPluginOrder) {\n // Wait until an `eventPluginOrder` is injected.\n return;\n }\n for (var pluginName in namesToPlugins) {\n var pluginModule = namesToPlugins[pluginName];\n var pluginIndex = eventPluginOrder.indexOf(pluginName);\n !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : _prodInvariant('96', pluginName) : void 0;\n if (EventPluginRegistry.plugins[pluginIndex]) {\n continue;\n }\n !pluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : _prodInvariant('97', pluginName) : void 0;\n EventPluginRegistry.plugins[pluginIndex] = pluginModule;\n var publishedEvents = pluginModule.eventTypes;\n for (var eventName in publishedEvents) {\n !publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : _prodInvariant('98', eventName, pluginName) : void 0;\n }\n }\n}\n\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\nfunction publishEventForPlugin(dispatchConfig, pluginModule, eventName) {\n !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : _prodInvariant('99', eventName) : void 0;\n EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\n\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, pluginModule, eventName);\n }\n }\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);\n return true;\n }\n return false;\n}\n\n/**\n * Publishes a registration name that is used to identify dispatched events and\n * can be used with `EventPluginHub.putListener` to register listeners.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\nfunction publishRegistrationName(registrationName, pluginModule, eventName) {\n !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : _prodInvariant('100', registrationName) : void 0;\n EventPluginRegistry.registrationNameModules[registrationName] = pluginModule;\n EventPluginRegistry.registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;\n\n if (process.env.NODE_ENV !== 'production') {\n var lowerCasedName = registrationName.toLowerCase();\n EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n EventPluginRegistry.possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n}\n\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\nvar EventPluginRegistry = {\n\n /**\n * Ordered list of injected plugins.\n */\n plugins: [],\n\n /**\n * Mapping from event name to dispatch config\n */\n eventNameDispatchConfigs: {},\n\n /**\n * Mapping from registration name to plugin module\n */\n registrationNameModules: {},\n\n /**\n * Mapping from registration name to event name\n */\n registrationNameDependencies: {},\n\n /**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in __DEV__.\n * @type {Object}\n */\n possibleRegistrationNames: process.env.NODE_ENV !== 'production' ? {} : null,\n // Trust the developer to only use possibleRegistrationNames in __DEV__\n\n /**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginOrder}\n */\n injectEventPluginOrder: function (injectedEventPluginOrder) {\n !!eventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : _prodInvariant('101') : void 0;\n // Clone the ordering so it cannot be dynamically mutated.\n eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);\n recomputePluginOrdering();\n },\n\n /**\n * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginsByName}\n */\n injectEventPluginsByName: function (injectedNamesToPlugins) {\n var isOrderingDirty = false;\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n var pluginModule = injectedNamesToPlugins[pluginName];\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {\n !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : _prodInvariant('102', pluginName) : void 0;\n namesToPlugins[pluginName] = pluginModule;\n isOrderingDirty = true;\n }\n }\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n },\n\n /**\n * Looks up the plugin for the supplied event.\n *\n * @param {object} event A synthetic event.\n * @return {?object} The plugin that created the supplied event.\n * @internal\n */\n getPluginModuleForEvent: function (event) {\n var dispatchConfig = event.dispatchConfig;\n if (dispatchConfig.registrationName) {\n return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;\n }\n if (dispatchConfig.phasedRegistrationNames !== undefined) {\n // pulling phasedRegistrationNames out of dispatchConfig helps Flow see\n // that it is not undefined.\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n\n for (var phase in phasedRegistrationNames) {\n if (!phasedRegistrationNames.hasOwnProperty(phase)) {\n continue;\n }\n var pluginModule = EventPluginRegistry.registrationNameModules[phasedRegistrationNames[phase]];\n if (pluginModule) {\n return pluginModule;\n }\n }\n }\n return null;\n },\n\n /**\n * Exposed for unit testing.\n * @private\n */\n _resetEventPlugins: function () {\n eventPluginOrder = null;\n for (var pluginName in namesToPlugins) {\n if (namesToPlugins.hasOwnProperty(pluginName)) {\n delete namesToPlugins[pluginName];\n }\n }\n EventPluginRegistry.plugins.length = 0;\n\n var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\n for (var eventName in eventNameDispatchConfigs) {\n if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n delete eventNameDispatchConfigs[eventName];\n }\n }\n\n var registrationNameModules = EventPluginRegistry.registrationNameModules;\n for (var registrationName in registrationNameModules) {\n if (registrationNameModules.hasOwnProperty(registrationName)) {\n delete registrationNameModules[registrationName];\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var possibleRegistrationNames = EventPluginRegistry.possibleRegistrationNames;\n for (var lowerCasedName in possibleRegistrationNames) {\n if (possibleRegistrationNames.hasOwnProperty(lowerCasedName)) {\n delete possibleRegistrationNames[lowerCasedName];\n }\n }\n }\n }\n\n};\n\nmodule.exports = EventPluginRegistry;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Injected dependencies:\n */\n\n/**\n * - `ComponentTree`: [required] Module that can convert between React instances\n * and actual node references.\n */\nvar ComponentTree;\nvar TreeTraversal;\nvar injection = {\n injectComponentTree: function (Injected) {\n ComponentTree = Injected;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.getNodeFromInstance && Injected.getInstanceFromNode, 'EventPluginUtils.injection.injectComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.') : void 0;\n }\n },\n injectTreeTraversal: function (Injected) {\n TreeTraversal = Injected;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.isAncestor && Injected.getLowestCommonAncestor, 'EventPluginUtils.injection.injectTreeTraversal(...): Injected ' + 'module is missing isAncestor or getLowestCommonAncestor.') : void 0;\n }\n }\n};\n\nfunction isEndish(topLevelType) {\n return topLevelType === 'topMouseUp' || topLevelType === 'topTouchEnd' || topLevelType === 'topTouchCancel';\n}\n\nfunction isMoveish(topLevelType) {\n return topLevelType === 'topMouseMove' || topLevelType === 'topTouchMove';\n}\nfunction isStartish(topLevelType) {\n return topLevelType === 'topMouseDown' || topLevelType === 'topTouchStart';\n}\n\nvar validateEventDispatches;\nif (process.env.NODE_ENV !== 'production') {\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n\n var listenersIsArr = Array.isArray(dispatchListeners);\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n\n var instancesIsArr = Array.isArray(dispatchInstances);\n var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n process.env.NODE_ENV !== 'production' ? warning(instancesIsArr === listenersIsArr && instancesLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : void 0;\n };\n}\n\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\nfunction executeDispatch(event, simulated, listener, inst) {\n var type = event.type || 'unknown-event';\n event.currentTarget = EventPluginUtils.getNodeFromInstance(inst);\n if (simulated) {\n ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event);\n } else {\n ReactErrorUtils.invokeGuardedCallback(type, listener, event);\n }\n event.currentTarget = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\nfunction executeDispatchesInOrder(event, simulated) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and Instances are two parallel arrays that are always in sync.\n executeDispatch(event, simulated, dispatchListeners[i], dispatchInstances[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, simulated, dispatchListeners, dispatchInstances);\n }\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches, but stops\n * at the first dispatch execution returning true, and returns that id.\n *\n * @return {?string} id of the first dispatch execution who's listener returns\n * true, or null if no listener returned true.\n */\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and Instances are two parallel arrays that are always in sync.\n if (dispatchListeners[i](event, dispatchInstances[i])) {\n return dispatchInstances[i];\n }\n }\n } else if (dispatchListeners) {\n if (dispatchListeners(event, dispatchInstances)) {\n return dispatchInstances;\n }\n }\n return null;\n}\n\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\nfunction executeDispatchesInOrderStopAtTrue(event) {\n var ret = executeDispatchesInOrderStopAtTrueImpl(event);\n event._dispatchInstances = null;\n event._dispatchListeners = null;\n return ret;\n}\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\nfunction executeDirectDispatch(event) {\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n var dispatchListener = event._dispatchListeners;\n var dispatchInstance = event._dispatchInstances;\n !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : _prodInvariant('103') : void 0;\n event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;\n var res = dispatchListener ? dispatchListener(event) : null;\n event.currentTarget = null;\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n return res;\n}\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\nfunction hasDispatches(event) {\n return !!event._dispatchListeners;\n}\n\n/**\n * General utilities that are useful in creating custom Event Plugins.\n */\nvar EventPluginUtils = {\n isEndish: isEndish,\n isMoveish: isMoveish,\n isStartish: isStartish,\n\n executeDirectDispatch: executeDirectDispatch,\n executeDispatchesInOrder: executeDispatchesInOrder,\n executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\n hasDispatches: hasDispatches,\n\n getInstanceFromNode: function (node) {\n return ComponentTree.getInstanceFromNode(node);\n },\n getNodeFromInstance: function (node) {\n return ComponentTree.getNodeFromInstance(node);\n },\n isAncestor: function (a, b) {\n return TreeTraversal.isAncestor(a, b);\n },\n getLowestCommonAncestor: function (a, b) {\n return TreeTraversal.getLowestCommonAncestor(a, b);\n },\n getParentInstance: function (inst) {\n return TreeTraversal.getParentInstance(inst);\n },\n traverseTwoPhase: function (target, fn, arg) {\n return TreeTraversal.traverseTwoPhase(target, fn, arg);\n },\n traverseEnterLeave: function (from, to, fn, argFrom, argTo) {\n return TreeTraversal.traverseEnterLeave(from, to, fn, argFrom, argTo);\n },\n\n injection: injection\n};\n\nmodule.exports = EventPluginUtils;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar caughtError = null;\n\n/**\n * Call a function while guarding against errors that happens within it.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} a First argument\n * @param {*} b Second argument\n */\nfunction invokeGuardedCallback(name, func, a) {\n try {\n func(a);\n } catch (x) {\n if (caughtError === null) {\n caughtError = x;\n }\n }\n}\n\nvar ReactErrorUtils = {\n invokeGuardedCallback: invokeGuardedCallback,\n\n /**\n * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event\n * handler are sure to be rethrown by rethrowCaughtError.\n */\n invokeGuardedCallbackWithCatch: invokeGuardedCallback,\n\n /**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n rethrowCaughtError: function () {\n if (caughtError) {\n var error = caughtError;\n caughtError = null;\n throw error;\n }\n }\n};\n\nif (process.env.NODE_ENV !== 'production') {\n /**\n * To help development we can get better devtools integration by simulating a\n * real browser event.\n */\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n ReactErrorUtils.invokeGuardedCallback = function (name, func, a) {\n var boundFunc = func.bind(null, a);\n var evtType = 'react-' + name;\n fakeNode.addEventListener(evtType, boundFunc, false);\n var evt = document.createEvent('Event');\n // $FlowFixMe https://github.com/facebook/flow/issues/2336\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n fakeNode.removeEventListener(evtType, boundFunc, false);\n };\n }\n}\n\nmodule.exports = ReactErrorUtils;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n var target = nativeEvent.target || nativeEvent.srcElement || window;\n\n // Normalize SVG element events #4963\n if (target.correspondingUseElement) {\n target = target.correspondingUseElement;\n }\n\n // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n // @see http://www.quirksmode.org/js/events_properties.html\n return target.nodeType === 3 ? target.parentNode : target;\n}\n\nmodule.exports = getEventTarget;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature = document.implementation && document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\nvar modifierKeyToProp = {\n 'Alt': 'altKey',\n 'Control': 'ctrlKey',\n 'Meta': 'metaKey',\n 'Shift': 'shiftKey'\n};\n\n// IE8 does not implement getModifierState so we simply map it to the only\n// modifier keys exposed by the event itself, does not support Lock-keys.\n// Currently, all major browsers except Chrome seems to support Lock-keys.\nfunction modifierStateGetter(keyArg) {\n var syntheticEvent = this;\n var nativeEvent = syntheticEvent.nativeEvent;\n if (nativeEvent.getModifierState) {\n return nativeEvent.getModifierState(keyArg);\n }\n var keyProp = modifierKeyToProp[keyArg];\n return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n return modifierStateGetter;\n}\n\nmodule.exports = getEventModifierState;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar Danger = require('./Danger');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\nvar setInnerHTML = require('./setInnerHTML');\nvar setTextContent = require('./setTextContent');\n\nfunction getNodeAfter(parentNode, node) {\n // Special case for text components, which return [open, close] comments\n // from getHostNode.\n if (Array.isArray(node)) {\n node = node[1];\n }\n return node ? node.nextSibling : parentNode.firstChild;\n}\n\n/**\n * Inserts `childNode` as a child of `parentNode` at the `index`.\n *\n * @param {DOMElement} parentNode Parent node in which to insert.\n * @param {DOMElement} childNode Child node to insert.\n * @param {number} index Index at which to insert the child.\n * @internal\n */\nvar insertChildAt = createMicrosoftUnsafeLocalFunction(function (parentNode, childNode, referenceNode) {\n // We rely exclusively on `insertBefore(node, null)` instead of also using\n // `appendChild(node)`. (Using `undefined` is not allowed by all browsers so\n // we are careful to use `null`.)\n parentNode.insertBefore(childNode, referenceNode);\n});\n\nfunction insertLazyTreeChildAt(parentNode, childTree, referenceNode) {\n DOMLazyTree.insertTreeBefore(parentNode, childTree, referenceNode);\n}\n\nfunction moveChild(parentNode, childNode, referenceNode) {\n if (Array.isArray(childNode)) {\n moveDelimitedText(parentNode, childNode[0], childNode[1], referenceNode);\n } else {\n insertChildAt(parentNode, childNode, referenceNode);\n }\n}\n\nfunction removeChild(parentNode, childNode) {\n if (Array.isArray(childNode)) {\n var closingComment = childNode[1];\n childNode = childNode[0];\n removeDelimitedText(parentNode, childNode, closingComment);\n parentNode.removeChild(closingComment);\n }\n parentNode.removeChild(childNode);\n}\n\nfunction moveDelimitedText(parentNode, openingComment, closingComment, referenceNode) {\n var node = openingComment;\n while (true) {\n var nextNode = node.nextSibling;\n insertChildAt(parentNode, node, referenceNode);\n if (node === closingComment) {\n break;\n }\n node = nextNode;\n }\n}\n\nfunction removeDelimitedText(parentNode, startNode, closingComment) {\n while (true) {\n var node = startNode.nextSibling;\n if (node === closingComment) {\n // The closing comment is removed by ReactMultiChild.\n break;\n } else {\n parentNode.removeChild(node);\n }\n }\n}\n\nfunction replaceDelimitedText(openingComment, closingComment, stringText) {\n var parentNode = openingComment.parentNode;\n var nodeAfterComment = openingComment.nextSibling;\n if (nodeAfterComment === closingComment) {\n // There are no text nodes between the opening and closing comments; insert\n // a new one if stringText isn't empty.\n if (stringText) {\n insertChildAt(parentNode, document.createTextNode(stringText), nodeAfterComment);\n }\n } else {\n if (stringText) {\n // Set the text content of the first node after the opening comment, and\n // remove all following nodes up until the closing comment.\n setTextContent(nodeAfterComment, stringText);\n removeDelimitedText(parentNode, nodeAfterComment, closingComment);\n } else {\n removeDelimitedText(parentNode, openingComment, closingComment);\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID,\n type: 'replace text',\n payload: stringText\n });\n }\n}\n\nvar dangerouslyReplaceNodeWithMarkup = Danger.dangerouslyReplaceNodeWithMarkup;\nif (process.env.NODE_ENV !== 'production') {\n dangerouslyReplaceNodeWithMarkup = function (oldChild, markup, prevInstance) {\n Danger.dangerouslyReplaceNodeWithMarkup(oldChild, markup);\n if (prevInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: prevInstance._debugID,\n type: 'replace with',\n payload: markup.toString()\n });\n } else {\n var nextInstance = ReactDOMComponentTree.getInstanceFromNode(markup.node);\n if (nextInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: nextInstance._debugID,\n type: 'mount',\n payload: markup.toString()\n });\n }\n }\n };\n}\n\n/**\n * Operations for updating with DOM children.\n */\nvar DOMChildrenOperations = {\n\n dangerouslyReplaceNodeWithMarkup: dangerouslyReplaceNodeWithMarkup,\n\n replaceDelimitedText: replaceDelimitedText,\n\n /**\n * Updates a component's children by processing a series of updates. The\n * update configurations are each expected to have a `parentNode` property.\n *\n * @param {array} updates List of update configurations.\n * @internal\n */\n processUpdates: function (parentNode, updates) {\n if (process.env.NODE_ENV !== 'production') {\n var parentNodeDebugID = ReactDOMComponentTree.getInstanceFromNode(parentNode)._debugID;\n }\n\n for (var k = 0; k < updates.length; k++) {\n var update = updates[k];\n switch (update.type) {\n case 'INSERT_MARKUP':\n insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: parentNodeDebugID,\n type: 'insert child',\n payload: { toIndex: update.toIndex, content: update.content.toString() }\n });\n }\n break;\n case 'MOVE_EXISTING':\n moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: parentNodeDebugID,\n type: 'move child',\n payload: { fromIndex: update.fromIndex, toIndex: update.toIndex }\n });\n }\n break;\n case 'SET_MARKUP':\n setInnerHTML(parentNode, update.content);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: parentNodeDebugID,\n type: 'replace children',\n payload: update.content.toString()\n });\n }\n break;\n case 'TEXT_CONTENT':\n setTextContent(parentNode, update.content);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: parentNodeDebugID,\n type: 'replace text',\n payload: update.content.toString()\n });\n }\n break;\n case 'REMOVE_NODE':\n removeChild(parentNode, update.fromNode);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: parentNodeDebugID,\n type: 'remove child',\n payload: { fromIndex: update.fromIndex }\n });\n }\n break;\n }\n }\n }\n\n};\n\nmodule.exports = DOMChildrenOperations;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar DOMNamespaces = {\n html: 'http://www.w3.org/1999/xhtml',\n mathml: 'http://www.w3.org/1998/Math/MathML',\n svg: 'http://www.w3.org/2000/svg'\n};\n\nmodule.exports = DOMNamespaces;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/* globals MSApp */\n\n'use strict';\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\n\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n return function (arg0, arg1, arg2, arg3) {\n MSApp.execUnsafeLocalFunction(function () {\n return func(arg0, arg1, arg2, arg3);\n });\n };\n } else {\n return func;\n }\n};\n\nmodule.exports = createMicrosoftUnsafeLocalFunction;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar React = require('react/lib/React');\nvar ReactPropTypesSecret = require('./ReactPropTypesSecret');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar hasReadOnlyValue = {\n 'button': true,\n 'checkbox': true,\n 'image': true,\n 'hidden': true,\n 'radio': true,\n 'reset': true,\n 'submit': true\n};\n\nfunction _assertSingleLink(inputProps) {\n !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use checkedLink, you probably don\\'t want to use valueLink and vice versa.') : _prodInvariant('87') : void 0;\n}\nfunction _assertValueLink(inputProps) {\n _assertSingleLink(inputProps);\n !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want to use value or onChange, you probably don\\'t want to use valueLink.') : _prodInvariant('88') : void 0;\n}\n\nfunction _assertCheckedLink(inputProps) {\n _assertSingleLink(inputProps);\n !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. If you want to use checked or onChange, you probably don\\'t want to use checkedLink') : _prodInvariant('89') : void 0;\n}\n\nvar propTypes = {\n value: function (props, propName, componentName) {\n if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {\n return null;\n }\n return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n checked: function (props, propName, componentName) {\n if (!props[propName] || props.onChange || props.readOnly || props.disabled) {\n return null;\n }\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n onChange: React.PropTypes.func\n};\n\nvar loggedTypeFailures = {};\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\n/**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\nvar LinkedValueUtils = {\n checkPropTypes: function (tagName, props, owner) {\n for (var propName in propTypes) {\n if (propTypes.hasOwnProperty(propName)) {\n var error = propTypes[propName](props, propName, tagName, 'prop', null, ReactPropTypesSecret);\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var addendum = getDeclarationErrorAddendum(owner);\n process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : void 0;\n }\n }\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @return {*} current value of the input either from value prop or link.\n */\n getValue: function (inputProps) {\n if (inputProps.valueLink) {\n _assertValueLink(inputProps);\n return inputProps.valueLink.value;\n }\n return inputProps.value;\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @return {*} current checked status of the input either from checked prop\n * or link.\n */\n getChecked: function (inputProps) {\n if (inputProps.checkedLink) {\n _assertCheckedLink(inputProps);\n return inputProps.checkedLink.value;\n }\n return inputProps.checked;\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @param {SyntheticEvent} event change event to handle\n */\n executeOnChange: function (inputProps, event) {\n if (inputProps.valueLink) {\n _assertValueLink(inputProps);\n return inputProps.valueLink.requestChange(event.target.value);\n } else if (inputProps.checkedLink) {\n _assertCheckedLink(inputProps);\n return inputProps.checkedLink.requestChange(event.target.checked);\n } else if (inputProps.onChange) {\n return inputProps.onChange.call(undefined, event);\n }\n }\n};\n\nmodule.exports = LinkedValueUtils;","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar injected = false;\n\nvar ReactComponentEnvironment = {\n\n /**\n * Optionally injectable hook for swapping out mount images in the middle of\n * the tree.\n */\n replaceNodeWithMarkup: null,\n\n /**\n * Optionally injectable hook for processing a queue of child updates. Will\n * later move into MultiChildComponents.\n */\n processChildrenUpdates: null,\n\n injection: {\n injectEnvironment: function (environment) {\n !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : _prodInvariant('104') : void 0;\n ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup;\n ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;\n injected = true;\n }\n }\n\n};\n\nmodule.exports = ReactComponentEnvironment;","/**\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\n/*eslint-disable no-self-compare */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\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\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqual;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * Given a `prevElement` and `nextElement`, determines if the existing\n * instance should be updated as opposed to being destroyed or replaced by a new\n * instance. Both arguments are elements. This ensures that this logic can\n * operate on stateless trees without any backing instance.\n *\n * @param {?object} prevElement\n * @param {?object} nextElement\n * @return {boolean} True if the existing instance should be updated.\n * @protected\n */\n\nfunction shouldUpdateReactComponent(prevElement, nextElement) {\n var prevEmpty = prevElement === null || prevElement === false;\n var nextEmpty = nextElement === null || nextElement === false;\n if (prevEmpty || nextEmpty) {\n return prevEmpty === nextEmpty;\n }\n\n var prevType = typeof prevElement;\n var nextType = typeof nextElement;\n if (prevType === 'string' || prevType === 'number') {\n return nextType === 'string' || nextType === 'number';\n } else {\n return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;\n }\n}\n\nmodule.exports = shouldUpdateReactComponent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n\n return '$' + escapedString;\n}\n\n/**\n * Unescape and unwrap key for human-readable display\n *\n * @param {string} key to unescape.\n * @return {string} the unescaped key.\n */\nfunction unescape(key) {\n var unescapeRegex = /(=0|=2)/g;\n var unescaperLookup = {\n '=0': '=',\n '=2': ':'\n };\n var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);\n\n return ('' + keySubstring).replace(unescapeRegex, function (match) {\n return unescaperLookup[match];\n });\n}\n\nvar KeyEscapeUtils = {\n escape: escape,\n unescape: unescape\n};\n\nmodule.exports = KeyEscapeUtils;","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('react/lib/ReactCurrentOwner');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction enqueueUpdate(internalInstance) {\n ReactUpdates.enqueueUpdate(internalInstance);\n}\n\nfunction formatUnexpectedArgument(arg) {\n var type = typeof arg;\n if (type !== 'object') {\n return type;\n }\n var displayName = arg.constructor && arg.constructor.name || type;\n var keys = Object.keys(arg);\n if (keys.length > 0 && keys.length < 20) {\n return displayName + ' (keys: ' + keys.join(', ') + ')';\n }\n return displayName;\n}\n\nfunction getInternalInstanceReadyForUpdate(publicInstance, callerName) {\n var internalInstance = ReactInstanceMap.get(publicInstance);\n if (!internalInstance) {\n if (process.env.NODE_ENV !== 'production') {\n var ctor = publicInstance.constructor;\n // Only warn when we have a callerName. Otherwise we should be silent.\n // We're probably calling from enqueueCallback. We don't want to warn\n // there because we already warned for the corresponding lifecycle method.\n process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, ctor && (ctor.displayName || ctor.name) || 'ReactClass') : void 0;\n }\n return null;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition (such as ' + 'within `render` or another component\\'s constructor). Render methods ' + 'should be a pure function of props and state; constructor ' + 'side-effects are an anti-pattern, but can be moved to ' + '`componentWillMount`.', callerName) : void 0;\n }\n\n return internalInstance;\n}\n\n/**\n * ReactUpdateQueue allows for state updates to be scheduled into a later\n * reconciliation step.\n */\nvar ReactUpdateQueue = {\n\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n if (process.env.NODE_ENV !== 'production') {\n var owner = ReactCurrentOwner.current;\n if (owner !== null) {\n process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;\n owner._warnedAboutRefsInRender = true;\n }\n }\n var internalInstance = ReactInstanceMap.get(publicInstance);\n if (internalInstance) {\n // During componentWillMount and render this will still be null but after\n // that will always render to something. At least for now. So we can use\n // this hack.\n return !!internalInstance._renderedComponent;\n } else {\n return false;\n }\n },\n\n /**\n * Enqueue a callback that will be executed after all the pending updates\n * have processed.\n *\n * @param {ReactClass} publicInstance The instance to use as `this` context.\n * @param {?function} callback Called after state is updated.\n * @param {string} callerName Name of the calling function in the public API.\n * @internal\n */\n enqueueCallback: function (publicInstance, callback, callerName) {\n ReactUpdateQueue.validateCallback(callback, callerName);\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);\n\n // Previously we would throw an error if we didn't have an internal\n // instance. Since we want to make it a no-op instead, we mirror the same\n // behavior we have in other enqueue* methods.\n // We also need to ignore callbacks in componentWillMount. See\n // enqueueUpdates.\n if (!internalInstance) {\n return null;\n }\n\n if (internalInstance._pendingCallbacks) {\n internalInstance._pendingCallbacks.push(callback);\n } else {\n internalInstance._pendingCallbacks = [callback];\n }\n // TODO: The callback here is ignored when setState is called from\n // componentWillMount. Either fix it or disallow doing so completely in\n // favor of getInitialState. Alternatively, we can disallow\n // componentWillMount during server-side rendering.\n enqueueUpdate(internalInstance);\n },\n\n enqueueCallbackInternal: function (internalInstance, callback) {\n if (internalInstance._pendingCallbacks) {\n internalInstance._pendingCallbacks.push(callback);\n } else {\n internalInstance._pendingCallbacks = [callback];\n }\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');\n\n if (!internalInstance) {\n return;\n }\n\n internalInstance._pendingForceUpdate = true;\n\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');\n\n if (!internalInstance) {\n return;\n }\n\n internalInstance._pendingStateQueue = [completeState];\n internalInstance._pendingReplaceState = true;\n\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState) {\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onSetState();\n process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : void 0;\n }\n\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');\n\n if (!internalInstance) {\n return;\n }\n\n var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);\n queue.push(partialState);\n\n enqueueUpdate(internalInstance);\n },\n\n enqueueElementInternal: function (internalInstance, nextElement, nextContext) {\n internalInstance._pendingElement = nextElement;\n // TODO: introduce _pendingContext instead of setting it directly.\n internalInstance._context = nextContext;\n enqueueUpdate(internalInstance);\n },\n\n validateCallback: function (callback, callerName) {\n !(!callback || typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s(...): Expected the last optional `callback` argument to be a function. Instead received: %s.', callerName, formatUnexpectedArgument(callback)) : _prodInvariant('122', callerName, formatUnexpectedArgument(callback)) : void 0;\n }\n\n};\n\nmodule.exports = ReactUpdateQueue;","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\nvar validateDOMNesting = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n // This validation code was written based on the HTML5 parsing spec:\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n //\n // Note: this does not catch all invalid nesting, nor does it try to (as it's\n // not clear what practical benefit doing so provides); instead, we warn only\n // for cases where the parser will give a parse tree differing from what React\n // intended. For example,
is invalid but we don't warn\n // because it still parses correctly; we do warn for other cases like nested\n //

tags where the beginning of the second element implicitly closes the\n // first, causing a confusing mess.\n\n // https://html.spec.whatwg.org/multipage/syntax.html#special\n var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];\n\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',\n\n // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n // TODO: Distinguish by namespace here -- for , including it here\n // errs on the side of fewer warnings\n 'foreignObject', 'desc', 'title'];\n\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n var buttonScopeTags = inScopeTags.concat(['button']);\n\n // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n\n var emptyAncestorInfo = {\n current: null,\n\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null\n };\n\n var updatedAncestorInfo = function (oldInfo, tag, instance) {\n var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);\n var info = { tag: tag, instance: instance };\n\n if (inScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.aTagInScope = null;\n ancestorInfo.buttonTagInScope = null;\n ancestorInfo.nobrTagInScope = null;\n }\n if (buttonScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.pTagInButtonScope = null;\n }\n\n // See rules for 'li', 'dd', 'dt' start tags in\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n ancestorInfo.listItemTagAutoclosing = null;\n ancestorInfo.dlItemTagAutoclosing = null;\n }\n\n ancestorInfo.current = info;\n\n if (tag === 'form') {\n ancestorInfo.formTag = info;\n }\n if (tag === 'a') {\n ancestorInfo.aTagInScope = info;\n }\n if (tag === 'button') {\n ancestorInfo.buttonTagInScope = info;\n }\n if (tag === 'nobr') {\n ancestorInfo.nobrTagInScope = info;\n }\n if (tag === 'p') {\n ancestorInfo.pTagInButtonScope = info;\n }\n if (tag === 'li') {\n ancestorInfo.listItemTagAutoclosing = info;\n }\n if (tag === 'dd' || tag === 'dt') {\n ancestorInfo.dlItemTagAutoclosing = info;\n }\n\n return ancestorInfo;\n };\n\n /**\n * Returns whether\n */\n var isTagValidWithParent = function (tag, parentTag) {\n // First, let's check if we're in an unusual parsing mode...\n switch (parentTag) {\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n case 'select':\n return tag === 'option' || tag === 'optgroup' || tag === '#text';\n case 'optgroup':\n return tag === 'option' || tag === '#text';\n // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n // but\n case 'option':\n return tag === '#text';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n // No special behavior since these rules fall back to \"in body\" mode for\n // all except special table nodes which cause bad parsing behavior anyway.\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n case 'tr':\n return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n case 'tbody':\n case 'thead':\n case 'tfoot':\n return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n case 'colgroup':\n return tag === 'col' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n case 'table':\n return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n case 'head':\n return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n case 'html':\n return tag === 'head' || tag === 'body';\n case '#document':\n return tag === 'html';\n }\n\n // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n // where the parsing rules cause implicit opens or closes to be added.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n switch (tag) {\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n case 'rp':\n case 'rt':\n return impliedEndTags.indexOf(parentTag) === -1;\n\n case 'body':\n case 'caption':\n case 'col':\n case 'colgroup':\n case 'frame':\n case 'head':\n case 'html':\n case 'tbody':\n case 'td':\n case 'tfoot':\n case 'th':\n case 'thead':\n case 'tr':\n // These tags are only valid with a few parents that have special child\n // parsing rules -- if we're down here, then none of those matched and\n // so we allow it only if we don't know what the parent is, as all other\n // cases are invalid.\n return parentTag == null;\n }\n\n return true;\n };\n\n /**\n * Returns whether\n */\n var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n switch (tag) {\n case 'address':\n case 'article':\n case 'aside':\n case 'blockquote':\n case 'center':\n case 'details':\n case 'dialog':\n case 'dir':\n case 'div':\n case 'dl':\n case 'fieldset':\n case 'figcaption':\n case 'figure':\n case 'footer':\n case 'header':\n case 'hgroup':\n case 'main':\n case 'menu':\n case 'nav':\n case 'ol':\n case 'p':\n case 'section':\n case 'summary':\n case 'ul':\n\n case 'pre':\n case 'listing':\n\n case 'table':\n\n case 'hr':\n\n case 'xmp':\n\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return ancestorInfo.pTagInButtonScope;\n\n case 'form':\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n case 'li':\n return ancestorInfo.listItemTagAutoclosing;\n\n case 'dd':\n case 'dt':\n return ancestorInfo.dlItemTagAutoclosing;\n\n case 'button':\n return ancestorInfo.buttonTagInScope;\n\n case 'a':\n // Spec says something about storing a list of markers, but it sounds\n // equivalent to this check.\n return ancestorInfo.aTagInScope;\n\n case 'nobr':\n return ancestorInfo.nobrTagInScope;\n }\n\n return null;\n };\n\n /**\n * Given a ReactCompositeComponent instance, return a list of its recursive\n * owners, starting at the root and ending with the instance itself.\n */\n var findOwnerStack = function (instance) {\n if (!instance) {\n return [];\n }\n\n var stack = [];\n do {\n stack.push(instance);\n } while (instance = instance._currentElement._owner);\n stack.reverse();\n return stack;\n };\n\n var didWarn = {};\n\n validateDOMNesting = function (childTag, childText, childInstance, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.current;\n var parentTag = parentInfo && parentInfo.tag;\n\n if (childText != null) {\n process.env.NODE_ENV !== 'production' ? warning(childTag == null, 'validateDOMNesting: when childText is passed, childTag should be null') : void 0;\n childTag = '#text';\n }\n\n var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n var problematic = invalidParent || invalidAncestor;\n\n if (problematic) {\n var ancestorTag = problematic.tag;\n var ancestorInstance = problematic.instance;\n\n var childOwner = childInstance && childInstance._currentElement._owner;\n var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;\n\n var childOwners = findOwnerStack(childOwner);\n var ancestorOwners = findOwnerStack(ancestorOwner);\n\n var minStackLen = Math.min(childOwners.length, ancestorOwners.length);\n var i;\n\n var deepestCommon = -1;\n for (i = 0; i < minStackLen; i++) {\n if (childOwners[i] === ancestorOwners[i]) {\n deepestCommon = i;\n } else {\n break;\n }\n }\n\n var UNKNOWN = '(unknown)';\n var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {\n return inst.getName() || UNKNOWN;\n });\n var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {\n return inst.getName() || UNKNOWN;\n });\n var ownerInfo = [].concat(\n // If the parent and child instances have a common owner ancestor, start\n // with that -- otherwise we just start with the parent's owners.\n deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,\n // If we're warning about an invalid (non-parent) ancestry, add '...'\n invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');\n\n var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;\n if (didWarn[warnKey]) {\n return;\n }\n didWarn[warnKey] = true;\n\n var tagDisplayName = childTag;\n var whitespaceInfo = '';\n if (childTag === '#text') {\n if (/\\S/.test(childText)) {\n tagDisplayName = 'Text nodes';\n } else {\n tagDisplayName = 'Whitespace text nodes';\n whitespaceInfo = ' Make sure you don\\'t have any extra whitespace between tags on ' + 'each line of your source code.';\n }\n } else {\n tagDisplayName = '<' + childTag + '>';\n }\n\n if (invalidParent) {\n var info = '';\n if (ancestorTag === 'table' && childTag === 'tr') {\n info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';\n }\n process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a child of <%s>.%s ' + 'See %s.%s', tagDisplayName, ancestorTag, whitespaceInfo, ownerInfo, info) : void 0;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>. See %s.', tagDisplayName, ancestorTag, ownerInfo) : void 0;\n }\n }\n };\n\n validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;\n\n // For testing\n validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.current;\n var parentTag = parentInfo && parentInfo.tag;\n return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);\n };\n}\n\nmodule.exports = validateDOMNesting;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\n\nfunction getEventCharCode(nativeEvent) {\n var charCode;\n var keyCode = nativeEvent.keyCode;\n\n if ('charCode' in nativeEvent) {\n charCode = nativeEvent.charCode;\n\n // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n if (charCode === 0 && keyCode === 13) {\n charCode = 13;\n }\n } else {\n // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n charCode = keyCode;\n }\n\n // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n // Must not discard the (non-)printable Enter-key.\n if (charCode >= 32 || charCode === 13) {\n return charCode;\n }\n\n return 0;\n}\n\nmodule.exports = getEventCharCode;","'use strict';\n\nexports.__esModule = true;\nexports.locationShape = exports.routerShape = undefined;\n\nvar _react = require('react');\n\nvar func = _react.PropTypes.func,\n object = _react.PropTypes.object,\n shape = _react.PropTypes.shape,\n string = _react.PropTypes.string;\nvar routerShape = exports.routerShape = shape({\n push: func.isRequired,\n replace: func.isRequired,\n go: func.isRequired,\n goBack: func.isRequired,\n goForward: func.isRequired,\n setRouteLeaveHook: func.isRequired,\n isActive: func.isRequired\n});\n\nvar locationShape = exports.locationShape = shape({\n pathname: string.isRequired,\n search: string.isRequired,\n state: object,\n action: string.isRequired,\n key: string\n});","\"use strict\";\n\nexports.__esModule = true;\nexports.loopAsync = loopAsync;\nexports.mapAsync = mapAsync;\nfunction loopAsync(turns, work, callback) {\n var currentTurn = 0,\n isDone = false;\n var sync = false,\n hasNext = false,\n doneArgs = void 0;\n\n function done() {\n isDone = true;\n if (sync) {\n // Iterate instead of recursing if possible.\n doneArgs = [].concat(Array.prototype.slice.call(arguments));\n return;\n }\n\n callback.apply(this, arguments);\n }\n\n function next() {\n if (isDone) {\n return;\n }\n\n hasNext = true;\n if (sync) {\n // Iterate instead of recursing if possible.\n return;\n }\n\n sync = true;\n\n while (!isDone && currentTurn < turns && hasNext) {\n hasNext = false;\n work.call(this, currentTurn++, next, done);\n }\n\n sync = false;\n\n if (isDone) {\n // This means the loop finished synchronously.\n callback.apply(this, doneArgs);\n return;\n }\n\n if (currentTurn >= turns && hasNext) {\n isDone = true;\n callback();\n }\n }\n\n next();\n}\n\nfunction mapAsync(array, work, callback) {\n var length = array.length;\n var values = [];\n\n if (length === 0) return callback(null, values);\n\n var isDone = false,\n doneCount = 0;\n\n function done(index, error, value) {\n if (isDone) return;\n\n if (error) {\n isDone = true;\n callback(error);\n } else {\n values[index] = value;\n\n isDone = ++doneCount === length;\n\n if (isDone) callback(null, values);\n }\n }\n\n array.forEach(function (item, index) {\n work(item, index, function (error, value) {\n done(index, error, value);\n });\n });\n}","'use strict';\n\nexports.__esModule = true;\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 _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 _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _getRouteParams = require('./getRouteParams');\n\nvar _getRouteParams2 = _interopRequireDefault(_getRouteParams);\n\nvar _ContextUtils = require('./ContextUtils');\n\nvar _RouteUtils = require('./RouteUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _React$PropTypes = _react2.default.PropTypes,\n array = _React$PropTypes.array,\n func = _React$PropTypes.func,\n object = _React$PropTypes.object;\n\n/**\n * A <RouterContext> renders the component tree for a given router state\n * and sets the history object and the current location in context.\n */\n\nvar RouterContext = _react2.default.createClass({\n displayName: 'RouterContext',\n\n\n mixins: [(0, _ContextUtils.ContextProvider)('router')],\n\n propTypes: {\n router: object.isRequired,\n location: object.isRequired,\n routes: array.isRequired,\n params: object.isRequired,\n components: array.isRequired,\n createElement: func.isRequired\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n createElement: _react2.default.createElement\n };\n },\n\n\n childContextTypes: {\n router: object.isRequired\n },\n\n getChildContext: function getChildContext() {\n return {\n router: this.props.router\n };\n },\n createElement: function createElement(component, props) {\n return component == null ? null : this.props.createElement(component, props);\n },\n render: function render() {\n var _this = this;\n\n var _props = this.props,\n location = _props.location,\n routes = _props.routes,\n params = _props.params,\n components = _props.components,\n router = _props.router;\n\n var element = null;\n\n if (components) {\n element = components.reduceRight(function (element, components, index) {\n if (components == null) return element; // Don't create new children; use the grandchildren.\n\n var route = routes[index];\n var routeParams = (0, _getRouteParams2.default)(route, params);\n var props = {\n location: location,\n params: params,\n route: route,\n router: router,\n routeParams: routeParams,\n routes: routes\n };\n\n if ((0, _RouteUtils.isReactChildren)(element)) {\n props.children = element;\n } else if (element) {\n for (var prop in element) {\n if (Object.prototype.hasOwnProperty.call(element, prop)) props[prop] = element[prop];\n }\n }\n\n if ((typeof components === 'undefined' ? 'undefined' : _typeof(components)) === 'object') {\n var elements = {};\n\n for (var key in components) {\n if (Object.prototype.hasOwnProperty.call(components, key)) {\n // Pass through the key as a prop to createElement to allow\n // custom createElement functions to know which named component\n // they're rendering, for e.g. matching up to fetched data.\n elements[key] = _this.createElement(components[key], _extends({\n key: key }, props));\n }\n }\n\n return elements;\n }\n\n return _this.createElement(components, props);\n }, element);\n }\n\n !(element === null || element === false || _react2.default.isValidElement(element)) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'The root route must render a single element') : (0, _invariant2.default)(false) : void 0;\n\n return element;\n }\n});\n\nexports.default = RouterContext;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\nexports.ContextProvider = ContextProvider;\nexports.ContextSubscriber = ContextSubscriber;\n\nvar _react = require('react');\n\n// Works around issues with context updates failing to propagate.\n// Caveat: the context value is expected to never change its identity.\n// https://github.com/facebook/react/issues/2517\n// https://github.com/reactjs/react-router/issues/470\n\nvar contextProviderShape = _react.PropTypes.shape({\n subscribe: _react.PropTypes.func.isRequired,\n eventIndex: _react.PropTypes.number.isRequired\n});\n\nfunction makeContextName(name) {\n return '@@contextSubscriber/' + name;\n}\n\nfunction ContextProvider(name) {\n var _childContextTypes, _ref2;\n\n var contextName = makeContextName(name);\n var listenersKey = contextName + '/listeners';\n var eventIndexKey = contextName + '/eventIndex';\n var subscribeKey = contextName + '/subscribe';\n\n return _ref2 = {\n childContextTypes: (_childContextTypes = {}, _childContextTypes[contextName] = contextProviderShape.isRequired, _childContextTypes),\n\n getChildContext: function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextName] = {\n eventIndex: this[eventIndexKey],\n subscribe: this[subscribeKey]\n }, _ref;\n },\n componentWillMount: function componentWillMount() {\n this[listenersKey] = [];\n this[eventIndexKey] = 0;\n },\n componentWillReceiveProps: function componentWillReceiveProps() {\n this[eventIndexKey]++;\n },\n componentDidUpdate: function componentDidUpdate() {\n var _this = this;\n\n this[listenersKey].forEach(function (listener) {\n return listener(_this[eventIndexKey]);\n });\n }\n }, _ref2[subscribeKey] = function (listener) {\n var _this2 = this;\n\n // No need to immediately call listener here.\n this[listenersKey].push(listener);\n\n return function () {\n _this2[listenersKey] = _this2[listenersKey].filter(function (item) {\n return item !== listener;\n });\n };\n }, _ref2;\n}\n\nfunction ContextSubscriber(name) {\n var _contextTypes, _ref4;\n\n var contextName = makeContextName(name);\n var lastRenderedEventIndexKey = contextName + '/lastRenderedEventIndex';\n var handleContextUpdateKey = contextName + '/handleContextUpdate';\n var unsubscribeKey = contextName + '/unsubscribe';\n\n return _ref4 = {\n contextTypes: (_contextTypes = {}, _contextTypes[contextName] = contextProviderShape, _contextTypes),\n\n getInitialState: function getInitialState() {\n var _ref3;\n\n if (!this.context[contextName]) {\n return {};\n }\n\n return _ref3 = {}, _ref3[lastRenderedEventIndexKey] = this.context[contextName].eventIndex, _ref3;\n },\n componentDidMount: function componentDidMount() {\n if (!this.context[contextName]) {\n return;\n }\n\n this[unsubscribeKey] = this.context[contextName].subscribe(this[handleContextUpdateKey]);\n },\n componentWillReceiveProps: function componentWillReceiveProps() {\n var _setState;\n\n if (!this.context[contextName]) {\n return;\n }\n\n this.setState((_setState = {}, _setState[lastRenderedEventIndexKey] = this.context[contextName].eventIndex, _setState));\n },\n componentWillUnmount: function componentWillUnmount() {\n if (!this[unsubscribeKey]) {\n return;\n }\n\n this[unsubscribeKey]();\n this[unsubscribeKey] = null;\n }\n }, _ref4[handleContextUpdateKey] = function (eventIndex) {\n if (eventIndex !== this.state[lastRenderedEventIndexKey]) {\n var _setState2;\n\n this.setState((_setState2 = {}, _setState2[lastRenderedEventIndexKey] = eventIndex, _setState2));\n }\n }, _ref4;\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar runTransitionHook = function runTransitionHook(hook, location, callback) {\n var result = hook(location, callback);\n\n if (hook.length < 2) {\n // Assume the hook runs synchronously and automatically\n // call the callback with the return value.\n callback(result);\n } else {\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(result === undefined, 'You should not \"return\" in a transition hook with a callback argument; ' + 'call the callback instead') : void 0;\n }\n};\n\nexports.default = runTransitionHook;","'use strict';\n\nexports.__esModule = true;\n\nvar _AsyncUtils = require('./AsyncUtils');\n\nvar _PathUtils = require('./PathUtils');\n\nvar _runTransitionHook = require('./runTransitionHook');\n\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\nvar _Actions = require('./Actions');\n\nvar _LocationUtils = require('./LocationUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createHistory = function createHistory() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var getCurrentLocation = options.getCurrentLocation,\n getUserConfirmation = options.getUserConfirmation,\n pushLocation = options.pushLocation,\n replaceLocation = options.replaceLocation,\n go = options.go,\n keyLength = options.keyLength;\n\n\n var currentLocation = void 0;\n var pendingLocation = void 0;\n var beforeListeners = [];\n var listeners = [];\n var allKeys = [];\n\n var getCurrentIndex = function getCurrentIndex() {\n if (pendingLocation && pendingLocation.action === _Actions.POP) return allKeys.indexOf(pendingLocation.key);\n\n if (currentLocation) return allKeys.indexOf(currentLocation.key);\n\n return -1;\n };\n\n var updateLocation = function updateLocation(nextLocation) {\n var currentIndex = getCurrentIndex();\n\n currentLocation = nextLocation;\n\n if (currentLocation.action === _Actions.PUSH) {\n allKeys = [].concat(allKeys.slice(0, currentIndex + 1), [currentLocation.key]);\n } else if (currentLocation.action === _Actions.REPLACE) {\n allKeys[currentIndex] = currentLocation.key;\n }\n\n listeners.forEach(function (listener) {\n return listener(currentLocation);\n });\n };\n\n var listenBefore = function listenBefore(listener) {\n beforeListeners.push(listener);\n\n return function () {\n return beforeListeners = beforeListeners.filter(function (item) {\n return item !== listener;\n });\n };\n };\n\n var listen = function listen(listener) {\n listeners.push(listener);\n\n return function () {\n return listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n };\n\n var confirmTransitionTo = function confirmTransitionTo(location, callback) {\n (0, _AsyncUtils.loopAsync)(beforeListeners.length, function (index, next, done) {\n (0, _runTransitionHook2.default)(beforeListeners[index], location, function (result) {\n return result != null ? done(result) : next();\n });\n }, function (message) {\n if (getUserConfirmation && typeof message === 'string') {\n getUserConfirmation(message, function (ok) {\n return callback(ok !== false);\n });\n } else {\n callback(message !== false);\n }\n });\n };\n\n var transitionTo = function transitionTo(nextLocation) {\n if (currentLocation && (0, _LocationUtils.locationsAreEqual)(currentLocation, nextLocation) || pendingLocation && (0, _LocationUtils.locationsAreEqual)(pendingLocation, nextLocation)) return; // Nothing to do\n\n pendingLocation = nextLocation;\n\n confirmTransitionTo(nextLocation, function (ok) {\n if (pendingLocation !== nextLocation) return; // Transition was interrupted during confirmation\n\n pendingLocation = null;\n\n if (ok) {\n // Treat PUSH to same path like REPLACE to be consistent with browsers\n if (nextLocation.action === _Actions.PUSH) {\n var prevPath = (0, _PathUtils.createPath)(currentLocation);\n var nextPath = (0, _PathUtils.createPath)(nextLocation);\n\n if (nextPath === prevPath && (0, _LocationUtils.statesAreEqual)(currentLocation.state, nextLocation.state)) nextLocation.action = _Actions.REPLACE;\n }\n\n if (nextLocation.action === _Actions.POP) {\n updateLocation(nextLocation);\n } else if (nextLocation.action === _Actions.PUSH) {\n if (pushLocation(nextLocation) !== false) updateLocation(nextLocation);\n } else if (nextLocation.action === _Actions.REPLACE) {\n if (replaceLocation(nextLocation) !== false) updateLocation(nextLocation);\n }\n } else if (currentLocation && nextLocation.action === _Actions.POP) {\n var prevIndex = allKeys.indexOf(currentLocation.key);\n var nextIndex = allKeys.indexOf(nextLocation.key);\n\n if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL\n }\n });\n };\n\n var push = function push(input) {\n return transitionTo(createLocation(input, _Actions.PUSH));\n };\n\n var replace = function replace(input) {\n return transitionTo(createLocation(input, _Actions.REPLACE));\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var createKey = function createKey() {\n return Math.random().toString(36).substr(2, keyLength || 6);\n };\n\n var createHref = function createHref(location) {\n return (0, _PathUtils.createPath)(location);\n };\n\n var createLocation = function createLocation(location, action) {\n var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : createKey();\n return (0, _LocationUtils.createLocation)(location, action, key);\n };\n\n return {\n getCurrentLocation: getCurrentLocation,\n listenBefore: listenBefore,\n listen: listen,\n transitionTo: transitionTo,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n createKey: createKey,\n createPath: _PathUtils.createPath,\n createHref: createHref,\n createLocation: createLocation\n };\n};\n\nexports.default = createHistory;","'use strict';\n\nexports.__esModule = true;\nvar canUseDOM = exports.canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);","'use strict';\n\nexports.__esModule = true;\nexports.go = exports.replaceLocation = exports.pushLocation = exports.startListener = exports.getUserConfirmation = exports.getCurrentLocation = undefined;\n\nvar _LocationUtils = require('./LocationUtils');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _DOMStateStorage = require('./DOMStateStorage');\n\nvar _PathUtils = require('./PathUtils');\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nvar needsHashchangeListener = _ExecutionEnvironment.canUseDOM && !(0, _DOMUtils.supportsPopstateOnHashchange)();\n\nvar _createLocation = function _createLocation(historyState) {\n var key = historyState && historyState.key;\n\n return (0, _LocationUtils.createLocation)({\n pathname: window.location.pathname,\n search: window.location.search,\n hash: window.location.hash,\n state: key ? (0, _DOMStateStorage.readState)(key) : undefined\n }, undefined, key);\n};\n\nvar getCurrentLocation = exports.getCurrentLocation = function getCurrentLocation() {\n var historyState = void 0;\n try {\n historyState = window.history.state || {};\n } catch (error) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n historyState = {};\n }\n\n return _createLocation(historyState);\n};\n\nvar getUserConfirmation = exports.getUserConfirmation = function getUserConfirmation(message, callback) {\n return callback(window.confirm(message));\n}; // eslint-disable-line no-alert\n\nvar startListener = exports.startListener = function startListener(listener) {\n var handlePopState = function handlePopState(event) {\n if ((0, _DOMUtils.isExtraneousPopstateEvent)(event)) // Ignore extraneous popstate events in WebKit\n return;\n listener(_createLocation(event.state));\n };\n\n (0, _DOMUtils.addEventListener)(window, PopStateEvent, handlePopState);\n\n var handleUnpoppedHashChange = function handleUnpoppedHashChange() {\n return listener(getCurrentLocation());\n };\n\n if (needsHashchangeListener) {\n (0, _DOMUtils.addEventListener)(window, HashChangeEvent, handleUnpoppedHashChange);\n }\n\n return function () {\n (0, _DOMUtils.removeEventListener)(window, PopStateEvent, handlePopState);\n\n if (needsHashchangeListener) {\n (0, _DOMUtils.removeEventListener)(window, HashChangeEvent, handleUnpoppedHashChange);\n }\n };\n};\n\nvar updateLocation = function updateLocation(location, updateState) {\n var state = location.state,\n key = location.key;\n\n\n if (state !== undefined) (0, _DOMStateStorage.saveState)(key, state);\n\n updateState({ key: key }, (0, _PathUtils.createPath)(location));\n};\n\nvar pushLocation = exports.pushLocation = function pushLocation(location) {\n return updateLocation(location, function (state, path) {\n return window.history.pushState(state, null, path);\n });\n};\n\nvar replaceLocation = exports.replaceLocation = function replaceLocation(location) {\n return updateLocation(location, function (state, path) {\n return window.history.replaceState(state, null, path);\n });\n};\n\nvar go = exports.go = function go(n) {\n if (n) window.history.go(n);\n};","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\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 * 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 */\nfunction 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\nmodule.exports = assignValue;\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 */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\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 */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\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 */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar 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\nmodule.exports = nodeUtil;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\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 */\nvar 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\nmodule.exports = getSymbols;\n","// Standard YAML's Failsafe schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2802346\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n explicit: [\n require('../type/str'),\n require('../type/seq'),\n require('../type/map')\n ]\n});\n","var CONSTANTS = {\n\n // Positions\n positions: {\n tl: 'tl',\n tr: 'tr',\n tc: 'tc',\n bl: 'bl',\n br: 'br',\n bc: 'bc'\n },\n\n // Levels\n levels: {\n success: 'success',\n error: 'error',\n warning: 'warning',\n info: 'info'\n },\n\n // Notification defaults\n notification: {\n title: null,\n message: null,\n level: null,\n position: 'tr',\n autoDismiss: 5,\n dismissible: 'both',\n action: null\n }\n};\n\n\nmodule.exports = CONSTANTS;\n","var Uint8Array = require('./_Uint8Array');\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 */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = uncontrollable;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _invariant = _interopRequireDefault(require(\"invariant\"));\n\nvar Utils = _interopRequireWildcard(require(\"./utils\"));\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction uncontrollable(Component, controlledValues, methods) {\n if (methods === void 0) {\n methods = [];\n }\n\n var displayName = Component.displayName || Component.name || 'Component';\n var isCompositeComponent = Utils.isReactComponent(Component);\n var controlledProps = Object.keys(controlledValues);\n var PROPS_TO_OMIT = controlledProps.map(Utils.defaultKey);\n !(isCompositeComponent || !methods.length) ? process.env.NODE_ENV !== \"production\" ? (0, _invariant.default)(false, '[uncontrollable] stateless function components cannot pass through methods ' + 'because they have no associated instances. Check component: ' + displayName + ', ' + 'attempting to pass through methods: ' + methods.join(', ')) : invariant(false) : void 0;\n\n var UncontrolledComponent =\n /*#__PURE__*/\n function (_React$Component) {\n _inheritsLoose(UncontrolledComponent, _React$Component);\n\n function UncontrolledComponent() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.handlers = Object.create(null);\n controlledProps.forEach(function (propName) {\n var handlerName = controlledValues[propName];\n\n var handleChange = function handleChange(value) {\n if (_this.props[handlerName]) {\n var _this$props;\n\n _this._notifying = true;\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)[handlerName].apply(_this$props, [value].concat(args));\n\n _this._notifying = false;\n }\n\n _this._values[propName] = value;\n if (!_this.unmounted) _this.forceUpdate();\n };\n\n _this.handlers[handlerName] = handleChange;\n });\n if (isCompositeComponent) _this.attachRef = function (ref) {\n _this.inner = ref;\n };\n return _this;\n }\n\n var _proto = UncontrolledComponent.prototype;\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate() {\n //let the forceUpdate trigger the update\n return !this._notifying;\n };\n\n _proto.componentWillMount = function componentWillMount() {\n var _this2 = this;\n\n var props = this.props;\n this._values = Object.create(null);\n controlledProps.forEach(function (key) {\n _this2._values[key] = props[Utils.defaultKey(key)];\n });\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var _this3 = this;\n\n var props = this.props;\n controlledProps.forEach(function (key) {\n /**\n * If a prop switches from controlled to Uncontrolled\n * reset its value to the defaultValue\n */\n if (!Utils.isProp(nextProps, key) && Utils.isProp(props, key)) {\n _this3._values[key] = nextProps[Utils.defaultKey(key)];\n }\n });\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.unmounted = true;\n };\n\n _proto.getControlledInstance = function getControlledInstance() {\n return this.inner;\n };\n\n _proto.render = function render() {\n var _this4 = this;\n\n var props = _extends({}, this.props);\n\n PROPS_TO_OMIT.forEach(function (prop) {\n delete props[prop];\n });\n var newProps = {};\n controlledProps.forEach(function (propName) {\n var propValue = _this4.props[propName];\n newProps[propName] = propValue !== undefined ? propValue : _this4._values[propName];\n });\n return _react.default.createElement(Component, _extends({}, props, newProps, this.handlers, {\n ref: this.attachRef\n }));\n };\n\n return UncontrolledComponent;\n }(_react.default.Component);\n\n UncontrolledComponent.displayName = \"Uncontrolled(\" + displayName + \")\";\n UncontrolledComponent.propTypes = Utils.uncontrolledPropTypes(controlledValues, displayName);\n methods.forEach(function (method) {\n UncontrolledComponent.prototype[method] = function $proxiedMethod() {\n var _inner;\n\n return (_inner = this.inner)[method].apply(_inner, arguments);\n };\n });\n UncontrolledComponent.ControlledComponent = Component;\n /**\n * useful when wrapping a Component and you want to control\n * everything\n */\n\n UncontrolledComponent.deferControlTo = function (newComponent, additions, nextMethods) {\n if (additions === void 0) {\n additions = {};\n }\n\n return uncontrollable(newComponent, _extends({}, controlledValues, additions), nextMethods);\n };\n\n return UncontrolledComponent;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar Widget =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Widget, _React$Component);\n\n function Widget() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Widget.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n className = _this$props.className,\n tabIndex = _this$props.tabIndex,\n focused = _this$props.focused,\n open = _this$props.open,\n dropUp = _this$props.dropUp,\n disabled = _this$props.disabled,\n readOnly = _this$props.readOnly,\n autofilling = _this$props.autofilling,\n _this$props$isRtl = _this$props.isRtl,\n isRtl = _this$props$isRtl === void 0 ? this.context.isRtl : _this$props$isRtl,\n props = _objectWithoutProperties(_this$props, [\"className\", \"tabIndex\", \"focused\", \"open\", \"dropUp\", \"disabled\", \"readOnly\", \"autofilling\", \"isRtl\"]);\n\n tabIndex = tabIndex != null ? tabIndex : '-1';\n return _react.default.createElement(\"div\", _extends({}, props, {\n tabIndex: tabIndex,\n className: (0, _classnames.default)(className, 'rw-widget', isRtl && 'rw-rtl', disabled && 'rw-state-disabled', readOnly && 'rw-state-readonly', focused && 'rw-state-focus', autofilling && 'rw-webkit-autofill', open && \"rw-open\" + (dropUp ? '-up' : ''))\n }));\n };\n\n return Widget;\n}(_react.default.Component);\n\nWidget.contextTypes = {\n isRtl: _propTypes.default.bool\n};\nWidget.propTypes = {\n tabIndex: _propTypes.default.node,\n focused: _propTypes.default.bool,\n disabled: _propTypes.default.bool,\n readOnly: _propTypes.default.bool,\n autofilling: _propTypes.default.bool,\n open: _propTypes.default.bool,\n dropUp: _propTypes.default.bool,\n isRtl: _propTypes.default.bool\n};\nvar _default = Widget;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = style;\n\nvar _camelizeStyle = _interopRequireDefault(require(\"../util/camelizeStyle\"));\n\nvar _hyphenateStyle = _interopRequireDefault(require(\"../util/hyphenateStyle\"));\n\nvar _getComputedStyle2 = _interopRequireDefault(require(\"./getComputedStyle\"));\n\nvar _removeStyle = _interopRequireDefault(require(\"./removeStyle\"));\n\nvar _properties = require(\"../transition/properties\");\n\nvar _isTransform = _interopRequireDefault(require(\"../transition/isTransform\"));\n\nfunction style(node, property, value) {\n var css = '';\n var transforms = '';\n var props = property;\n\n if (typeof property === 'string') {\n if (value === undefined) {\n return node.style[(0, _camelizeStyle.default)(property)] || (0, _getComputedStyle2.default)(node).getPropertyValue((0, _hyphenateStyle.default)(property));\n } else {\n (props = {})[property] = value;\n }\n }\n\n Object.keys(props).forEach(function (key) {\n var value = props[key];\n\n if (!value && value !== 0) {\n (0, _removeStyle.default)(node, (0, _hyphenateStyle.default)(key));\n } else if ((0, _isTransform.default)(key)) {\n transforms += key + \"(\" + value + \") \";\n } else {\n css += (0, _hyphenateStyle.default)(key) + \": \" + value + \";\";\n }\n });\n\n if (transforms) {\n css += _properties.transform + \": \" + transforms + \";\";\n }\n\n node.style.cssText += ';' + css;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = exports.animationEnd = exports.animationDelay = exports.animationTiming = exports.animationDuration = exports.animationName = exports.transitionEnd = exports.transitionDuration = exports.transitionDelay = exports.transitionTiming = exports.transitionProperty = exports.transform = void 0;\n\nvar _inDOM = _interopRequireDefault(require(\"../util/inDOM\"));\n\nvar transform = 'transform';\nexports.transform = transform;\nvar prefix, transitionEnd, animationEnd;\nexports.animationEnd = animationEnd;\nexports.transitionEnd = transitionEnd;\nvar transitionProperty, transitionDuration, transitionTiming, transitionDelay;\nexports.transitionDelay = transitionDelay;\nexports.transitionTiming = transitionTiming;\nexports.transitionDuration = transitionDuration;\nexports.transitionProperty = transitionProperty;\nvar animationName, animationDuration, animationTiming, animationDelay;\nexports.animationDelay = animationDelay;\nexports.animationTiming = animationTiming;\nexports.animationDuration = animationDuration;\nexports.animationName = animationName;\n\nif (_inDOM.default) {\n var _getTransitionPropert = getTransitionProperties();\n\n prefix = _getTransitionPropert.prefix;\n exports.transitionEnd = transitionEnd = _getTransitionPropert.transitionEnd;\n exports.animationEnd = animationEnd = _getTransitionPropert.animationEnd;\n exports.transform = transform = prefix + \"-\" + transform;\n exports.transitionProperty = transitionProperty = prefix + \"-transition-property\";\n exports.transitionDuration = transitionDuration = prefix + \"-transition-duration\";\n exports.transitionDelay = transitionDelay = prefix + \"-transition-delay\";\n exports.transitionTiming = transitionTiming = prefix + \"-transition-timing-function\";\n exports.animationName = animationName = prefix + \"-animation-name\";\n exports.animationDuration = animationDuration = prefix + \"-animation-duration\";\n exports.animationTiming = animationTiming = prefix + \"-animation-delay\";\n exports.animationDelay = animationDelay = prefix + \"-animation-timing-function\";\n}\n\nvar _default = {\n transform: transform,\n end: transitionEnd,\n property: transitionProperty,\n timing: transitionTiming,\n delay: transitionDelay,\n duration: transitionDuration\n};\nexports.default = _default;\n\nfunction getTransitionProperties() {\n var style = document.createElement('div').style;\n var vendorMap = {\n O: function O(e) {\n return \"o\" + e.toLowerCase();\n },\n Moz: function Moz(e) {\n return e.toLowerCase();\n },\n Webkit: function Webkit(e) {\n return \"webkit\" + e;\n },\n ms: function ms(e) {\n return \"MS\" + e;\n }\n };\n var vendors = Object.keys(vendorMap);\n var transitionEnd, animationEnd;\n var prefix = '';\n\n for (var i = 0; i < vendors.length; i++) {\n var vendor = vendors[i];\n\n if (vendor + \"TransitionProperty\" in style) {\n prefix = \"-\" + vendor.toLowerCase();\n transitionEnd = vendorMap[vendor]('TransitionEnd');\n animationEnd = vendorMap[vendor]('AnimationEnd');\n break;\n }\n }\n\n if (!transitionEnd && 'transitionProperty' in style) transitionEnd = 'transitionend';\n if (!animationEnd && 'animationName' in style) animationEnd = 'animationend';\n style = null;\n return {\n animationEnd: animationEnd,\n transitionEnd: transitionEnd,\n prefix: prefix\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.default = spyOnMount;\n\nvar _spyOnComponent = _interopRequireDefault(require(\"spy-on-component\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction spyOnMount(componentInstance) {\n var mounted = true;\n (0, _spyOnComponent.default)(componentInstance, {\n componentWillUnmount: function componentWillUnmount() {\n mounted = false;\n }\n });\n return function () {\n return mounted;\n };\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.search = exports.clock = exports.calendar = exports.chevronLeft = exports.chevronRight = exports.caretDown = exports.caretUp = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar propTypes = {\n icon: _propTypes.default.string.isRequired\n};\n\nvar Icon = function Icon(_ref) {\n var icon = _ref.icon;\n return _react.default.createElement(\"span\", {\n \"aria-hidden\": \"true\",\n className: \"rw-i rw-i-\" + icon\n });\n};\n\nIcon.propTypes = propTypes;\n\nvar caretUp = _react.default.createElement(Icon, {\n icon: \"caret-up\"\n});\n\nexports.caretUp = caretUp;\n\nvar caretDown = _react.default.createElement(Icon, {\n icon: \"caret-down\"\n});\n\nexports.caretDown = caretDown;\n\nvar chevronRight = _react.default.createElement(Icon, {\n icon: \"chevron-right\"\n});\n\nexports.chevronRight = chevronRight;\n\nvar chevronLeft = _react.default.createElement(Icon, {\n icon: \"chevron-left\"\n});\n\nexports.chevronLeft = chevronLeft;\n\nvar calendar = _react.default.createElement(Icon, {\n icon: \"calendar\"\n});\n\nexports.calendar = calendar;\n\nvar clock = _react.default.createElement(Icon, {\n icon: \"clock-o\"\n});\n\nexports.clock = clock;\n\nvar search = _react.default.createElement(Icon, {\n icon: \"search\"\n});\n\nexports.search = search;\nvar _default = Icon;\nexports.default = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = createFocusManager;\n\nvar _reactComponentManagers = require(\"react-component-managers\");\n\nvar _interaction = require(\"./interaction\");\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\nfunction createFocusManager(inst, options) {\n var _didHandle = options.didHandle;\n return (0, _reactComponentManagers.focusManager)(inst, _extends({}, options, {\n onChange: function onChange(focused) {\n inst.setState({\n focused: focused\n });\n },\n isDisabled: function isDisabled() {\n return inst.props.disabled === true || (0, _interaction.isInDisabledFieldset)(inst);\n },\n didHandle: function didHandle(focused, event) {\n var handler = this.props[focused ? 'onFocus' : 'onBlur'];\n handler && handler(event);\n if (_didHandle && !event.isWidgetDefaultPrevented) _didHandle(focused, event);\n }\n }));\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.defaultGetDataState = defaultGetDataState;\nexports.getCommonListProps = getCommonListProps;\nexports.default = reduceToListState;\n\nvar _Filter = require(\"./Filter\");\n\nvar _ = require(\"./_\");\n\nvar _dataHelpers = require(\"./dataHelpers\");\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 EMPTY_VALUE = {};\n\nvar returnFalse = function returnFalse() {\n return false;\n};\n\nfunction defaultGetDataState(data, _ref, lastState) {\n var groupBy = _ref.groupBy;\n\n if (lastState === void 0) {\n lastState = {};\n }\n\n if (lastState.data !== data || lastState.groupBy !== groupBy) {\n if (!groupBy) return {};\n var keys = [];\n var groups = (0, _.groupBySortedKeys)(groupBy, data, keys);\n return {\n data: data,\n groupBy: groupBy,\n groups: groups,\n sortedKeys: keys,\n sequentialData: Object.keys(groups).reduce(function (flat, grp) {\n return flat.concat(groups[grp]);\n }, [])\n };\n }\n\n return lastState;\n}\n\nvar getStateGetterFromList = function getStateGetterFromList(_ref2) {\n var l = _ref2.listComponent;\n return l && l.getDataState;\n};\n\nvar getIsDisabled = function getIsDisabled(disabledProp, valueField) {\n return !Array.isArray(disabledProp) ? returnFalse : function (item) {\n return disabledProp.some(function (i) {\n return (0, _dataHelpers.dataValue)(item, valueField) === (0, _dataHelpers.dataValue)(i, valueField);\n });\n };\n};\n\nfunction getCommonListProps(list, accessors, _ref3) {\n var groupBy = _ref3.groupBy,\n optionComponent = _ref3.optionComponent,\n itemComponent = _ref3.itemComponent,\n groupComponent = _ref3.groupComponent,\n searchTerm = _ref3.searchTerm,\n listProps = _ref3.listProps;\n return _extends({\n searchTerm: searchTerm,\n groupBy: groupBy,\n groupComponent: groupComponent,\n itemComponent: itemComponent,\n optionComponent: optionComponent\n }, listProps, {\n data: list.data,\n dataState: list.state,\n textAccessor: accessors.text,\n valueAccessor: accessors.value\n });\n}\n\nfunction reduceToListState(nextListData, prevList, _temp) {\n var _ref4 = _temp === void 0 ? {} : _temp,\n nextProps = _ref4.nextProps,\n getDataState = _ref4.getDataState;\n\n var disabled = nextProps.disabled,\n valueField = nextProps.valueField,\n textField = nextProps.textField;\n getDataState = getDataState || getStateGetterFromList(nextProps) || defaultGetDataState;\n var dataState = getDataState(nextListData, nextProps, prevList && prevList.dataState);\n var data = dataState && dataState.sequentialData || nextListData;\n var isDisabled = getIsDisabled(disabled, valueField);\n\n var moveNext = function moveNext(item, word) {\n return isDisabled(item) || word && !_Filter.presets.startsWith((0, _dataHelpers.dataText)(item, textField).toLowerCase(), word.toLowerCase());\n };\n\n var list = {\n dataState: dataState,\n isDisabled: isDisabled,\n first: function first() {\n return list.next(EMPTY_VALUE);\n },\n last: function last() {\n return list.prevEnabled(data[data.length - 1]);\n },\n prev: function prev(item, word) {\n var nextIdx = Math.max(0, data.indexOf(item)) - 1;\n\n while (nextIdx > -1 && moveNext(data[nextIdx], word)) {\n nextIdx--;\n }\n\n if (nextIdx >= 0) return data[nextIdx];\n return isDisabled(item) ? null : item;\n },\n next: function next(item, word) {\n var nextIdx = data.indexOf(item) + 1;\n\n while (nextIdx < data.length && moveNext(data[nextIdx], word)) {\n nextIdx++;\n }\n\n if (nextIdx < data.length) return data[nextIdx];\n return isDisabled(item) ? null : item;\n },\n prevEnabled: function prevEnabled(item) {\n return isDisabled(item) ? list.prev(item) : item;\n },\n nextEnabled: function nextEnabled(item) {\n return isDisabled(item) ? list.next(item) : item;\n }\n };\n return list;\n}","/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nvar REACT_STATICS = {\n childContextTypes: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: 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 arguments: true,\n arity: true\n};\n\nvar isGetOwnPropertySymbolsAvailable = typeof Object.getOwnPropertySymbols === 'function';\n\nmodule.exports = function hoistNonReactStatics(targetComponent, sourceComponent, customStatics) {\n if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n var keys = Object.getOwnPropertyNames(sourceComponent);\n\n /* istanbul ignore else */\n if (isGetOwnPropertySymbolsAvailable) {\n keys = keys.concat(Object.getOwnPropertySymbols(sourceComponent));\n }\n\n for (var i = 0; i < keys.length; ++i) {\n if (!REACT_STATICS[keys[i]] && !KNOWN_STATICS[keys[i]] && (!customStatics || !customStatics[keys[i]])) {\n try {\n targetComponent[keys[i]] = sourceComponent[keys[i]];\n } catch (error) {\n\n }\n }\n }\n }\n\n return targetComponent;\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","'use strict';\n\n\nvar yaml = require('./lib/js-yaml.js');\n\n\nmodule.exports = yaml;\n","'use strict';\n\nexports.__esModule = true;\nfunction createThunkMiddleware(extraArgument) {\n return function (_ref) {\n var dispatch = _ref.dispatch;\n var 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;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar canDefineProperty = false;\nif (process.env.NODE_ENV !== 'production') {\n try {\n // $FlowFixMe https://github.com/facebook/flow/issues/285\n Object.defineProperty({}, 'x', { get: function () {} });\n canDefineProperty = true;\n } catch (x) {\n // IE will fail on defineProperty\n }\n}\n\nmodule.exports = canDefineProperty;","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\n\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\nmodule.exports = REACT_ELEMENT_TYPE;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\n/* global Symbol */\n\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n/**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\nfunction getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n}\n\nmodule.exports = getIteratorFn;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar ReactPropTypeLocationNames = {};\n\nif (process.env.NODE_ENV !== 'production') {\n ReactPropTypeLocationNames = {\n prop: 'prop',\n context: 'context',\n childContext: 'child context'\n };\n}\n\nmodule.exports = ReactPropTypeLocationNames;","'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.routerReducer = routerReducer;\n/**\n * This action type will be dispatched when your history\n * receives a location change.\n */\nvar LOCATION_CHANGE = exports.LOCATION_CHANGE = '@@router/LOCATION_CHANGE';\n\nvar initialState = {\n locationBeforeTransitions: null\n};\n\n/**\n * This reducer will update the state with the most recent location history\n * has transitioned to. This may not be in sync with the router, particularly\n * if you have asynchronously-loaded routes, so reading from and relying on\n * this state is discouraged.\n */\nfunction routerReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n type = _ref.type,\n payload = _ref.payload;\n\n if (type === LOCATION_CHANGE) {\n return _extends({}, state, { locationBeforeTransitions: payload });\n }\n\n return state;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * This action type will be dispatched by the history actions below.\n * If you're writing a middleware to watch for navigation events, be sure to\n * look for actions of this type.\n */\nvar CALL_HISTORY_METHOD = exports.CALL_HISTORY_METHOD = '@@router/CALL_HISTORY_METHOD';\n\nfunction updateLocation(method) {\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return {\n type: CALL_HISTORY_METHOD,\n payload: { method: method, args: args }\n };\n };\n}\n\n/**\n * These actions correspond to the history API.\n * The associated routerMiddleware will capture these events before they get to\n * your reducer and reissue them as the matching function on your history.\n */\nvar push = exports.push = updateLocation('push');\nvar replace = exports.replace = updateLocation('replace');\nvar go = exports.go = updateLocation('go');\nvar goBack = exports.goBack = updateLocation('goBack');\nvar goForward = exports.goForward = updateLocation('goForward');\n\nvar routerActions = exports.routerActions = { push: push, replace: replace, go: go, goBack: goBack, goForward: goForward };","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ReactDOMComponentFlags = {\n hasCachedChildNodes: 1 << 0\n};\n\nmodule.exports = ReactDOMComponentFlags;","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : _prodInvariant('30') : void 0;\n\n if (current == null) {\n return next;\n }\n\n // Both are not empty. Warning: Never call x.concat(y) when you are not\n // certain that x is an Array (x could be a string with concat method).\n if (Array.isArray(current)) {\n if (Array.isArray(next)) {\n current.push.apply(current, next);\n return current;\n }\n current.push(next);\n return current;\n }\n\n if (Array.isArray(next)) {\n // A bit too dangerous to mutate `next`.\n return [current].concat(next);\n }\n\n return [current, next];\n}\n\nmodule.exports = accumulateInto;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n */\n\nfunction forEachAccumulated(arr, cb, scope) {\n if (Array.isArray(arr)) {\n arr.forEach(cb, scope);\n } else if (arr) {\n cb.call(scope, arr);\n }\n}\n\nmodule.exports = forEachAccumulated;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar contentKey = null;\n\n/**\n * Gets the key used to access text content on a DOM node.\n *\n * @return {?string} Key used to access text content.\n * @internal\n */\nfunction getTextContentAccessor() {\n if (!contentKey && ExecutionEnvironment.canUseDOM) {\n // Prefer textContent to innerText because many browsers support both but\n // SVG <text> elements don't support innerText even when <div> does.\n contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\n }\n return contentKey;\n}\n\nmodule.exports = getTextContentAccessor;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PooledClass = require('./PooledClass');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * A specialized pseudo-event module to help keep track of components waiting to\n * be notified when their DOM representations are available for use.\n *\n * This implements `PooledClass`, so you should never need to instantiate this.\n * Instead, use `CallbackQueue.getPooled()`.\n *\n * @class ReactMountReady\n * @implements PooledClass\n * @internal\n */\n\nvar CallbackQueue = function () {\n function CallbackQueue(arg) {\n _classCallCheck(this, CallbackQueue);\n\n this._callbacks = null;\n this._contexts = null;\n this._arg = arg;\n }\n\n /**\n * Enqueues a callback to be invoked when `notifyAll` is invoked.\n *\n * @param {function} callback Invoked when `notifyAll` is invoked.\n * @param {?object} context Context to call `callback` with.\n * @internal\n */\n\n\n CallbackQueue.prototype.enqueue = function enqueue(callback, context) {\n this._callbacks = this._callbacks || [];\n this._callbacks.push(callback);\n this._contexts = this._contexts || [];\n this._contexts.push(context);\n };\n\n /**\n * Invokes all enqueued callbacks and clears the queue. This is invoked after\n * the DOM representation of a component has been created or updated.\n *\n * @internal\n */\n\n\n CallbackQueue.prototype.notifyAll = function notifyAll() {\n var callbacks = this._callbacks;\n var contexts = this._contexts;\n var arg = this._arg;\n if (callbacks && contexts) {\n !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : _prodInvariant('24') : void 0;\n this._callbacks = null;\n this._contexts = null;\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].call(contexts[i], arg);\n }\n callbacks.length = 0;\n contexts.length = 0;\n }\n };\n\n CallbackQueue.prototype.checkpoint = function checkpoint() {\n return this._callbacks ? this._callbacks.length : 0;\n };\n\n CallbackQueue.prototype.rollback = function rollback(len) {\n if (this._callbacks && this._contexts) {\n this._callbacks.length = len;\n this._contexts.length = len;\n }\n };\n\n /**\n * Resets the internal queue.\n *\n * @internal\n */\n\n\n CallbackQueue.prototype.reset = function reset() {\n this._callbacks = null;\n this._contexts = null;\n };\n\n /**\n * `PooledClass` looks for this.\n */\n\n\n CallbackQueue.prototype.destructor = function destructor() {\n this.reset();\n };\n\n return CallbackQueue;\n}();\n\nmodule.exports = PooledClass.addPoolingTo(CallbackQueue);","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar ReactFeatureFlags = {\n // When true, call console.time() before and .timeEnd() after each top-level\n // render (both initial renders and updates). Useful when looking at prod-mode\n // timeline profiles in Chrome, for example.\n logTopLevelRenders: false\n};\n\nmodule.exports = ReactFeatureFlags;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\n\nvar supportedInputTypes = {\n 'color': true,\n 'date': true,\n 'datetime': true,\n 'datetime-local': true,\n 'email': true,\n 'month': true,\n 'number': true,\n 'password': true,\n 'range': true,\n 'search': true,\n 'tel': true,\n 'text': true,\n 'time': true,\n 'url': true,\n 'week': true\n};\n\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n if (nodeName === 'input') {\n return !!supportedInputTypes[elem.type];\n }\n\n if (nodeName === 'textarea') {\n return true;\n }\n\n return false;\n}\n\nmodule.exports = isTextInputElement;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ViewportMetrics = {\n\n currentScrollLeft: 0,\n\n currentScrollTop: 0,\n\n refreshScrollValues: function (scrollPosition) {\n ViewportMetrics.currentScrollLeft = scrollPosition.x;\n ViewportMetrics.currentScrollTop = scrollPosition.y;\n }\n\n};\n\nmodule.exports = ViewportMetrics;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar setInnerHTML = require('./setInnerHTML');\n\n/**\n * Set the textContent property of a node, ensuring that whitespace is preserved\n * even in IE8. innerText is a poor substitute for textContent and, among many\n * issues, inserts <br> instead of the literal newline chars. innerHTML behaves\n * as it should.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\nvar setTextContent = function (node, text) {\n if (text) {\n var firstChild = node.firstChild;\n\n if (firstChild && firstChild === node.lastChild && firstChild.nodeType === 3) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n};\n\nif (ExecutionEnvironment.canUseDOM) {\n if (!('textContent' in document.documentElement)) {\n setTextContent = function (node, text) {\n if (node.nodeType === 3) {\n node.nodeValue = text;\n return;\n }\n setInnerHTML(node, escapeTextContentForBrowser(text));\n };\n }\n}\n\nmodule.exports = setTextContent;","/**\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\n'use strict';\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\n\nfunction focusNode(node) {\n // IE8 can throw \"Can't move focus to the control because it is invisible,\n // not enabled, or of a type that does not accept the focus.\" for all kinds of\n // reasons that are too expensive and fragile to test.\n try {\n node.focus();\n } catch (e) {}\n}\n\nmodule.exports = focusNode;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\n\nvar isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridRow: true,\n gridColumn: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n prefixes.forEach(function (prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n background: {\n backgroundAttachment: true,\n backgroundColor: true,\n backgroundImage: true,\n backgroundPositionX: true,\n backgroundPositionY: true,\n backgroundRepeat: true\n },\n backgroundPosition: {\n backgroundPositionX: true,\n backgroundPositionY: true\n },\n border: {\n borderWidth: true,\n borderStyle: true,\n borderColor: true\n },\n borderBottom: {\n borderBottomWidth: true,\n borderBottomStyle: true,\n borderBottomColor: true\n },\n borderLeft: {\n borderLeftWidth: true,\n borderLeftStyle: true,\n borderLeftColor: true\n },\n borderRight: {\n borderRightWidth: true,\n borderRightStyle: true,\n borderRightColor: true\n },\n borderTop: {\n borderTopWidth: true,\n borderTopStyle: true,\n borderTopColor: true\n },\n font: {\n fontStyle: true,\n fontVariant: true,\n fontWeight: true,\n fontSize: true,\n lineHeight: true,\n fontFamily: true\n },\n outline: {\n outlineWidth: true,\n outlineStyle: true,\n outlineColor: true\n }\n};\n\nvar CSSProperty = {\n isUnitlessNumber: isUnitlessNumber,\n shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nmodule.exports = CSSProperty;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar quoteAttributeValueForBrowser = require('./quoteAttributeValueForBrowser');\nvar warning = require('fbjs/lib/warning');\n\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\n\nfunction isAttributeNameSafe(attributeName) {\n if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {\n return true;\n }\n if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {\n return false;\n }\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n illegalAttributeNameCache[attributeName] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : void 0;\n return false;\n}\n\nfunction shouldIgnoreValue(propertyInfo, value) {\n return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;\n}\n\n/**\n * Operations for dealing with DOM properties.\n */\nvar DOMPropertyOperations = {\n\n /**\n * Creates markup for the ID property.\n *\n * @param {string} id Unescaped ID.\n * @return {string} Markup string.\n */\n createMarkupForID: function (id) {\n return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);\n },\n\n setAttributeForID: function (node, id) {\n node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);\n },\n\n createMarkupForRoot: function () {\n return DOMProperty.ROOT_ATTRIBUTE_NAME + '=\"\"';\n },\n\n setAttributeForRoot: function (node) {\n node.setAttribute(DOMProperty.ROOT_ATTRIBUTE_NAME, '');\n },\n\n /**\n * Creates markup for a property.\n *\n * @param {string} name\n * @param {*} value\n * @return {?string} Markup string, or null if the property was invalid.\n */\n createMarkupForProperty: function (name, value) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n if (shouldIgnoreValue(propertyInfo, value)) {\n return '';\n }\n var attributeName = propertyInfo.attributeName;\n if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n return attributeName + '=\"\"';\n }\n return attributeName + '=' + quoteAttributeValueForBrowser(value);\n } else if (DOMProperty.isCustomAttribute(name)) {\n if (value == null) {\n return '';\n }\n return name + '=' + quoteAttributeValueForBrowser(value);\n }\n return null;\n },\n\n /**\n * Creates markup for a custom property.\n *\n * @param {string} name\n * @param {*} value\n * @return {string} Markup string, or empty string if the property was invalid.\n */\n createMarkupForCustomAttribute: function (name, value) {\n if (!isAttributeNameSafe(name) || value == null) {\n return '';\n }\n return name + '=' + quoteAttributeValueForBrowser(value);\n },\n\n /**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n setValueForProperty: function (node, name, value) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n var mutationMethod = propertyInfo.mutationMethod;\n if (mutationMethod) {\n mutationMethod(node, value);\n } else if (shouldIgnoreValue(propertyInfo, value)) {\n this.deleteValueForProperty(node, name);\n return;\n } else if (propertyInfo.mustUseProperty) {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propertyInfo.propertyName] = value;\n } else {\n var attributeName = propertyInfo.attributeName;\n var namespace = propertyInfo.attributeNamespace;\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n if (namespace) {\n node.setAttributeNS(namespace, attributeName, '' + value);\n } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n node.setAttribute(attributeName, '');\n } else {\n node.setAttribute(attributeName, '' + value);\n }\n }\n } else if (DOMProperty.isCustomAttribute(name)) {\n DOMPropertyOperations.setValueForAttribute(node, name, value);\n return;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var payload = {};\n payload[name] = value;\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: ReactDOMComponentTree.getInstanceFromNode(node)._debugID,\n type: 'update attribute',\n payload: payload\n });\n }\n },\n\n setValueForAttribute: function (node, name, value) {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n if (value == null) {\n node.removeAttribute(name);\n } else {\n node.setAttribute(name, '' + value);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var payload = {};\n payload[name] = value;\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: ReactDOMComponentTree.getInstanceFromNode(node)._debugID,\n type: 'update attribute',\n payload: payload\n });\n }\n },\n\n /**\n * Deletes an attributes from a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n */\n deleteValueForAttribute: function (node, name) {\n node.removeAttribute(name);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: ReactDOMComponentTree.getInstanceFromNode(node)._debugID,\n type: 'remove attribute',\n payload: name\n });\n }\n },\n\n /**\n * Deletes the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n */\n deleteValueForProperty: function (node, name) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n var mutationMethod = propertyInfo.mutationMethod;\n if (mutationMethod) {\n mutationMethod(node, undefined);\n } else if (propertyInfo.mustUseProperty) {\n var propName = propertyInfo.propertyName;\n if (propertyInfo.hasBooleanValue) {\n node[propName] = false;\n } else {\n node[propName] = '';\n }\n } else {\n node.removeAttribute(propertyInfo.attributeName);\n }\n } else if (DOMProperty.isCustomAttribute(name)) {\n node.removeAttribute(name);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: ReactDOMComponentTree.getInstanceFromNode(node)._debugID,\n type: 'remove attribute',\n payload: name\n });\n }\n }\n\n};\n\nmodule.exports = DOMPropertyOperations;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnValueLink = false;\nvar didWarnValueDefaultValue = false;\n\nfunction updateOptionsIfPendingUpdateAndMounted() {\n if (this._rootNodeID && this._wrapperState.pendingUpdate) {\n this._wrapperState.pendingUpdate = false;\n\n var props = this._currentElement.props;\n var value = LinkedValueUtils.getValue(props);\n\n if (value != null) {\n updateOptions(this, Boolean(props.multiple), value);\n }\n }\n}\n\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n\n/**\n * Validation function for `value` and `defaultValue`.\n * @private\n */\nfunction checkSelectPropTypes(inst, props) {\n var owner = inst._currentElement._owner;\n LinkedValueUtils.checkPropTypes('select', props, owner);\n\n if (props.valueLink !== undefined && !didWarnValueLink) {\n process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.') : void 0;\n didWarnValueLink = true;\n }\n\n for (var i = 0; i < valuePropNames.length; i++) {\n var propName = valuePropNames[i];\n if (props[propName] == null) {\n continue;\n }\n var isArray = Array.isArray(props[propName]);\n if (props.multiple && !isArray) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;\n } else if (!props.multiple && isArray) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;\n }\n }\n}\n\n/**\n * @param {ReactDOMComponent} inst\n * @param {boolean} multiple\n * @param {*} propValue A stringable (with `multiple`, a list of stringables).\n * @private\n */\nfunction updateOptions(inst, multiple, propValue) {\n var selectedValue, i;\n var options = ReactDOMComponentTree.getNodeFromInstance(inst).options;\n\n if (multiple) {\n selectedValue = {};\n for (i = 0; i < propValue.length; i++) {\n selectedValue['' + propValue[i]] = true;\n }\n for (i = 0; i < options.length; i++) {\n var selected = selectedValue.hasOwnProperty(options[i].value);\n if (options[i].selected !== selected) {\n options[i].selected = selected;\n }\n }\n } else {\n // Do not set `select.value` as exact behavior isn't consistent across all\n // browsers for all cases.\n selectedValue = '' + propValue;\n for (i = 0; i < options.length; i++) {\n if (options[i].value === selectedValue) {\n options[i].selected = true;\n return;\n }\n }\n if (options.length) {\n options[0].selected = true;\n }\n }\n}\n\n/**\n * Implements a <select> host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\nvar ReactDOMSelect = {\n getHostProps: function (inst, props) {\n return _assign({}, props, {\n onChange: inst._wrapperState.onChange,\n value: undefined\n });\n },\n\n mountWrapper: function (inst, props) {\n if (process.env.NODE_ENV !== 'production') {\n checkSelectPropTypes(inst, props);\n }\n\n var value = LinkedValueUtils.getValue(props);\n inst._wrapperState = {\n pendingUpdate: false,\n initialValue: value != null ? value : props.defaultValue,\n listeners: null,\n onChange: _handleChange.bind(inst),\n wasMultiple: Boolean(props.multiple)\n };\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;\n didWarnValueDefaultValue = true;\n }\n },\n\n getSelectValueContext: function (inst) {\n // ReactDOMOption looks at this initial value so the initial generated\n // markup has correct `selected` attributes\n return inst._wrapperState.initialValue;\n },\n\n postUpdateWrapper: function (inst) {\n var props = inst._currentElement.props;\n\n // After the initial mount, we control selected-ness manually so don't pass\n // this value down\n inst._wrapperState.initialValue = undefined;\n\n var wasMultiple = inst._wrapperState.wasMultiple;\n inst._wrapperState.wasMultiple = Boolean(props.multiple);\n\n var value = LinkedValueUtils.getValue(props);\n if (value != null) {\n inst._wrapperState.pendingUpdate = false;\n updateOptions(inst, Boolean(props.multiple), value);\n } else if (wasMultiple !== Boolean(props.multiple)) {\n // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n if (props.defaultValue != null) {\n updateOptions(inst, Boolean(props.multiple), props.defaultValue);\n } else {\n // Revert the select back to its default unselected state.\n updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');\n }\n }\n }\n};\n\nfunction _handleChange(event) {\n var props = this._currentElement.props;\n var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n if (this._rootNodeID) {\n this._wrapperState.pendingUpdate = true;\n }\n ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);\n return returnValue;\n}\n\nmodule.exports = ReactDOMSelect;","// 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","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar ReactCompositeComponent = require('./ReactCompositeComponent');\nvar ReactEmptyComponent = require('./ReactEmptyComponent');\nvar ReactHostComponent = require('./ReactHostComponent');\n\nvar getNextDebugID = require('./getNextDebugID');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n// To avoid a cyclic dependency, we create the final class in this module\nvar ReactCompositeComponentWrapper = function (element) {\n this.construct(element);\n};\n_assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent, {\n _instantiateReactComponent: instantiateReactComponent\n});\n\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\n/**\n * Check if the type reference is a known internal type. I.e. not a user\n * provided composite type.\n *\n * @param {function} type\n * @return {boolean} Returns true if this is a valid internal type.\n */\nfunction isInternalComponentType(type) {\n return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';\n}\n\n/**\n * Given a ReactNode, create an instance that will actually be mounted.\n *\n * @param {ReactNode} node\n * @param {boolean} shouldHaveDebugID\n * @return {object} A new instance of the element's constructor.\n * @protected\n */\nfunction instantiateReactComponent(node, shouldHaveDebugID) {\n var instance;\n\n if (node === null || node === false) {\n instance = ReactEmptyComponent.create(instantiateReactComponent);\n } else if (typeof node === 'object') {\n var element = node;\n !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : _prodInvariant('130', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : void 0;\n\n // Special case string values\n if (typeof element.type === 'string') {\n instance = ReactHostComponent.createInternalComponent(element);\n } else if (isInternalComponentType(element.type)) {\n // This is temporarily available for custom components that are not string\n // representations. I.e. ART. Once those are updated to use the string\n // representation, we can drop this code path.\n instance = new element.type(element);\n\n // We renamed this. Allow the old name for compat. :(\n if (!instance.getHostNode) {\n instance.getHostNode = instance.getNativeNode;\n }\n } else {\n instance = new ReactCompositeComponentWrapper(element);\n }\n } else if (typeof node === 'string' || typeof node === 'number') {\n instance = ReactHostComponent.createInstanceForText(node);\n } else {\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : _prodInvariant('131', typeof node) : void 0;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getHostNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;\n }\n\n // These two fields are used by the DOM and ART diffing algorithms\n // respectively. Instead of using expandos on components, we should be\n // storing the state needed by the diffing algorithms elsewhere.\n instance._mountIndex = 0;\n instance._mountImage = null;\n\n if (process.env.NODE_ENV !== 'production') {\n instance._debugID = shouldHaveDebugID ? getNextDebugID() : 0;\n }\n\n // Internal instances should fully constructed at this point, so they should\n // not get any new fields added to them at this point.\n if (process.env.NODE_ENV !== 'production') {\n if (Object.preventExtensions) {\n Object.preventExtensions(instance);\n }\n }\n\n return instance;\n}\n\nmodule.exports = instantiateReactComponent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar React = require('react/lib/React');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar ReactNodeTypes = {\n HOST: 0,\n COMPOSITE: 1,\n EMPTY: 2,\n\n getType: function (node) {\n if (node === null || node === false) {\n return ReactNodeTypes.EMPTY;\n } else if (React.isValidElement(node)) {\n if (typeof node.type === 'function') {\n return ReactNodeTypes.COMPOSITE;\n } else {\n return ReactNodeTypes.HOST;\n }\n }\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unexpected node: %s', node) : _prodInvariant('26', node) : void 0;\n }\n};\n\nmodule.exports = ReactNodeTypes;","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar emptyComponentFactory;\n\nvar ReactEmptyComponentInjection = {\n injectEmptyComponentFactory: function (factory) {\n emptyComponentFactory = factory;\n }\n};\n\nvar ReactEmptyComponent = {\n create: function (instantiate) {\n return emptyComponentFactory(instantiate);\n }\n};\n\nReactEmptyComponent.injection = ReactEmptyComponentInjection;\n\nmodule.exports = ReactEmptyComponent;","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar genericComponentClass = null;\n// This registry keeps track of wrapper classes around host tags.\nvar tagToComponentClass = {};\nvar textComponentClass = null;\n\nvar ReactHostComponentInjection = {\n // This accepts a class that receives the tag string. This is a catch all\n // that can render any kind of tag.\n injectGenericComponentClass: function (componentClass) {\n genericComponentClass = componentClass;\n },\n // This accepts a text component class that takes the text string to be\n // rendered as props.\n injectTextComponentClass: function (componentClass) {\n textComponentClass = componentClass;\n },\n // This accepts a keyed object with classes as values. Each key represents a\n // tag. That particular tag will use this class instead of the generic one.\n injectComponentClasses: function (componentClasses) {\n _assign(tagToComponentClass, componentClasses);\n }\n};\n\n/**\n * Get a host internal component class for a specific tag.\n *\n * @param {ReactElement} element The element to create.\n * @return {function} The internal class constructor function.\n */\nfunction createInternalComponent(element) {\n !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : _prodInvariant('111', element.type) : void 0;\n return new genericComponentClass(element);\n}\n\n/**\n * @param {ReactText} text\n * @return {ReactComponent}\n */\nfunction createInstanceForText(text) {\n return new textComponentClass(text);\n}\n\n/**\n * @param {ReactComponent} component\n * @return {boolean}\n */\nfunction isTextComponent(component) {\n return component instanceof textComponentClass;\n}\n\nvar ReactHostComponent = {\n createInternalComponent: createInternalComponent,\n createInstanceForText: createInstanceForText,\n isTextComponent: isTextComponent,\n injection: ReactHostComponentInjection\n};\n\nmodule.exports = ReactHostComponent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('react/lib/ReactCurrentOwner');\nvar REACT_ELEMENT_TYPE = require('./ReactElementSymbol');\n\nvar getIteratorFn = require('./getIteratorFn');\nvar invariant = require('fbjs/lib/invariant');\nvar KeyEscapeUtils = require('./KeyEscapeUtils');\nvar warning = require('fbjs/lib/warning');\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n\n/**\n * This is inlined from ReactElement since this file is shared between\n * isomorphic and renderers. We could extract this to a\n *\n */\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar didWarnAboutMaps = false;\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (component && typeof component === 'object' && component.key != null) {\n // Explicit key\n return KeyEscapeUtils.escape(component.key);\n }\n // Implicit key determined by the index in the set\n return index.toString(36);\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n if (children === null || type === 'string' || type === 'number' ||\n // The following is inlined from ReactElement. This means we can optimize\n // some checks. React Fiber also inlines this logic for similar purposes.\n type === 'object' && children.$$typeof === REACT_ELEMENT_TYPE) {\n callback(traverseContext, children,\n // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n if (iteratorFn) {\n var iterator = iteratorFn.call(children);\n var step;\n if (iteratorFn !== children.entries) {\n var ii = 0;\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n if (process.env.NODE_ENV !== 'production') {\n var mapsAsChildrenAddendum = '';\n if (ReactCurrentOwner.current) {\n var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();\n if (mapsAsChildrenOwnerName) {\n mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';\n }\n }\n process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;\n didWarnAboutMaps = true;\n }\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n child = entry[1];\n nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n }\n }\n } else if (type === 'object') {\n var addendum = '';\n if (process.env.NODE_ENV !== 'production') {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\n if (children._isReactElement) {\n addendum = ' It looks like you\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\n }\n if (ReactCurrentOwner.current) {\n var name = ReactCurrentOwner.current.getName();\n if (name) {\n addendum += ' Check the render method of `' + name + '`.';\n }\n }\n }\n var childrenString = String(children);\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;\n }\n }\n\n return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\nmodule.exports = traverseAllChildren;","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction isNative(fn) {\n // Based on isNative() from Lodash\n var funcToString = Function.prototype.toString;\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var reIsNative = RegExp('^' + funcToString\n // Take an example native function source for comparison\n .call(hasOwnProperty)\n // Strip regex characters so we can use it for regex\n .replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n // Remove hasOwnProperty from the template to make it generic\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n try {\n var source = funcToString.call(fn);\n return reIsNative.test(source);\n } catch (err) {\n return false;\n }\n}\n\nvar canUseCollections =\n// Array.from\ntypeof Array.from === 'function' &&\n// Map\ntypeof Map === 'function' && isNative(Map) &&\n// Map.prototype.keys\nMap.prototype != null && typeof Map.prototype.keys === 'function' && isNative(Map.prototype.keys) &&\n// Set\ntypeof Set === 'function' && isNative(Set) &&\n// Set.prototype.keys\nSet.prototype != null && typeof Set.prototype.keys === 'function' && isNative(Set.prototype.keys);\n\nvar setItem;\nvar getItem;\nvar removeItem;\nvar getItemIDs;\nvar addRoot;\nvar removeRoot;\nvar getRootIDs;\n\nif (canUseCollections) {\n var itemMap = new Map();\n var rootIDSet = new Set();\n\n setItem = function (id, item) {\n itemMap.set(id, item);\n };\n getItem = function (id) {\n return itemMap.get(id);\n };\n removeItem = function (id) {\n itemMap['delete'](id);\n };\n getItemIDs = function () {\n return Array.from(itemMap.keys());\n };\n\n addRoot = function (id) {\n rootIDSet.add(id);\n };\n removeRoot = function (id) {\n rootIDSet['delete'](id);\n };\n getRootIDs = function () {\n return Array.from(rootIDSet.keys());\n };\n} else {\n var itemByKey = {};\n var rootByKey = {};\n\n // Use non-numeric keys to prevent V8 performance issues:\n // https://github.com/facebook/react/pull/7232\n var getKeyFromID = function (id) {\n return '.' + id;\n };\n var getIDFromKey = function (key) {\n return parseInt(key.substr(1), 10);\n };\n\n setItem = function (id, item) {\n var key = getKeyFromID(id);\n itemByKey[key] = item;\n };\n getItem = function (id) {\n var key = getKeyFromID(id);\n return itemByKey[key];\n };\n removeItem = function (id) {\n var key = getKeyFromID(id);\n delete itemByKey[key];\n };\n getItemIDs = function () {\n return Object.keys(itemByKey).map(getIDFromKey);\n };\n\n addRoot = function (id) {\n var key = getKeyFromID(id);\n rootByKey[key] = true;\n };\n removeRoot = function (id) {\n var key = getKeyFromID(id);\n delete rootByKey[key];\n };\n getRootIDs = function () {\n return Object.keys(rootByKey).map(getIDFromKey);\n };\n}\n\nvar unmountedIDs = [];\n\nfunction purgeDeep(id) {\n var item = getItem(id);\n if (item) {\n var childIDs = item.childIDs;\n\n removeItem(id);\n childIDs.forEach(purgeDeep);\n }\n}\n\nfunction describeComponentFrame(name, source, ownerName) {\n return '\\n in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');\n}\n\nfunction getDisplayName(element) {\n if (element == null) {\n return '#empty';\n } else if (typeof element === 'string' || typeof element === 'number') {\n return '#text';\n } else if (typeof element.type === 'string') {\n return element.type;\n } else {\n return element.type.displayName || element.type.name || 'Unknown';\n }\n}\n\nfunction describeID(id) {\n var name = ReactComponentTreeHook.getDisplayName(id);\n var element = ReactComponentTreeHook.getElement(id);\n var ownerID = ReactComponentTreeHook.getOwnerID(id);\n var ownerName;\n if (ownerID) {\n ownerName = ReactComponentTreeHook.getDisplayName(ownerID);\n }\n process.env.NODE_ENV !== 'production' ? warning(element, 'ReactComponentTreeHook: Missing React element for debugID %s when ' + 'building stack', id) : void 0;\n return describeComponentFrame(name, element && element._source, ownerName);\n}\n\nvar ReactComponentTreeHook = {\n onSetChildren: function (id, nextChildIDs) {\n var item = getItem(id);\n !item ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Item must have been set') : _prodInvariant('144') : void 0;\n item.childIDs = nextChildIDs;\n\n for (var i = 0; i < nextChildIDs.length; i++) {\n var nextChildID = nextChildIDs[i];\n var nextChild = getItem(nextChildID);\n !nextChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected hook events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('140') : void 0;\n !(nextChild.childIDs != null || typeof nextChild.element !== 'object' || nextChild.element == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetChildren() to fire for a container child before its parent includes it in onSetChildren().') : _prodInvariant('141') : void 0;\n !nextChild.isMounted ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;\n if (nextChild.parentID == null) {\n nextChild.parentID = id;\n // TODO: This shouldn't be necessary but mounting a new root during in\n // componentWillMount currently causes not-yet-mounted components to\n // be purged from our tree data so their parent id is missing.\n }\n !(nextChild.parentID === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onBeforeMountComponent() parent and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('142', nextChildID, nextChild.parentID, id) : void 0;\n }\n },\n onBeforeMountComponent: function (id, element, parentID) {\n var item = {\n element: element,\n parentID: parentID,\n text: null,\n childIDs: [],\n isMounted: false,\n updateCount: 0\n };\n setItem(id, item);\n },\n onBeforeUpdateComponent: function (id, element) {\n var item = getItem(id);\n if (!item || !item.isMounted) {\n // We may end up here as a result of setState() in componentWillUnmount().\n // In this case, ignore the element.\n return;\n }\n item.element = element;\n },\n onMountComponent: function (id) {\n var item = getItem(id);\n !item ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Item must have been set') : _prodInvariant('144') : void 0;\n item.isMounted = true;\n var isRoot = item.parentID === 0;\n if (isRoot) {\n addRoot(id);\n }\n },\n onUpdateComponent: function (id) {\n var item = getItem(id);\n if (!item || !item.isMounted) {\n // We may end up here as a result of setState() in componentWillUnmount().\n // In this case, ignore the element.\n return;\n }\n item.updateCount++;\n },\n onUnmountComponent: function (id) {\n var item = getItem(id);\n if (item) {\n // We need to check if it exists.\n // `item` might not exist if it is inside an error boundary, and a sibling\n // error boundary child threw while mounting. Then this instance never\n // got a chance to mount, but it still gets an unmounting event during\n // the error boundary cleanup.\n item.isMounted = false;\n var isRoot = item.parentID === 0;\n if (isRoot) {\n removeRoot(id);\n }\n }\n unmountedIDs.push(id);\n },\n purgeUnmountedComponents: function () {\n if (ReactComponentTreeHook._preventPurging) {\n // Should only be used for testing.\n return;\n }\n\n for (var i = 0; i < unmountedIDs.length; i++) {\n var id = unmountedIDs[i];\n purgeDeep(id);\n }\n unmountedIDs.length = 0;\n },\n isMounted: function (id) {\n var item = getItem(id);\n return item ? item.isMounted : false;\n },\n getCurrentStackAddendum: function (topElement) {\n var info = '';\n if (topElement) {\n var name = getDisplayName(topElement);\n var owner = topElement._owner;\n info += describeComponentFrame(name, topElement._source, owner && owner.getName());\n }\n\n var currentOwner = ReactCurrentOwner.current;\n var id = currentOwner && currentOwner._debugID;\n\n info += ReactComponentTreeHook.getStackAddendumByID(id);\n return info;\n },\n getStackAddendumByID: function (id) {\n var info = '';\n while (id) {\n info += describeID(id);\n id = ReactComponentTreeHook.getParentID(id);\n }\n return info;\n },\n getChildIDs: function (id) {\n var item = getItem(id);\n return item ? item.childIDs : [];\n },\n getDisplayName: function (id) {\n var element = ReactComponentTreeHook.getElement(id);\n if (!element) {\n return null;\n }\n return getDisplayName(element);\n },\n getElement: function (id) {\n var item = getItem(id);\n return item ? item.element : null;\n },\n getOwnerID: function (id) {\n var element = ReactComponentTreeHook.getElement(id);\n if (!element || !element._owner) {\n return null;\n }\n return element._owner._debugID;\n },\n getParentID: function (id) {\n var item = getItem(id);\n return item ? item.parentID : null;\n },\n getSource: function (id) {\n var item = getItem(id);\n var element = item ? item.element : null;\n var source = element != null ? element._source : null;\n return source;\n },\n getText: function (id) {\n var element = ReactComponentTreeHook.getElement(id);\n if (typeof element === 'string') {\n return element;\n } else if (typeof element === 'number') {\n return '' + element;\n } else {\n return null;\n }\n },\n getUpdateCount: function (id) {\n var item = getItem(id);\n return item ? item.updateCount : 0;\n },\n\n\n getRootIDs: getRootIDs,\n getRegisteredIDs: getItemIDs\n};\n\nmodule.exports = ReactComponentTreeHook;","'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 emptyFunction = require('./emptyFunction');\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n /**\n * Listen to DOM events during the bubble phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n listen: function listen(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, false);\n }\n };\n } else if (target.attachEvent) {\n target.attachEvent('on' + eventType, callback);\n return {\n remove: function remove() {\n target.detachEvent('on' + eventType, callback);\n }\n };\n }\n },\n\n /**\n * Listen to DOM events during the capture phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n capture: function capture(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, true);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, true);\n }\n };\n } else {\n if (process.env.NODE_ENV !== 'production') {\n console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n }\n return {\n remove: emptyFunction\n };\n }\n },\n\n registerDefault: function registerDefault() {}\n};\n\nmodule.exports = EventListener;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ReactDOMSelection = require('./ReactDOMSelection');\n\nvar containsNode = require('fbjs/lib/containsNode');\nvar focusNode = require('fbjs/lib/focusNode');\nvar getActiveElement = require('fbjs/lib/getActiveElement');\n\nfunction isInDocument(node) {\n return containsNode(document.documentElement, node);\n}\n\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\nvar ReactInputSelection = {\n\n hasSelectionCapabilities: function (elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');\n },\n\n getSelectionInformation: function () {\n var focusedElem = getActiveElement();\n return {\n focusedElem: focusedElem,\n selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null\n };\n },\n\n /**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\n restoreSelection: function (priorSelectionInformation) {\n var curFocusedElem = getActiveElement();\n var priorFocusedElem = priorSelectionInformation.focusedElem;\n var priorSelectionRange = priorSelectionInformation.selectionRange;\n if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {\n ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);\n }\n focusNode(priorFocusedElem);\n }\n },\n\n /**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\n getSelection: function (input) {\n var selection;\n\n if ('selectionStart' in input) {\n // Modern browser with input or textarea.\n selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {\n // IE8 input.\n var range = document.selection.createRange();\n // There can only be one selection per document in IE, so it must\n // be in our element.\n if (range.parentElement() === input) {\n selection = {\n start: -range.moveStart('character', -input.value.length),\n end: -range.moveEnd('character', -input.value.length)\n };\n }\n } else {\n // Content editable or old IE textarea.\n selection = ReactDOMSelection.getOffsets(input);\n }\n\n return selection || { start: 0, end: 0 };\n },\n\n /**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input Set selection bounds of this input or textarea\n * -@offsets Object of same form that is returned from get*\n */\n setSelection: function (input, offsets) {\n var start = offsets.start;\n var end = offsets.end;\n if (end === undefined) {\n end = start;\n }\n\n if ('selectionStart' in input) {\n input.selectionStart = start;\n input.selectionEnd = Math.min(end, input.value.length);\n } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {\n var range = input.createTextRange();\n range.collapse(true);\n range.moveStart('character', start);\n range.moveEnd('character', end - start);\n range.select();\n } else {\n ReactDOMSelection.setOffsets(input, offsets);\n }\n }\n};\n\nmodule.exports = ReactInputSelection;","'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\n/* eslint-disable fb-www/typeof-undefined */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not\n * yet defined.\n *\n * @param {?DOMDocument} doc Defaults to current document.\n * @return {?DOMElement}\n */\nfunction getActiveElement(doc) /*?DOMElement*/{\n doc = doc || (typeof document !== 'undefined' ? document : undefined);\n if (typeof doc === 'undefined') {\n return null;\n }\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\n\nmodule.exports = getActiveElement;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar DOMProperty = require('./DOMProperty');\nvar React = require('react/lib/React');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactCurrentOwner = require('react/lib/ReactCurrentOwner');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDOMContainerInfo = require('./ReactDOMContainerInfo');\nvar ReactDOMFeatureFlags = require('./ReactDOMFeatureFlags');\nvar ReactFeatureFlags = require('./ReactFeatureFlags');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactMarkupChecksum = require('./ReactMarkupChecksum');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar invariant = require('fbjs/lib/invariant');\nvar setInnerHTML = require('./setInnerHTML');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar warning = require('fbjs/lib/warning');\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOC_NODE_TYPE = 9;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\nvar instancesByReactRootID = {};\n\n/**\n * Finds the index of the first character\n * that's not common between the two given strings.\n *\n * @return {number} the index of the character where the strings diverge\n */\nfunction firstDifferenceIndex(string1, string2) {\n var minLen = Math.min(string1.length, string2.length);\n for (var i = 0; i < minLen; i++) {\n if (string1.charAt(i) !== string2.charAt(i)) {\n return i;\n }\n }\n return string1.length === string2.length ? -1 : minLen;\n}\n\n/**\n * @param {DOMElement|DOMDocument} container DOM element that may contain\n * a React component\n * @return {?*} DOM element that may have the reactRoot ID, or null.\n */\nfunction getReactRootElementInContainer(container) {\n if (!container) {\n return null;\n }\n\n if (container.nodeType === DOC_NODE_TYPE) {\n return container.documentElement;\n } else {\n return container.firstChild;\n }\n}\n\nfunction internalGetID(node) {\n // If node is something like a window, document, or text node, none of\n // which support attributes or a .getAttribute method, gracefully return\n // the empty string, as if the attribute were missing.\n return node.getAttribute && node.getAttribute(ATTR_NAME) || '';\n}\n\n/**\n * Mounts this component and inserts it into the DOM.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {DOMElement} container DOM element to mount into.\n * @param {ReactReconcileTransaction} transaction\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction mountComponentIntoNode(wrapperInstance, container, transaction, shouldReuseMarkup, context) {\n var markerName;\n if (ReactFeatureFlags.logTopLevelRenders) {\n var wrappedElement = wrapperInstance._currentElement.props.child;\n var type = wrappedElement.type;\n markerName = 'React mount: ' + (typeof type === 'string' ? type : type.displayName || type.name);\n console.time(markerName);\n }\n\n var markup = ReactReconciler.mountComponent(wrapperInstance, transaction, null, ReactDOMContainerInfo(wrapperInstance, container), context, 0 /* parentDebugID */\n );\n\n if (markerName) {\n console.timeEnd(markerName);\n }\n\n wrapperInstance._renderedComponent._topLevelWrapper = wrapperInstance;\n ReactMount._mountImageIntoNode(markup, container, wrapperInstance, shouldReuseMarkup, transaction);\n}\n\n/**\n * Batched mount.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {DOMElement} container DOM element to mount into.\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction batchedMountComponentIntoNode(componentInstance, container, shouldReuseMarkup, context) {\n var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n /* useCreateElement */\n !shouldReuseMarkup && ReactDOMFeatureFlags.useCreateElement);\n transaction.perform(mountComponentIntoNode, null, componentInstance, container, transaction, shouldReuseMarkup, context);\n ReactUpdates.ReactReconcileTransaction.release(transaction);\n}\n\n/**\n * Unmounts a component and removes it from the DOM.\n *\n * @param {ReactComponent} instance React component instance.\n * @param {DOMElement} container DOM element to unmount from.\n * @final\n * @internal\n * @see {ReactMount.unmountComponentAtNode}\n */\nfunction unmountComponentFromNode(instance, container, safely) {\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onBeginFlush();\n }\n ReactReconciler.unmountComponent(instance, safely);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onEndFlush();\n }\n\n if (container.nodeType === DOC_NODE_TYPE) {\n container = container.documentElement;\n }\n\n // http://jsperf.com/emptying-a-node\n while (container.lastChild) {\n container.removeChild(container.lastChild);\n }\n}\n\n/**\n * True if the supplied DOM node has a direct React-rendered child that is\n * not a React root element. Useful for warning in `render`,\n * `unmountComponentAtNode`, etc.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM element contains a direct child that was\n * rendered by React but is not a root element.\n * @internal\n */\nfunction hasNonRootReactChild(container) {\n var rootEl = getReactRootElementInContainer(container);\n if (rootEl) {\n var inst = ReactDOMComponentTree.getInstanceFromNode(rootEl);\n return !!(inst && inst._hostParent);\n }\n}\n\n/**\n * True if the supplied DOM node is a React DOM element and\n * it has been rendered by another copy of React.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM has been rendered by another copy of React\n * @internal\n */\nfunction nodeIsRenderedByOtherInstance(container) {\n var rootEl = getReactRootElementInContainer(container);\n return !!(rootEl && isReactNode(rootEl) && !ReactDOMComponentTree.getInstanceFromNode(rootEl));\n}\n\n/**\n * True if the supplied DOM node is a valid node element.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM is a valid DOM node.\n * @internal\n */\nfunction isValidContainer(node) {\n return !!(node && (node.nodeType === ELEMENT_NODE_TYPE || node.nodeType === DOC_NODE_TYPE || node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE));\n}\n\n/**\n * True if the supplied DOM node is a valid React node element.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM is a valid React DOM node.\n * @internal\n */\nfunction isReactNode(node) {\n return isValidContainer(node) && (node.hasAttribute(ROOT_ATTR_NAME) || node.hasAttribute(ATTR_NAME));\n}\n\nfunction getHostRootInstanceInContainer(container) {\n var rootEl = getReactRootElementInContainer(container);\n var prevHostInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);\n return prevHostInstance && !prevHostInstance._hostParent ? prevHostInstance : null;\n}\n\nfunction getTopLevelWrapperInContainer(container) {\n var root = getHostRootInstanceInContainer(container);\n return root ? root._hostContainerInfo._topLevelWrapper : null;\n}\n\n/**\n * Temporary (?) hack so that we can store all top-level pending updates on\n * composites instead of having to worry about different types of components\n * here.\n */\nvar topLevelRootCounter = 1;\nvar TopLevelWrapper = function () {\n this.rootID = topLevelRootCounter++;\n};\nTopLevelWrapper.prototype.isReactComponent = {};\nif (process.env.NODE_ENV !== 'production') {\n TopLevelWrapper.displayName = 'TopLevelWrapper';\n}\nTopLevelWrapper.prototype.render = function () {\n return this.props.child;\n};\nTopLevelWrapper.isReactTopLevelWrapper = true;\n\n/**\n * Mounting is the process of initializing a React component by creating its\n * representative DOM elements and inserting them into a supplied `container`.\n * Any prior content inside `container` is destroyed in the process.\n *\n * ReactMount.render(\n * component,\n * document.getElementById('container')\n * );\n *\n * <div id=\"container\"> <-- Supplied `container`.\n * <div data-reactid=\".3\"> <-- Rendered reactRoot of React\n * // ... component.\n * </div>\n * </div>\n *\n * Inside of `container`, the first element rendered is the \"reactRoot\".\n */\nvar ReactMount = {\n\n TopLevelWrapper: TopLevelWrapper,\n\n /**\n * Used by devtools. The keys are not important.\n */\n _instancesByReactRootID: instancesByReactRootID,\n\n /**\n * This is a hook provided to support rendering React components while\n * ensuring that the apparent scroll position of its `container` does not\n * change.\n *\n * @param {DOMElement} container The `container` being rendered into.\n * @param {function} renderCallback This must be called once to do the render.\n */\n scrollMonitor: function (container, renderCallback) {\n renderCallback();\n },\n\n /**\n * Take a component that's already mounted into the DOM and replace its props\n * @param {ReactComponent} prevComponent component instance already in the DOM\n * @param {ReactElement} nextElement component instance to render\n * @param {DOMElement} container container to render into\n * @param {?function} callback function triggered on completion\n */\n _updateRootComponent: function (prevComponent, nextElement, nextContext, container, callback) {\n ReactMount.scrollMonitor(container, function () {\n ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement, nextContext);\n if (callback) {\n ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);\n }\n });\n\n return prevComponent;\n },\n\n /**\n * Render a new component into the DOM. Hooked by hooks!\n *\n * @param {ReactElement} nextElement element to render\n * @param {DOMElement} container container to render into\n * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\n * @return {ReactComponent} nextComponent\n */\n _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case.\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;\n\n !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : _prodInvariant('37') : void 0;\n\n ReactBrowserEventEmitter.ensureScrollValueMonitoring();\n var componentInstance = instantiateReactComponent(nextElement, false);\n\n // The initial render is synchronous but any updates that happen during\n // rendering, in componentWillMount or componentDidMount, will be batched\n // according to the current batching strategy.\n\n ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, container, shouldReuseMarkup, context);\n\n var wrapperID = componentInstance._instance.rootID;\n instancesByReactRootID[wrapperID] = componentInstance;\n\n return componentInstance;\n },\n\n /**\n * Renders a React component into the DOM in the supplied `container`.\n *\n * If the React component was previously rendered into `container`, this will\n * perform an update on it and only mutate the DOM as necessary to reflect the\n * latest React component.\n *\n * @param {ReactComponent} parentComponent The conceptual parent of this render tree.\n * @param {ReactElement} nextElement Component element to render.\n * @param {DOMElement} container DOM element to render into.\n * @param {?function} callback function triggered on completion\n * @return {ReactComponent} Component instance rendered in `container`.\n */\n renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n !(parentComponent != null && ReactInstanceMap.has(parentComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : _prodInvariant('38') : void 0;\n return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);\n },\n\n _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n ReactUpdateQueue.validateCallback(callback, 'ReactDOM.render');\n !React.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing a string like \\'div\\', pass ' + 'React.createElement(\\'div\\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' :\n // Check if it quacks like an element\n nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : _prodInvariant('39', typeof nextElement === 'string' ? ' Instead of passing a string like \\'div\\', pass ' + 'React.createElement(\\'div\\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' : nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : void 0;\n\n process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : void 0;\n\n var nextWrappedElement = React.createElement(TopLevelWrapper, { child: nextElement });\n\n var nextContext;\n if (parentComponent) {\n var parentInst = ReactInstanceMap.get(parentComponent);\n nextContext = parentInst._processChildContext(parentInst._context);\n } else {\n nextContext = emptyObject;\n }\n\n var prevComponent = getTopLevelWrapperInContainer(container);\n\n if (prevComponent) {\n var prevWrappedElement = prevComponent._currentElement;\n var prevElement = prevWrappedElement.props.child;\n if (shouldUpdateReactComponent(prevElement, nextElement)) {\n var publicInst = prevComponent._renderedComponent.getPublicInstance();\n var updatedCallback = callback && function () {\n callback.call(publicInst);\n };\n ReactMount._updateRootComponent(prevComponent, nextWrappedElement, nextContext, container, updatedCallback);\n return publicInst;\n } else {\n ReactMount.unmountComponentAtNode(container);\n }\n }\n\n var reactRootElement = getReactRootElementInContainer(container);\n var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);\n var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : void 0;\n\n if (!containerHasReactMarkup || reactRootElement.nextSibling) {\n var rootElementSibling = reactRootElement;\n while (rootElementSibling) {\n if (internalGetID(rootElementSibling)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : void 0;\n break;\n }\n rootElementSibling = rootElementSibling.nextSibling;\n }\n }\n }\n\n var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;\n var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, nextContext)._renderedComponent.getPublicInstance();\n if (callback) {\n callback.call(component);\n }\n return component;\n },\n\n /**\n * Renders a React component into the DOM in the supplied `container`.\n * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.render\n *\n * If the React component was previously rendered into `container`, this will\n * perform an update on it and only mutate the DOM as necessary to reflect the\n * latest React component.\n *\n * @param {ReactElement} nextElement Component element to render.\n * @param {DOMElement} container DOM element to render into.\n * @param {?function} callback function triggered on completion\n * @return {ReactComponent} Component instance rendered in `container`.\n */\n render: function (nextElement, container, callback) {\n return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);\n },\n\n /**\n * Unmounts and destroys the React component rendered in the `container`.\n * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.unmountcomponentatnode\n *\n * @param {DOMElement} container DOM element containing a React component.\n * @return {boolean} True if a component was found in and unmounted from\n * `container`\n */\n unmountComponentAtNode: function (container) {\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case. (Strictly speaking, unmounting won't cause a\n // render but we still don't expect to be in a render call here.)\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;\n\n !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : _prodInvariant('40') : void 0;\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!nodeIsRenderedByOtherInstance(container), 'unmountComponentAtNode(): The node you\\'re attempting to unmount ' + 'was rendered by another copy of React.') : void 0;\n }\n\n var prevComponent = getTopLevelWrapperInContainer(container);\n if (!prevComponent) {\n // Check if the node being unmounted was rendered by React, but isn't a\n // root node.\n var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n // Check if the container itself is a React root node.\n var isContainerReactRoot = container.nodeType === 1 && container.hasAttribute(ROOT_ATTR_NAME);\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : void 0;\n }\n\n return false;\n }\n delete instancesByReactRootID[prevComponent._instance.rootID];\n ReactUpdates.batchedUpdates(unmountComponentFromNode, prevComponent, container, false);\n return true;\n },\n\n _mountImageIntoNode: function (markup, container, instance, shouldReuseMarkup, transaction) {\n !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : _prodInvariant('41') : void 0;\n\n if (shouldReuseMarkup) {\n var rootElement = getReactRootElementInContainer(container);\n if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {\n ReactDOMComponentTree.precacheNode(instance, rootElement);\n return;\n } else {\n var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\n var rootMarkup = rootElement.outerHTML;\n rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);\n\n var normalizedMarkup = markup;\n if (process.env.NODE_ENV !== 'production') {\n // because rootMarkup is retrieved from the DOM, various normalizations\n // will have occurred which will not be present in `markup`. Here,\n // insert markup into a <div> or <iframe> depending on the container\n // type to perform the same normalizations before comparing.\n var normalizer;\n if (container.nodeType === ELEMENT_NODE_TYPE) {\n normalizer = document.createElement('div');\n normalizer.innerHTML = markup;\n normalizedMarkup = normalizer.innerHTML;\n } else {\n normalizer = document.createElement('iframe');\n document.body.appendChild(normalizer);\n normalizer.contentDocument.write(markup);\n normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;\n document.body.removeChild(normalizer);\n }\n }\n\n var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);\n var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);\n\n !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document using server rendering but the checksum was invalid. This usually means you rendered a different component type or props on the client from the one on the server, or your render() methods are impure. React cannot handle this case due to cross-browser quirks by rendering at the document root. You should look for environment dependent code in your components and ensure the props are the same client and server side:\\n%s', difference) : _prodInvariant('42', difference) : void 0;\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\\n%s', difference) : void 0;\n }\n }\n }\n\n !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document but you didn\\'t use server rendering. We can\\'t do this without using server rendering due to cross-browser quirks. See ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('43') : void 0;\n\n if (transaction.useCreateElement) {\n while (container.lastChild) {\n container.removeChild(container.lastChild);\n }\n DOMLazyTree.insertTreeBefore(container, markup, null);\n } else {\n setInnerHTML(container, markup);\n ReactDOMComponentTree.precacheNode(instance, container.firstChild);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var hostNode = ReactDOMComponentTree.getInstanceFromNode(container.firstChild);\n if (hostNode._debugID !== 0) {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: hostNode._debugID,\n type: 'mount',\n payload: markup.toString()\n });\n }\n }\n }\n};\n\nmodule.exports = ReactMount;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ReactNodeTypes = require('./ReactNodeTypes');\n\nfunction getHostComponentFromComposite(inst) {\n var type;\n\n while ((type = inst._renderedNodeType) === ReactNodeTypes.COMPOSITE) {\n inst = inst._renderedComponent;\n }\n\n if (type === ReactNodeTypes.HOST) {\n return inst._renderedComponent;\n } else if (type === ReactNodeTypes.EMPTY) {\n return null;\n }\n}\n\nmodule.exports = getHostComponentFromComposite;","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = createTransitionManager;\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\n\nvar _computeChangedRoutes2 = require('./computeChangedRoutes');\n\nvar _computeChangedRoutes3 = _interopRequireDefault(_computeChangedRoutes2);\n\nvar _TransitionUtils = require('./TransitionUtils');\n\nvar _isActive2 = require('./isActive');\n\nvar _isActive3 = _interopRequireDefault(_isActive2);\n\nvar _getComponents = require('./getComponents');\n\nvar _getComponents2 = _interopRequireDefault(_getComponents);\n\nvar _matchRoutes = require('./matchRoutes');\n\nvar _matchRoutes2 = _interopRequireDefault(_matchRoutes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction hasAnyProperties(object) {\n for (var p in object) {\n if (Object.prototype.hasOwnProperty.call(object, p)) return true;\n }return false;\n}\n\nfunction createTransitionManager(history, routes) {\n var state = {};\n\n // Signature should be (location, indexOnly), but needs to support (path,\n // query, indexOnly)\n function isActive(location, indexOnly) {\n location = history.createLocation(location);\n\n return (0, _isActive3.default)(location, indexOnly, state.location, state.routes, state.params);\n }\n\n var partialNextState = void 0;\n\n function match(location, callback) {\n if (partialNextState && partialNextState.location === location) {\n // Continue from where we left off.\n finishMatch(partialNextState, callback);\n } else {\n (0, _matchRoutes2.default)(routes, location, function (error, nextState) {\n if (error) {\n callback(error);\n } else if (nextState) {\n finishMatch(_extends({}, nextState, { location: location }), callback);\n } else {\n callback();\n }\n });\n }\n }\n\n function finishMatch(nextState, callback) {\n var _computeChangedRoutes = (0, _computeChangedRoutes3.default)(state, nextState),\n leaveRoutes = _computeChangedRoutes.leaveRoutes,\n changeRoutes = _computeChangedRoutes.changeRoutes,\n enterRoutes = _computeChangedRoutes.enterRoutes;\n\n (0, _TransitionUtils.runLeaveHooks)(leaveRoutes, state);\n\n // Tear down confirmation hooks for left routes\n leaveRoutes.filter(function (route) {\n return enterRoutes.indexOf(route) === -1;\n }).forEach(removeListenBeforeHooksForRoute);\n\n // change and enter hooks are run in series\n (0, _TransitionUtils.runChangeHooks)(changeRoutes, state, nextState, function (error, redirectInfo) {\n if (error || redirectInfo) return handleErrorOrRedirect(error, redirectInfo);\n\n (0, _TransitionUtils.runEnterHooks)(enterRoutes, nextState, finishEnterHooks);\n });\n\n function finishEnterHooks(error, redirectInfo) {\n if (error || redirectInfo) return handleErrorOrRedirect(error, redirectInfo);\n\n // TODO: Fetch components after state is updated.\n (0, _getComponents2.default)(nextState, function (error, components) {\n if (error) {\n callback(error);\n } else {\n // TODO: Make match a pure function and have some other API\n // for \"match and update state\".\n callback(null, null, state = _extends({}, nextState, { components: components }));\n }\n });\n }\n\n function handleErrorOrRedirect(error, redirectInfo) {\n if (error) callback(error);else callback(null, redirectInfo);\n }\n }\n\n var RouteGuid = 1;\n\n function getRouteID(route) {\n var create = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n return route.__id__ || create && (route.__id__ = RouteGuid++);\n }\n\n var RouteHooks = Object.create(null);\n\n function getRouteHooksForRoutes(routes) {\n return routes.map(function (route) {\n return RouteHooks[getRouteID(route)];\n }).filter(function (hook) {\n return hook;\n });\n }\n\n function transitionHook(location, callback) {\n (0, _matchRoutes2.default)(routes, location, function (error, nextState) {\n if (nextState == null) {\n // TODO: We didn't actually match anything, but hang\n // onto error/nextState so we don't have to matchRoutes\n // again in the listen callback.\n callback();\n return;\n }\n\n // Cache some state here so we don't have to\n // matchRoutes() again in the listen callback.\n partialNextState = _extends({}, nextState, { location: location });\n\n var hooks = getRouteHooksForRoutes((0, _computeChangedRoutes3.default)(state, partialNextState).leaveRoutes);\n\n var result = void 0;\n for (var i = 0, len = hooks.length; result == null && i < len; ++i) {\n // Passing the location arg here indicates to\n // the user that this is a transition hook.\n result = hooks[i](location);\n }\n\n callback(result);\n });\n }\n\n /* istanbul ignore next: untestable with Karma */\n function beforeUnloadHook() {\n // Synchronously check to see if any route hooks want\n // to prevent the current window/tab from closing.\n if (state.routes) {\n var hooks = getRouteHooksForRoutes(state.routes);\n\n var message = void 0;\n for (var i = 0, len = hooks.length; typeof message !== 'string' && i < len; ++i) {\n // Passing no args indicates to the user that this is a\n // beforeunload hook. We don't know the next location.\n message = hooks[i]();\n }\n\n return message;\n }\n }\n\n var unlistenBefore = void 0,\n unlistenBeforeUnload = void 0;\n\n function removeListenBeforeHooksForRoute(route) {\n var routeID = getRouteID(route);\n if (!routeID) {\n return;\n }\n\n delete RouteHooks[routeID];\n\n if (!hasAnyProperties(RouteHooks)) {\n // teardown transition & beforeunload hooks\n if (unlistenBefore) {\n unlistenBefore();\n unlistenBefore = null;\n }\n\n if (unlistenBeforeUnload) {\n unlistenBeforeUnload();\n unlistenBeforeUnload = null;\n }\n }\n }\n\n /**\n * Registers the given hook function to run before leaving the given route.\n *\n * During a normal transition, the hook function receives the next location\n * as its only argument and can return either a prompt message (string) to show the user,\n * to make sure they want to leave the page; or `false`, to prevent the transition.\n * Any other return value will have no effect.\n *\n * During the beforeunload event (in browsers) the hook receives no arguments.\n * In this case it must return a prompt message to prevent the transition.\n *\n * Returns a function that may be used to unbind the listener.\n */\n function listenBeforeLeavingRoute(route, hook) {\n var thereWereNoRouteHooks = !hasAnyProperties(RouteHooks);\n var routeID = getRouteID(route, true);\n\n RouteHooks[routeID] = hook;\n\n if (thereWereNoRouteHooks) {\n // setup transition & beforeunload hooks\n unlistenBefore = history.listenBefore(transitionHook);\n\n if (history.listenBeforeUnload) unlistenBeforeUnload = history.listenBeforeUnload(beforeUnloadHook);\n }\n\n return function () {\n removeListenBeforeHooksForRoute(route);\n };\n }\n\n /**\n * This is the API for stateful environments. As the location\n * changes, we update state and call the listener. We can also\n * gracefully handle errors and redirects.\n */\n function listen(listener) {\n function historyListener(location) {\n if (state.location === location) {\n listener(null, state);\n } else {\n match(location, function (error, redirectLocation, nextState) {\n if (error) {\n listener(error);\n } else if (redirectLocation) {\n history.replace(redirectLocation);\n } else if (nextState) {\n listener(null, nextState);\n } else {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'Location \"%s\" did not match any routes', location.pathname + location.search + location.hash) : void 0;\n }\n });\n }\n }\n\n // TODO: Only use a single history listener. Otherwise we'll end up with\n // multiple concurrent calls to match.\n\n // Set up the history listener first in case the initial match redirects.\n var unsubscribe = history.listen(historyListener);\n\n if (state.location) {\n // Picking up on a matchContext.\n listener(null, state);\n } else {\n historyListener(history.getCurrentLocation());\n }\n\n return unsubscribe;\n }\n\n return {\n isActive: isActive,\n match: match,\n listenBeforeLeavingRoute: listenBeforeLeavingRoute,\n listen: listen\n };\n}\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\nexports.isPromise = isPromise;\nfunction isPromise(obj) {\n return obj && typeof obj.then === 'function';\n}","\"use strict\";\n\nexports.__esModule = true;\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.createRouterObject = createRouterObject;\nexports.assignRouterState = assignRouterState;\nfunction createRouterObject(history, transitionManager, state) {\n var router = _extends({}, history, {\n setRouteLeaveHook: transitionManager.listenBeforeLeavingRoute,\n isActive: transitionManager.isActive\n });\n\n return assignRouterState(router, state);\n}\n\nfunction assignRouterState(router, _ref) {\n var location = _ref.location,\n params = _ref.params,\n routes = _ref.routes;\n\n router.location = location;\n router.params = params;\n router.routes = routes;\n\n return router;\n}","'use strict';\n\nexports.__esModule = true;\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 _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _PropTypes = require('./PropTypes');\n\nvar _ContextUtils = require('./ContextUtils');\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 _React$PropTypes = _react2.default.PropTypes,\n bool = _React$PropTypes.bool,\n object = _React$PropTypes.object,\n string = _React$PropTypes.string,\n func = _React$PropTypes.func,\n oneOfType = _React$PropTypes.oneOfType;\n\n\nfunction isLeftClickEvent(event) {\n return event.button === 0;\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\n// TODO: De-duplicate against hasAnyProperties in createTransitionManager.\nfunction isEmptyObject(object) {\n for (var p in object) {\n if (Object.prototype.hasOwnProperty.call(object, p)) return false;\n }return true;\n}\n\nfunction resolveToLocation(to, router) {\n return typeof to === 'function' ? to(router.location) : to;\n}\n\n/**\n * A <Link> is used to create an <a> element that links to a route.\n * When that route is active, the link gets the value of its\n * activeClassName prop.\n *\n * For example, assuming you have the following route:\n *\n * <Route path=\"/posts/:postID\" component={Post} />\n *\n * You could use the following component to link to that route:\n *\n * <Link to={`/posts/${post.id}`} />\n *\n * Links may pass along location state and/or query string parameters\n * in the state/query props, respectively.\n *\n * <Link ... query={{ show: true }} state={{ the: 'state' }} />\n */\nvar Link = _react2.default.createClass({\n displayName: 'Link',\n\n\n mixins: [(0, _ContextUtils.ContextSubscriber)('router')],\n\n contextTypes: {\n router: _PropTypes.routerShape\n },\n\n propTypes: {\n to: oneOfType([string, object, func]),\n query: object,\n hash: string,\n state: object,\n activeStyle: object,\n activeClassName: string,\n onlyActiveOnIndex: bool.isRequired,\n onClick: func,\n target: string\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n onlyActiveOnIndex: false,\n style: {}\n };\n },\n handleClick: function handleClick(event) {\n if (this.props.onClick) this.props.onClick(event);\n\n if (event.defaultPrevented) return;\n\n var router = this.context.router;\n\n !router ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<Link>s rendered outside of a router context cannot navigate.') : (0, _invariant2.default)(false) : void 0;\n\n if (isModifiedEvent(event) || !isLeftClickEvent(event)) return;\n\n // If target prop is set (e.g. to \"_blank\"), let browser handle link.\n /* istanbul ignore if: untestable with Karma */\n if (this.props.target) return;\n\n event.preventDefault();\n\n router.push(resolveToLocation(this.props.to, router));\n },\n render: function render() {\n var _props = this.props,\n to = _props.to,\n activeClassName = _props.activeClassName,\n activeStyle = _props.activeStyle,\n onlyActiveOnIndex = _props.onlyActiveOnIndex,\n props = _objectWithoutProperties(_props, ['to', 'activeClassName', 'activeStyle', 'onlyActiveOnIndex']);\n\n // Ignore if rendered outside the context of router to simplify unit testing.\n\n\n var router = this.context.router;\n\n\n if (router) {\n // If user does not specify a `to` prop, return an empty anchor tag.\n if (to == null) {\n return _react2.default.createElement('a', props);\n }\n\n var toLocation = resolveToLocation(to, router);\n props.href = router.createHref(toLocation);\n\n if (activeClassName || activeStyle != null && !isEmptyObject(activeStyle)) {\n if (router.isActive(toLocation, onlyActiveOnIndex)) {\n if (activeClassName) {\n if (props.className) {\n props.className += ' ' + activeClassName;\n } else {\n props.className = activeClassName;\n }\n }\n\n if (activeStyle) props.style = _extends({}, props.style, activeStyle);\n }\n }\n }\n\n return _react2.default.createElement('a', _extends({}, props, { onClick: this.handleClick }));\n }\n});\n\nexports.default = Link;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _RouteUtils = require('./RouteUtils');\n\nvar _PatternUtils = require('./PatternUtils');\n\nvar _InternalPropTypes = require('./InternalPropTypes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _React$PropTypes = _react2.default.PropTypes,\n string = _React$PropTypes.string,\n object = _React$PropTypes.object;\n\n/**\n * A <Redirect> is used to declare another URL path a client should\n * be sent to when they request a given URL.\n *\n * Redirects are placed alongside routes in the route configuration\n * and are traversed in the same manner.\n */\n/* eslint-disable react/require-render-return */\n\nvar Redirect = _react2.default.createClass({\n displayName: 'Redirect',\n\n\n statics: {\n createRouteFromReactElement: function createRouteFromReactElement(element) {\n var route = (0, _RouteUtils.createRouteFromReactElement)(element);\n\n if (route.from) route.path = route.from;\n\n route.onEnter = function (nextState, replace) {\n var location = nextState.location,\n params = nextState.params;\n\n\n var pathname = void 0;\n if (route.to.charAt(0) === '/') {\n pathname = (0, _PatternUtils.formatPattern)(route.to, params);\n } else if (!route.to) {\n pathname = location.pathname;\n } else {\n var routeIndex = nextState.routes.indexOf(route);\n var parentPattern = Redirect.getRoutePattern(nextState.routes, routeIndex - 1);\n var pattern = parentPattern.replace(/\\/*$/, '/') + route.to;\n pathname = (0, _PatternUtils.formatPattern)(pattern, params);\n }\n\n replace({\n pathname: pathname,\n query: route.query || location.query,\n state: route.state || location.state\n });\n };\n\n return route;\n },\n getRoutePattern: function getRoutePattern(routes, routeIndex) {\n var parentPattern = '';\n\n for (var i = routeIndex; i >= 0; i--) {\n var route = routes[i];\n var pattern = route.path || '';\n\n parentPattern = pattern.replace(/\\/*$/, '/') + parentPattern;\n\n if (pattern.indexOf('/') === 0) break;\n }\n\n return '/' + parentPattern;\n }\n },\n\n propTypes: {\n path: string,\n from: string, // Alias for path\n to: string.isRequired,\n query: object,\n state: object,\n onEnter: _InternalPropTypes.falsy,\n children: _InternalPropTypes.falsy\n },\n\n /* istanbul ignore next: sanity check */\n render: function render() {\n !false ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<Redirect> elements are for router configuration only and should not be rendered') : (0, _invariant2.default)(false) : void 0;\n }\n});\n\nexports.default = Redirect;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\nexports.default = createMemoryHistory;\n\nvar _useQueries = require('history/lib/useQueries');\n\nvar _useQueries2 = _interopRequireDefault(_useQueries);\n\nvar _useBasename = require('history/lib/useBasename');\n\nvar _useBasename2 = _interopRequireDefault(_useBasename);\n\nvar _createMemoryHistory = require('history/lib/createMemoryHistory');\n\nvar _createMemoryHistory2 = _interopRequireDefault(_createMemoryHistory);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createMemoryHistory(options) {\n // signatures and type checking differ between `useQueries` and\n // `createMemoryHistory`, have to create `memoryHistory` first because\n // `useQueries` doesn't understand the signature\n var memoryHistory = (0, _createMemoryHistory2.default)(options);\n var createHistory = function createHistory() {\n return memoryHistory;\n };\n var history = (0, _useQueries2.default)((0, _useBasename2.default)(createHistory))(options);\n return history;\n}\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\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 _queryString = require('query-string');\n\nvar _runTransitionHook = require('./runTransitionHook');\n\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\nvar _LocationUtils = require('./LocationUtils');\n\nvar _PathUtils = require('./PathUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar defaultStringifyQuery = function defaultStringifyQuery(query) {\n return (0, _queryString.stringify)(query).replace(/%20/g, '+');\n};\n\nvar defaultParseQueryString = _queryString.parse;\n\n/**\n * Returns a new createHistory function that may be used to create\n * history objects that know how to handle URL queries.\n */\nvar useQueries = function useQueries(createHistory) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var history = createHistory(options);\n var stringifyQuery = options.stringifyQuery,\n parseQueryString = options.parseQueryString;\n\n\n if (typeof stringifyQuery !== 'function') stringifyQuery = defaultStringifyQuery;\n\n if (typeof parseQueryString !== 'function') parseQueryString = defaultParseQueryString;\n\n var decodeQuery = function decodeQuery(location) {\n if (!location) return location;\n\n if (location.query == null) location.query = parseQueryString(location.search.substring(1));\n\n return location;\n };\n\n var encodeQuery = function encodeQuery(location, query) {\n if (query == null) return location;\n\n var object = typeof location === 'string' ? (0, _PathUtils.parsePath)(location) : location;\n var queryString = stringifyQuery(query);\n var search = queryString ? '?' + queryString : '';\n\n return _extends({}, object, {\n search: search\n });\n };\n\n // Override all read methods with query-aware versions.\n var getCurrentLocation = function getCurrentLocation() {\n return decodeQuery(history.getCurrentLocation());\n };\n\n var listenBefore = function listenBefore(hook) {\n return history.listenBefore(function (location, callback) {\n return (0, _runTransitionHook2.default)(hook, decodeQuery(location), callback);\n });\n };\n\n var listen = function listen(listener) {\n return history.listen(function (location) {\n return listener(decodeQuery(location));\n });\n };\n\n // Override all write methods with query-aware versions.\n var push = function push(location) {\n return history.push(encodeQuery(location, location.query));\n };\n\n var replace = function replace(location) {\n return history.replace(encodeQuery(location, location.query));\n };\n\n var createPath = function createPath(location) {\n return history.createPath(encodeQuery(location, location.query));\n };\n\n var createHref = function createHref(location) {\n return history.createHref(encodeQuery(location, location.query));\n };\n\n var createLocation = function createLocation(location) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var newLocation = history.createLocation.apply(history, [encodeQuery(location, location.query)].concat(args));\n\n if (location.query) newLocation.query = (0, _LocationUtils.createQuery)(location.query);\n\n return decodeQuery(newLocation);\n };\n\n return _extends({}, history, {\n getCurrentLocation: getCurrentLocation,\n listenBefore: listenBefore,\n listen: listen,\n push: push,\n replace: replace,\n createPath: createPath,\n createHref: createHref,\n createLocation: createLocation\n });\n };\n};\n\nexports.default = useQueries;","'use strict';\n\nexports.__esModule = true;\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 _runTransitionHook = require('./runTransitionHook');\n\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\nvar _PathUtils = require('./PathUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar useBasename = function useBasename(createHistory) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var history = createHistory(options);\n var basename = options.basename;\n\n\n var addBasename = function addBasename(location) {\n if (!location) return location;\n\n if (basename && location.basename == null) {\n if (location.pathname.toLowerCase().indexOf(basename.toLowerCase()) === 0) {\n location.pathname = location.pathname.substring(basename.length);\n location.basename = basename;\n\n if (location.pathname === '') location.pathname = '/';\n } else {\n location.basename = '';\n }\n }\n\n return location;\n };\n\n var prependBasename = function prependBasename(location) {\n if (!basename) return location;\n\n var object = typeof location === 'string' ? (0, _PathUtils.parsePath)(location) : location;\n var pname = object.pathname;\n var normalizedBasename = basename.slice(-1) === '/' ? basename : basename + '/';\n var normalizedPathname = pname.charAt(0) === '/' ? pname.slice(1) : pname;\n var pathname = normalizedBasename + normalizedPathname;\n\n return _extends({}, object, {\n pathname: pathname\n });\n };\n\n // Override all read methods with basename-aware versions.\n var getCurrentLocation = function getCurrentLocation() {\n return addBasename(history.getCurrentLocation());\n };\n\n var listenBefore = function listenBefore(hook) {\n return history.listenBefore(function (location, callback) {\n return (0, _runTransitionHook2.default)(hook, addBasename(location), callback);\n });\n };\n\n var listen = function listen(listener) {\n return history.listen(function (location) {\n return listener(addBasename(location));\n });\n };\n\n // Override all write methods with basename-aware versions.\n var push = function push(location) {\n return history.push(prependBasename(location));\n };\n\n var replace = function replace(location) {\n return history.replace(prependBasename(location));\n };\n\n var createPath = function createPath(location) {\n return history.createPath(prependBasename(location));\n };\n\n var createHref = function createHref(location) {\n return history.createHref(prependBasename(location));\n };\n\n var createLocation = function createLocation(location) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return addBasename(history.createLocation.apply(history, [prependBasename(location)].concat(args)));\n };\n\n return _extends({}, history, {\n getCurrentLocation: getCurrentLocation,\n listenBefore: listenBefore,\n listen: listen,\n push: push,\n replace: replace,\n createPath: createPath,\n createHref: createHref,\n createLocation: createLocation\n });\n };\n};\n\nexports.default = useBasename;","'use strict';\n\nexports.__esModule = true;\nexports.default = useRouterHistory;\n\nvar _useQueries = require('history/lib/useQueries');\n\nvar _useQueries2 = _interopRequireDefault(_useQueries);\n\nvar _useBasename = require('history/lib/useBasename');\n\nvar _useBasename2 = _interopRequireDefault(_useBasename);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction useRouterHistory(createHistory) {\n return function (options) {\n var history = (0, _useQueries2.default)((0, _useBasename2.default)(createHistory))(options);\n return history;\n };\n}\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\nexports.readState = exports.saveState = undefined;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar QuotaExceededErrors = {\n QuotaExceededError: true,\n QUOTA_EXCEEDED_ERR: true\n};\n\nvar SecurityErrors = {\n SecurityError: true\n};\n\nvar KeyPrefix = '@@History/';\n\nvar createKey = function createKey(key) {\n return KeyPrefix + key;\n};\n\nvar saveState = exports.saveState = function saveState(key, state) {\n if (!window.sessionStorage) {\n // Session storage is not available or hidden.\n // sessionStorage is undefined in Internet Explorer when served via file protocol.\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, '[history] Unable to save state; sessionStorage is not available') : void 0;\n\n return;\n }\n\n try {\n if (state == null) {\n window.sessionStorage.removeItem(createKey(key));\n } else {\n window.sessionStorage.setItem(createKey(key), JSON.stringify(state));\n }\n } catch (error) {\n if (SecurityErrors[error.name]) {\n // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n // attempt to access window.sessionStorage.\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, '[history] Unable to save state; sessionStorage is not available due to security settings') : void 0;\n\n return;\n }\n\n if (QuotaExceededErrors[error.name] && window.sessionStorage.length === 0) {\n // Safari \"private mode\" throws QuotaExceededError.\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : void 0;\n\n return;\n }\n\n throw error;\n }\n};\n\nvar readState = exports.readState = function readState(key) {\n var json = void 0;\n try {\n json = window.sessionStorage.getItem(createKey(key));\n } catch (error) {\n if (SecurityErrors[error.name]) {\n // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n // attempt to access window.sessionStorage.\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, '[history] Unable to read state; sessionStorage is not available due to security settings') : void 0;\n\n return undefined;\n }\n }\n\n if (json) {\n try {\n return JSON.parse(json);\n } catch (error) {\n // Ignore invalid JSON.\n }\n }\n\n return undefined;\n};","'use strict';\n\nexports.__esModule = true;\n\nexports.default = function (createHistory) {\n var history = void 0;\n if (canUseDOM) history = (0, _useRouterHistory2.default)(createHistory)();\n return history;\n};\n\nvar _useRouterHistory = require('./useRouterHistory');\n\nvar _useRouterHistory2 = _interopRequireDefault(_useRouterHistory);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\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\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\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 FocusTrap = _react2.default.createClass({\n displayName: 'FocusTrap',\n\n\n propTypes: {\n onFocus: _react2.default.PropTypes.func,\n onBlur: _react2.default.PropTypes.func,\n component: _react2.default.PropTypes.any,\n children: _react2.default.PropTypes.node\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n component: 'div'\n };\n },\n render: function render() {\n var _props = this.props;\n var Component = _props.component;\n var children = _props.children;\n\n var props = _objectWithoutProperties(_props, ['component', 'children']);\n\n return _react2.default.createElement(\n Component,\n _extends({ tabIndex: '-1' }, props),\n children\n );\n }\n});\n\nexports.default = FocusTrap;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = HotKeyMapMixin;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _assign = require('lodash/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _isEqual = require('lodash/isEqual');\n\nvar _isEqual2 = _interopRequireDefault(_isEqual);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction HotKeyMapMixin() {\n var hotKeyMap = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n\n return {\n\n contextTypes: {\n hotKeyMap: _react2.default.PropTypes.object\n },\n\n childContextTypes: {\n hotKeyMap: _react2.default.PropTypes.object\n },\n\n getChildContext: function getChildContext() {\n return {\n hotKeyMap: this.__hotKeyMap__\n };\n },\n componentWillMount: function componentWillMount() {\n this.updateMap();\n },\n updateMap: function updateMap() {\n var newMap = this.buildMap();\n\n if (!(0, _isEqual2.default)(newMap, this.__hotKeyMap__)) {\n this.__hotKeyMap__ = newMap;\n return true;\n }\n\n return false;\n },\n buildMap: function buildMap() {\n var parentMap = this.context.hotKeyMap || {};\n var thisMap = this.props.keyMap || {};\n\n return (0, _assign2.default)({}, parentMap, hotKeyMap, thisMap);\n },\n getMap: function getMap() {\n return this.__hotKeyMap__;\n }\n };\n};","var defineProperty = require('./_defineProperty');\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 */\nfunction 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\nmodule.exports = baseAssignValue;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\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 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\nmodule.exports = isFunction;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\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 */\nfunction 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\nmodule.exports = toSource;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\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\nmodule.exports = isLength;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\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 */\nfunction 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\nmodule.exports = isIndex;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\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 * 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 */\nfunction 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\nmodule.exports = arrayLikeKeys;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\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 */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\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 */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var baseIsEqual = require('./_baseIsEqual');\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 */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\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 */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\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 */\nfunction 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// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\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 */\nfunction 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 // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\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\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\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 */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\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 */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\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\nmodule.exports = arrayPush;\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 */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\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 */\nfunction 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\nmodule.exports = arrayEach;\n","// Standard YAML's Core schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2804923\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, Core schema has no distinctions from JSON schema is JS-YAML.\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n include: [\n require('./json')\n ]\n});\n","// Standard YAML's JSON schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2803231\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, this schema is not such strict as defined in the YAML specification.\n// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc.\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n include: [\n require('./failsafe')\n ],\n implicit: [\n require('../type/null'),\n require('../type/bool'),\n require('../type/int'),\n require('../type/float')\n ]\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 arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\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 */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\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 */\nvar 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\nmodule.exports = getSymbolsIn;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = activeElement;\n\nvar _ownerDocument = _interopRequireDefault(require(\"./ownerDocument\"));\n\nfunction activeElement(doc) {\n if (doc === void 0) {\n doc = (0, _ownerDocument.default)();\n }\n\n try {\n return doc.activeElement;\n } catch (e) {\n /* ie throws if no active element */\n }\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = ownerDocument;\n\nfunction ownerDocument(node) {\n return node && node.ownerDocument || document;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar WidgetPicker =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(WidgetPicker, _React$Component);\n\n function WidgetPicker() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = WidgetPicker.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n open = _this$props.open,\n dropUp = _this$props.dropUp,\n className = _this$props.className,\n disabled = _this$props.disabled,\n readOnly = _this$props.readOnly,\n focused = _this$props.focused,\n props = _objectWithoutProperties(_this$props, [\"open\", \"dropUp\", \"className\", \"disabled\", \"readOnly\", \"focused\"]);\n\n var openClass = \"rw-open\" + (dropUp ? '-up' : '');\n return _react.default.createElement(\"div\", _extends({}, props, {\n className: (0, _classnames.default)(className, 'rw-widget-picker', 'rw-widget-container', open && openClass, disabled && 'rw-state-disabled', readOnly && 'rw-state-readonly', focused && 'rw-state-focus')\n }));\n };\n\n return WidgetPicker;\n}(_react.default.Component);\n\nWidgetPicker.propTypes = {\n tabIndex: _propTypes.default.node,\n focused: _propTypes.default.bool,\n disabled: _propTypes.default.bool,\n readOnly: _propTypes.default.bool,\n open: _propTypes.default.bool,\n dropUp: _propTypes.default.bool,\n picker: _propTypes.default.bool\n};\nvar _default = WidgetPicker;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _SlideDownTransition = _interopRequireDefault(require(\"./SlideDownTransition\"));\n\nvar _PropTypes = require(\"./util/PropTypes\");\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar StaticContainer =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(StaticContainer, _React$Component);\n\n function StaticContainer() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = StaticContainer.prototype;\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate(_ref) {\n var shouldUpdate = _ref.shouldUpdate;\n return !!shouldUpdate;\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n className = _this$props.className,\n children = _this$props.children,\n props = _objectWithoutProperties(_this$props, [\"className\", \"children\"]);\n\n delete props.shouldUpdate;\n return (0, _react.cloneElement)(children, _extends({}, props, {\n className: (0, _classnames.default)(className, children.props.className, 'rw-popup')\n }));\n };\n\n return StaticContainer;\n}(_react.default.Component);\n\nStaticContainer.propTypes = {\n shouldUpdate: function shouldUpdate() {}\n};\n\nvar Popup =\n/*#__PURE__*/\nfunction (_React$Component2) {\n _inheritsLoose(Popup, _React$Component2);\n\n function Popup() {\n return _React$Component2.apply(this, arguments) || this;\n }\n\n var _proto2 = Popup.prototype;\n\n _proto2.render = function render() {\n var _this$props2 = this.props,\n className = _this$props2.className,\n dropUp = _this$props2.dropUp,\n open = _this$props2.open,\n Transition = _this$props2.transition,\n props = _objectWithoutProperties(_this$props2, [\"className\", \"dropUp\", \"open\", \"transition\"]);\n\n return _react.default.createElement(Transition, _extends({}, props, {\n in: open,\n dropUp: dropUp,\n className: (0, _classnames.default)(className, 'rw-popup-container')\n }), _react.default.createElement(StaticContainer, {\n shouldUpdate: open\n }, _react.default.Children.only(this.props.children)));\n };\n\n return Popup;\n}(_react.default.Component);\n\nPopup.defaultProps = {\n open: false,\n transition: _SlideDownTransition.default\n};\nPopup.propTypes = {\n open: _propTypes.default.bool,\n dropUp: _propTypes.default.bool,\n onEntering: _propTypes.default.func,\n onEntered: _propTypes.default.func,\n transition: _PropTypes.elementType\n};\nvar _default = Popup;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _on = _interopRequireDefault(require(\"./on\"));\n\nexports.on = _on.default;\n\nvar _off = _interopRequireDefault(require(\"./off\"));\n\nexports.off = _off.default;\n\nvar _filter = _interopRequireDefault(require(\"./filter\"));\n\nexports.filter = _filter.default;\n\nvar _listen = _interopRequireDefault(require(\"./listen\"));\n\nexports.listen = _listen.default;\nvar _default = {\n on: _on.default,\n off: _off.default,\n filter: _filter.default,\n listen: _listen.default\n};\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inDOM = _interopRequireDefault(require(\"../util/inDOM\"));\n\nvar on = function on() {};\n\nif (_inDOM.default) {\n on = function () {\n if (document.addEventListener) return function (node, eventName, handler, capture) {\n return node.addEventListener(eventName, handler, capture || false);\n };else if (document.attachEvent) return function (node, eventName, handler) {\n return node.attachEvent('on' + eventName, function (e) {\n e = e || window.event;\n e.target = e.target || e.srcElement;\n e.currentTarget = node;\n handler.call(node, e);\n });\n };\n }();\n}\n\nvar _default = on;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inDOM = _interopRequireDefault(require(\"../util/inDOM\"));\n\nvar off = function off() {};\n\nif (_inDOM.default) {\n off = function () {\n if (document.addEventListener) return function (node, eventName, handler, capture) {\n return node.removeEventListener(eventName, handler, capture || false);\n };else if (document.attachEvent) return function (node, eventName, handler) {\n return node.detachEvent('on' + eventName, handler);\n };\n }();\n}\n\nvar _default = off;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inDOM = _interopRequireDefault(require(\"../util/inDOM\"));\n\nvar _default = function () {\n // HTML DOM and SVG DOM may have different support levels,\n // so we need to check on context instead of a document root element.\n return _inDOM.default ? function (context, node) {\n if (context.contains) {\n return context.contains(node);\n } else if (context.compareDocumentPosition) {\n return context === node || !!(context.compareDocumentPosition(node) & 16);\n } else {\n return fallback(context, node);\n }\n } : fallback;\n}();\n\nexports.default = _default;\n\nfunction fallback(context, node) {\n if (node) do {\n if (node === context) return true;\n } while (node = node.parentNode);\n return false;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = qsa;\n// Zepto.js\n// (c) 2010-2015 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\nvar simpleSelectorRE = /^[\\w-]*$/;\nvar toArray = Function.prototype.bind.call(Function.prototype.call, [].slice);\n\nfunction qsa(element, selector) {\n var maybeID = selector[0] === '#',\n maybeClass = selector[0] === '.',\n nameOnly = maybeID || maybeClass ? selector.slice(1) : selector,\n isSimple = simpleSelectorRE.test(nameOnly),\n found;\n\n if (isSimple) {\n if (maybeID) {\n element = element.getElementById ? element : document;\n return (found = element.getElementById(nameOnly)) ? [found] : [];\n }\n\n if (element.getElementsByClassName && maybeClass) return toArray(element.getElementsByClassName(nameOnly));\n return toArray(element.getElementsByTagName(selector));\n }\n\n return toArray(element.querySelectorAll(selector));\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = camelizeStyleName;\n\nvar _camelize = _interopRequireDefault(require(\"./camelize\"));\n\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/camelizeStyleName.js\n */\nvar msPattern = /^-ms-/;\n\nfunction camelizeStyleName(string) {\n return (0, _camelize.default)(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = offset;\n\nvar _contains = _interopRequireDefault(require(\"./contains\"));\n\nvar _isWindow = _interopRequireDefault(require(\"./isWindow\"));\n\nvar _ownerDocument = _interopRequireDefault(require(\"../ownerDocument\"));\n\nfunction offset(node) {\n var doc = (0, _ownerDocument.default)(node),\n win = (0, _isWindow.default)(doc),\n docElem = doc && doc.documentElement,\n box = {\n top: 0,\n left: 0,\n height: 0,\n width: 0\n };\n if (!doc) return; // Make sure it's not a disconnected DOM node\n\n if (!(0, _contains.default)(docElem, node)) return box;\n if (node.getBoundingClientRect !== undefined) box = node.getBoundingClientRect(); // IE8 getBoundingClientRect doesn't support width & height\n\n box = {\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0),\n width: (box.width == null ? node.offsetWidth : box.width) || 0,\n height: (box.height == null ? node.offsetHeight : box.height) || 0\n };\n return box;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _PropTypes = require(\"./utils/PropTypes\");\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar UNMOUNTED = 'unmounted';\nexports.UNMOUNTED = UNMOUNTED;\nvar EXITED = 'exited';\nexports.EXITED = EXITED;\nvar ENTERING = 'entering';\nexports.ENTERING = ENTERING;\nvar ENTERED = 'entered';\nexports.ENTERED = ENTERED;\nvar 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: 0 },\n * entered: { opacity: 1 },\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\nexports.EXITING = EXITING;\n\nvar Transition =\n/*#__PURE__*/\nfunction (_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.transitionGroup; // 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 var _proto = Transition.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: null // allows for nested Transitions\n\n };\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 _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 var node = _reactDom.default.findDOMNode(this);\n\n if (nextStatus === ENTERING) {\n this.performEnter(node, mounting);\n } else {\n this.performExit(node);\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(node, mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context.transitionGroup ? this.context.transitionGroup.isMounting : mounting;\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) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node);\n });\n return;\n }\n\n this.props.onEnter(node, appearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(node, appearing);\n\n _this2.onTransitionEnd(node, enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node, appearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit(node) {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts(); // no exit animation skip right to EXITED\n\n if (!exit) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n return;\n }\n\n this.props.onExit(node);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(node);\n\n _this3.onTransitionEnd(node, timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\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(node, timeout, handler) {\n this.setNextCallback(handler);\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 this.props.addEndListener(node, this.nextCallback);\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 childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\"]); // filter props for Transtition\n\n\n delete childProps.in;\n delete childProps.mountOnEnter;\n delete childProps.unmountOnExit;\n delete childProps.appear;\n delete childProps.enter;\n delete childProps.exit;\n delete childProps.timeout;\n delete childProps.addEndListener;\n delete childProps.onEnter;\n delete childProps.onEntering;\n delete childProps.onEntered;\n delete childProps.onExit;\n delete childProps.onExiting;\n delete childProps.onExited;\n\n if (typeof children === 'function') {\n return children(status, childProps);\n }\n\n var child = _react.default.Children.only(children);\n\n return _react.default.cloneElement(child, childProps);\n };\n\n return Transition;\n}(_react.default.Component);\n\nTransition.contextTypes = {\n transitionGroup: PropTypes.object\n};\nTransition.childContextTypes = {\n transitionGroup: function transitionGroup() {}\n};\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\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'`, `'unmounted'`), 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 * Normally a component is not transitioned if it is shown when the `<Transition>` component mounts.\n * If you want to transition on the first mount set `appear` to `true`, and the\n * component will transition in as soon as the `<Transition>` mounts.\n *\n * > Note: there are no specific \"appear\" states. `appear` only adds an additional `enter` transition.\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 = _PropTypes.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. **Note:** Timeouts are still used as a fallback if provided.\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 * @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 * @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 * @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 * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\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 * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func // Name the function so it is clearer in the documentation\n\n} : {};\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 = 0;\nTransition.EXITED = 1;\nTransition.ENTERING = 2;\nTransition.ENTERED = 3;\nTransition.EXITING = 4;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(Transition);\n\nexports.default = _default;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createChainableTypeChecker;\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n// Mostly taken from ReactPropTypes.\n\nfunction createChainableTypeChecker(validate) {\n function checkType(isRequired, props, propName, componentName, location, propFullName) {\n var componentNameSafe = componentName || '<<anonymous>>';\n var propFullNameSafe = propFullName || propName;\n\n if (props[propName] == null) {\n if (isRequired) {\n return new Error('Required ' + location + ' `' + propFullNameSafe + '` was not specified ' + ('in `' + componentNameSafe + '`.'));\n }\n\n return null;\n }\n\n for (var _len = arguments.length, args = Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {\n args[_key - 6] = arguments[_key];\n }\n\n return validate.apply(undefined, [props, propName, componentNameSafe, location, propFullNameSafe].concat(args));\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n}\nmodule.exports = exports['default'];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = createTimeoutManager;\n\nvar _spyOnComponent = _interopRequireDefault(require(\"spy-on-component\"));\n\nvar _mountManager = _interopRequireDefault(require(\"./mountManager\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createTimeoutManager(componentInstance) {\n var isMounted = (0, _mountManager.default)(componentInstance);\n var timers = Object.create(null);\n var manager;\n (0, _spyOnComponent.default)(componentInstance, {\n componentWillUnmount: function componentWillUnmount() {\n for (var k in timers) {\n clearTimeout(timers[k]);\n }\n\n timers = null;\n }\n });\n return manager = {\n clear: function clear(key) {\n clearTimeout(timers[key]);\n },\n set: function set(key, fn, ms) {\n if (!isMounted()) return;\n manager.clear(key);\n timers[key] = setTimeout(fn, ms);\n }\n };\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _Button = _interopRequireDefault(require(\"./Button\"));\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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar Select =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Select, _React$Component);\n\n function Select() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Select.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n className = _this$props.className,\n bordered = _this$props.bordered,\n children = _this$props.children,\n props = _objectWithoutProperties(_this$props, [\"className\", \"bordered\", \"children\"]);\n\n return _react.default.createElement(\"span\", {\n className: (0, _classnames.default)(className, 'rw-select', bordered && 'rw-select-bordered')\n }, children ? _react.default.Children.map(children, function (child) {\n return child && _react.default.cloneElement(child, {\n variant: 'select'\n });\n }) : _react.default.createElement(_Button.default, _extends({}, props, {\n variant: \"select\"\n })));\n };\n\n return Select;\n}(_react.default.Component);\n\nSelect.propTypes = {\n bordered: _propTypes.default.bool\n};\nvar _default = Select;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = require(\"react-dom\");\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\n\nvar Props = _interopRequireWildcard(require(\"./util/Props\"));\n\nvar _widgetHelpers = require(\"./util/widgetHelpers\");\n\nvar _reduceToListState = require(\"./util/reduceToListState\");\n\nvar _Listbox = _interopRequireDefault(require(\"./Listbox\"));\n\nvar _ListOption = _interopRequireDefault(require(\"./ListOption\"));\n\nvar _ListOptionGroup = _interopRequireDefault(require(\"./ListOptionGroup\"));\n\nvar _messages = require(\"./messages\");\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar EMPTY_DATA_STATE = {};\nvar propTypes = {\n data: _propTypes.default.array,\n dataState: _propTypes.default.shape({\n sortedKeys: _propTypes.default.array,\n groups: _propTypes.default.object,\n data: _propTypes.default.array,\n sequentialData: _propTypes.default.array\n }),\n valueAccessor: CustomPropTypes.accessor,\n textAccessor: CustomPropTypes.accessor,\n onSelect: _propTypes.default.func,\n onMove: _propTypes.default.func,\n activeId: _propTypes.default.string,\n itemComponent: CustomPropTypes.elementType,\n groupComponent: CustomPropTypes.elementType,\n optionComponent: CustomPropTypes.elementType,\n renderItem: _propTypes.default.func,\n renderGroup: _propTypes.default.func,\n focusedItem: _propTypes.default.any,\n selectedItem: _propTypes.default.any,\n searchTerm: _propTypes.default.string,\n isDisabled: _propTypes.default.func.isRequired,\n messages: _propTypes.default.shape({\n emptyList: _propTypes.default.func.isRequired\n })\n};\nvar defaultProps = {\n onSelect: function onSelect() {},\n data: [],\n dataState: EMPTY_DATA_STATE,\n optionComponent: _ListOption.default\n};\n\nvar List =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(List, _React$Component);\n\n function List() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.renderItem = function (_ref) {\n var item = _ref.item,\n rest = _objectWithoutProperties(_ref, [\"item\"]);\n\n var _this$props = _this.props,\n isDisabled = _this$props.isDisabled,\n renderItem = _this$props.renderItem,\n textAccessor = _this$props.textAccessor,\n valueAccessor = _this$props.valueAccessor;\n var Component = _this.props.itemComponent;\n\n if (renderItem) {\n return renderItem(_extends({\n item: item\n }, rest));\n } else if (Component) {\n return _react.default.createElement(Component, _extends({\n item: item,\n value: valueAccessor(item),\n text: textAccessor(item),\n disabled: isDisabled(item)\n }, rest));\n }\n\n return textAccessor(item);\n };\n\n _this.renderGroup = function (group) {\n var _this$props2 = _this.props,\n renderGroup = _this$props2.renderGroup,\n Component = _this$props2.groupComponent;\n\n if (renderGroup) {\n return renderGroup({\n group: group\n });\n } else if (Component) {\n return _react.default.createElement(Component, {\n item: group\n });\n }\n\n return group;\n };\n\n return _this;\n }\n\n var _proto = List.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.move();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n this.move();\n };\n\n _proto.mapItems = function mapItems(fn) {\n var _this$props3 = this.props,\n data = _this$props3.data,\n dataState = _this$props3.dataState;\n var sortedKeys = dataState.sortedKeys,\n groups = dataState.groups;\n if (!groups) return data.map(function (item, idx) {\n return fn(item, idx, false);\n });\n var idx = -1;\n return sortedKeys.reduce(function (items, key) {\n var group = groups[key];\n return items.concat(fn(key, idx, true), group.map(function (item) {\n return fn(item, ++idx, false);\n }));\n }, []);\n };\n\n _proto.move = function move() {\n var _this$props4 = this.props,\n focusedItem = _this$props4.focusedItem,\n onMove = _this$props4.onMove,\n data = _this$props4.data,\n dataState = _this$props4.dataState;\n var list = (0, _reactDom.findDOMNode)(this);\n var idx = renderedIndexOf(focusedItem, list, data, dataState);\n var selectedItem = list.children[idx];\n if (selectedItem) (0, _widgetHelpers.notify)(onMove, [selectedItem, list, focusedItem]);\n };\n\n _proto.renderOption = function renderOption(item, index) {\n var _this$props5 = this.props,\n activeId = _this$props5.activeId,\n focusedItem = _this$props5.focusedItem,\n selectedItem = _this$props5.selectedItem,\n onSelect = _this$props5.onSelect,\n isDisabled = _this$props5.isDisabled,\n searchTerm = _this$props5.searchTerm,\n Option = _this$props5.optionComponent;\n var isFocused = focusedItem === item;\n return _react.default.createElement(Option, {\n dataItem: item,\n key: 'item_' + index,\n index: index,\n activeId: activeId,\n focused: isFocused,\n onSelect: onSelect,\n disabled: isDisabled(item),\n selected: selectedItem === item\n }, this.renderItem({\n item: item,\n index: index,\n searchTerm: searchTerm\n }));\n };\n\n _proto.render = function render() {\n var _this2 = this;\n\n var _this$props6 = this.props,\n className = _this$props6.className,\n messages = _this$props6.messages;\n var elementProps = Props.pickElementProps(this);\n\n var _getMessages = (0, _messages.getMessages)(messages),\n emptyList = _getMessages.emptyList;\n\n return _react.default.createElement(_Listbox.default, _extends({}, elementProps, {\n className: className,\n emptyListMessage: emptyList(this.props)\n }), this.mapItems(function (item, idx, isHeader) {\n return isHeader ? _react.default.createElement(_ListOptionGroup.default, {\n key: 'group_' + item,\n group: item\n }, _this2.renderGroup(item)) : _this2.renderOption(item, idx);\n }));\n };\n\n return List;\n}(_react.default.Component);\n\nList.getDataState = _reduceToListState.defaultGetDataState;\n\nfunction renderedIndexOf(item, list, data, dataState) {\n var groups = dataState.groups,\n sortedKeys = dataState.sortedKeys;\n if (!groups) return data.indexOf(item);\n var runningIdx = -1;\n var idx = -1;\n sortedKeys.some(function (group) {\n var itemIdx = groups[group].indexOf(item);\n runningIdx++;\n\n if (itemIdx !== -1) {\n idx = runningIdx + itemIdx + 1;\n return true;\n }\n\n runningIdx += groups[group].length;\n });\n return idx;\n}\n\nList.propTypes = propTypes;\nList.defaultProps = defaultProps;\nvar _default = List;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.indexOf = indexOf;\nexports.filter = filter;\nexports.suggest = suggest;\nexports.propTypes = exports.presets = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./PropTypes\"));\n\nvar _dataHelpers = require(\"./dataHelpers\");\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\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 presets = {\n eq: function eq(a, b) {\n return a === b;\n },\n neq: function neq(a, b) {\n return a !== b;\n },\n gt: function gt(a, b) {\n return a > b;\n },\n gte: function gte(a, b) {\n return a >= b;\n },\n lt: function lt(a, b) {\n return a < b;\n },\n lte: function lte(a, b) {\n return a <= b;\n },\n contains: function contains(a, b) {\n return a.indexOf(b) !== -1;\n },\n startsWith: function startsWith(a, b) {\n return a.lastIndexOf(b, 0) === 0;\n },\n endsWith: function endsWith(a, b) {\n var pos = a.length - b.length;\n var lastIndex = a.indexOf(b, pos);\n return lastIndex !== -1 && lastIndex === pos;\n }\n};\nexports.presets = presets;\n\nfunction normalizeFilterType(type) {\n if (type === false) return null;\n if (type === true) return 'startsWith';\n return type || 'eq';\n}\n\nfunction normalizeFilter(_ref) {\n var filter = _ref.filter,\n _ref$caseSensitive = _ref.caseSensitive,\n caseSensitive = _ref$caseSensitive === void 0 ? false : _ref$caseSensitive,\n textField = _ref.textField;\n filter = normalizeFilterType(filter);\n\n if (typeof filter === 'function' || !filter) {\n return filter;\n }\n\n filter = presets[filter];\n return function (item, searchTerm) {\n var textValue = (0, _dataHelpers.dataText)(item, textField);\n\n if (!caseSensitive) {\n textValue = textValue.toLowerCase();\n searchTerm = searchTerm.toLowerCase();\n }\n\n return filter(textValue, searchTerm);\n };\n}\n\nfunction normalizeOptions(nextOptions) {\n var options = _extends({}, nextOptions);\n\n options.minLengh = options.minLengh || 0;\n options.filter = normalizeFilter(options);\n return options;\n}\n\nvar propTypes = {\n textField: CustomPropTypes.accessor,\n caseSensitive: _propTypes.default.bool,\n minLength: _propTypes.default.number,\n filter: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.bool, _propTypes.default.oneOf(Object.keys(presets))])\n};\nexports.propTypes = propTypes;\n\nfunction indexOf(data, _ref2) {\n var _ref2$searchTerm = _ref2.searchTerm,\n searchTerm = _ref2$searchTerm === void 0 ? '' : _ref2$searchTerm,\n options = _objectWithoutProperties(_ref2, [\"searchTerm\"]);\n\n var _normalizeOptions = normalizeOptions(options),\n filter = _normalizeOptions.filter,\n minLength = _normalizeOptions.minLength;\n\n if (!filter || !searchTerm || !searchTerm.trim() || searchTerm.length < minLength) return -1;\n\n for (var idx = 0; idx < data.length; idx++) {\n if (filter(data[idx], searchTerm, idx)) return idx;\n }\n\n return -1;\n}\n\nfunction filter(data, _ref3) {\n var _ref3$searchTerm = _ref3.searchTerm,\n searchTerm = _ref3$searchTerm === void 0 ? '' : _ref3$searchTerm,\n options = _objectWithoutProperties(_ref3, [\"searchTerm\"]);\n\n var _normalizeOptions2 = normalizeOptions(options),\n filter = _normalizeOptions2.filter,\n minLength = _normalizeOptions2.minLength;\n\n if (!filter || !searchTerm || !searchTerm.trim() || searchTerm.length < minLength) return data;\n return data.filter(function (item, idx) {\n return filter(item, searchTerm, idx);\n });\n}\n\nfunction suggest(data, _ref4) {\n var _ref4$searchTerm = _ref4.searchTerm,\n searchTerm = _ref4$searchTerm === void 0 ? '' : _ref4$searchTerm,\n options = _objectWithoutProperties(_ref4, [\"searchTerm\"]);\n\n var _normalizeOptions3 = normalizeOptions(options),\n filter = _normalizeOptions3.filter,\n minLength = _normalizeOptions3.minLength;\n\n if (!filter || !searchTerm || !searchTerm.trim() || searchTerm.length < minLength) return searchTerm;\n\n for (var idx = 0; idx < data.length; idx++) {\n if (filter(data[idx], searchTerm, idx)) return data[idx];\n }\n\n return searchTerm;\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _widgetHelpers = require(\"./util/widgetHelpers\");\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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar propTypes = {\n className: _propTypes.default.string,\n role: _propTypes.default.string,\n nodeRef: _propTypes.default.func,\n emptyListMessage: _propTypes.default.node\n};\n\nvar Listbox =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Listbox, _React$Component);\n\n function Listbox() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Listbox.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n className = _this$props.className,\n role = _this$props.role,\n children = _this$props.children,\n emptyListMessage = _this$props.emptyListMessage,\n nodeRef = _this$props.nodeRef,\n props = _objectWithoutProperties(_this$props, [\"className\", \"role\", \"children\", \"emptyListMessage\", \"nodeRef\"]);\n\n var id = (0, _widgetHelpers.instanceId)(this);\n return _react.default.createElement(\"ul\", _extends({\n id: id,\n tabIndex: \"-1\",\n ref: nodeRef,\n className: (0, _classnames.default)(className, 'rw-list'),\n role: role === undefined ? 'listbox' : role\n }, props), _react.default.Children.count(children) ? children : _react.default.createElement(\"li\", {\n className: \"rw-list-empty\"\n }, emptyListMessage));\n };\n\n return Listbox;\n}(_react.default.Component);\n\nListbox.propTypes = propTypes;\nvar _default = Listbox;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar Props = _interopRequireWildcard(require(\"./util/Props\"));\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar ListOption =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(ListOption, _React$Component);\n\n function ListOption() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.handleSelect = function (event) {\n var _this$props = _this.props,\n onSelect = _this$props.onSelect,\n disabled = _this$props.disabled,\n dataItem = _this$props.dataItem;\n if (onSelect && !disabled) onSelect(dataItem, event);\n };\n\n return _this;\n }\n\n var _proto = ListOption.prototype;\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n className = _this$props2.className,\n children = _this$props2.children,\n focused = _this$props2.focused,\n selected = _this$props2.selected,\n disabled = _this$props2.disabled,\n activeId = _this$props2.activeId;\n var Tag = this.props.component || 'li';\n var props = Props.omitOwn(this);\n var classes = {\n 'rw-state-focus': focused,\n 'rw-state-selected': selected,\n 'rw-state-disabled': disabled\n };\n var id = focused ? activeId : undefined;\n return _react.default.createElement(Tag, _extends({\n id: id,\n role: \"option\",\n tabIndex: !disabled ? '-1' : undefined,\n \"aria-selected\": !!selected,\n className: (0, _classnames.default)('rw-list-option', className, classes),\n onClick: this.handleSelect\n }, props), children);\n };\n\n return ListOption;\n}(_react.default.Component);\n\nListOption.propTypes = {\n activeId: _propTypes.default.string,\n dataItem: _propTypes.default.any,\n index: _propTypes.default.number,\n focused: _propTypes.default.bool,\n selected: _propTypes.default.bool,\n disabled: _propTypes.default.bool,\n onSelect: _propTypes.default.func,\n component: _propTypes.default.string\n};\nvar _default = ListOption;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = createScrollManager;\n\nvar _scrollTo = _interopRequireDefault(require(\"dom-helpers/util/scrollTo\"));\n\nvar _reactComponentManagers = require(\"react-component-managers\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createScrollManager(inst, getScrollParent) {\n if (getScrollParent === void 0) {\n getScrollParent = function getScrollParent(list) {\n return list.parentNode;\n };\n }\n\n var isMounted = (0, _reactComponentManagers.mountManager)(inst);\n var currentFocused, currentVisible, cancelScroll;\n\n function handleScroll(selected, list, nextFocused) {\n if (!isMounted()) return;\n var lastVisible = currentVisible;\n var lastItem = currentFocused;\n var shown, changed;\n currentVisible = !(!list.offsetWidth || !list.offsetHeight);\n currentFocused = nextFocused;\n changed = lastItem !== nextFocused;\n shown = currentVisible && !lastVisible;\n\n if (shown || currentVisible && changed) {\n if (this.props.onMove) this.props.onMove(selected, list, nextFocused);else {\n cancelScroll && cancelScroll();\n cancelScroll = (0, _scrollTo.default)(selected, false && getScrollParent(list));\n }\n }\n }\n\n return handleScroll.bind(inst);\n}\n\nmodule.exports = exports[\"default\"];","'use strict';\n\n/**\n * Copyright (c) 2015-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(function(f) {\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = f(require('react'));\n /* global define */\n } else if (typeof define === 'function' && define.amd) {\n define(['react'], f);\n } else {\n var g;\n if (typeof window !== 'undefined') {\n g = window;\n } else if (typeof global !== 'undefined') {\n g = global;\n } else if (typeof self !== 'undefined') {\n g = self;\n } else {\n g = this;\n }\n\n if (typeof g.React === 'undefined') {\n throw Error('React module should be required before ReactDOMFactories');\n }\n\n g.ReactDOMFactories = f(g.React);\n }\n})(function(React) {\n /**\n * Create a factory that creates HTML tag elements.\n */\n function createDOMFactory(type) {\n var factory = React.createElement.bind(null, type);\n // Expose the type on the factory and the prototype so that it can be\n // easily accessed on elements. E.g. `<Foo />.type === Foo`.\n // This should not be named `constructor` since this may not be the function\n // that created the element, and it may not even be a constructor.\n factory.type = type;\n return factory;\n };\n\n /**\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\n */\n var ReactDOMFactories = {\n a: createDOMFactory('a'),\n abbr: createDOMFactory('abbr'),\n address: createDOMFactory('address'),\n area: createDOMFactory('area'),\n article: createDOMFactory('article'),\n aside: createDOMFactory('aside'),\n audio: createDOMFactory('audio'),\n b: createDOMFactory('b'),\n base: createDOMFactory('base'),\n bdi: createDOMFactory('bdi'),\n bdo: createDOMFactory('bdo'),\n big: createDOMFactory('big'),\n blockquote: createDOMFactory('blockquote'),\n body: createDOMFactory('body'),\n br: createDOMFactory('br'),\n button: createDOMFactory('button'),\n canvas: createDOMFactory('canvas'),\n caption: createDOMFactory('caption'),\n cite: createDOMFactory('cite'),\n code: createDOMFactory('code'),\n col: createDOMFactory('col'),\n colgroup: createDOMFactory('colgroup'),\n data: createDOMFactory('data'),\n datalist: createDOMFactory('datalist'),\n dd: createDOMFactory('dd'),\n del: createDOMFactory('del'),\n details: createDOMFactory('details'),\n dfn: createDOMFactory('dfn'),\n dialog: createDOMFactory('dialog'),\n div: createDOMFactory('div'),\n dl: createDOMFactory('dl'),\n dt: createDOMFactory('dt'),\n em: createDOMFactory('em'),\n embed: createDOMFactory('embed'),\n fieldset: createDOMFactory('fieldset'),\n figcaption: createDOMFactory('figcaption'),\n figure: createDOMFactory('figure'),\n footer: createDOMFactory('footer'),\n form: createDOMFactory('form'),\n h1: createDOMFactory('h1'),\n h2: createDOMFactory('h2'),\n h3: createDOMFactory('h3'),\n h4: createDOMFactory('h4'),\n h5: createDOMFactory('h5'),\n h6: createDOMFactory('h6'),\n head: createDOMFactory('head'),\n header: createDOMFactory('header'),\n hgroup: createDOMFactory('hgroup'),\n hr: createDOMFactory('hr'),\n html: createDOMFactory('html'),\n i: createDOMFactory('i'),\n iframe: createDOMFactory('iframe'),\n img: createDOMFactory('img'),\n input: createDOMFactory('input'),\n ins: createDOMFactory('ins'),\n kbd: createDOMFactory('kbd'),\n keygen: createDOMFactory('keygen'),\n label: createDOMFactory('label'),\n legend: createDOMFactory('legend'),\n li: createDOMFactory('li'),\n link: createDOMFactory('link'),\n main: createDOMFactory('main'),\n map: createDOMFactory('map'),\n mark: createDOMFactory('mark'),\n menu: createDOMFactory('menu'),\n menuitem: createDOMFactory('menuitem'),\n meta: createDOMFactory('meta'),\n meter: createDOMFactory('meter'),\n nav: createDOMFactory('nav'),\n noscript: createDOMFactory('noscript'),\n object: createDOMFactory('object'),\n ol: createDOMFactory('ol'),\n optgroup: createDOMFactory('optgroup'),\n option: createDOMFactory('option'),\n output: createDOMFactory('output'),\n p: createDOMFactory('p'),\n param: createDOMFactory('param'),\n picture: createDOMFactory('picture'),\n pre: createDOMFactory('pre'),\n progress: createDOMFactory('progress'),\n q: createDOMFactory('q'),\n rp: createDOMFactory('rp'),\n rt: createDOMFactory('rt'),\n ruby: createDOMFactory('ruby'),\n s: createDOMFactory('s'),\n samp: createDOMFactory('samp'),\n script: createDOMFactory('script'),\n section: createDOMFactory('section'),\n select: createDOMFactory('select'),\n small: createDOMFactory('small'),\n source: createDOMFactory('source'),\n span: createDOMFactory('span'),\n strong: createDOMFactory('strong'),\n style: createDOMFactory('style'),\n sub: createDOMFactory('sub'),\n summary: createDOMFactory('summary'),\n sup: createDOMFactory('sup'),\n table: createDOMFactory('table'),\n tbody: createDOMFactory('tbody'),\n td: createDOMFactory('td'),\n textarea: createDOMFactory('textarea'),\n tfoot: createDOMFactory('tfoot'),\n th: createDOMFactory('th'),\n thead: createDOMFactory('thead'),\n time: createDOMFactory('time'),\n title: createDOMFactory('title'),\n tr: createDOMFactory('tr'),\n track: createDOMFactory('track'),\n u: createDOMFactory('u'),\n ul: createDOMFactory('ul'),\n var: createDOMFactory('var'),\n video: createDOMFactory('video'),\n wbr: createDOMFactory('wbr'),\n\n // SVG\n circle: createDOMFactory('circle'),\n clipPath: createDOMFactory('clipPath'),\n defs: createDOMFactory('defs'),\n ellipse: createDOMFactory('ellipse'),\n g: createDOMFactory('g'),\n image: createDOMFactory('image'),\n line: createDOMFactory('line'),\n linearGradient: createDOMFactory('linearGradient'),\n mask: createDOMFactory('mask'),\n path: createDOMFactory('path'),\n pattern: createDOMFactory('pattern'),\n polygon: createDOMFactory('polygon'),\n polyline: createDOMFactory('polyline'),\n radialGradient: createDOMFactory('radialGradient'),\n rect: createDOMFactory('rect'),\n stop: createDOMFactory('stop'),\n svg: createDOMFactory('svg'),\n text: createDOMFactory('text'),\n tspan: createDOMFactory('tspan'),\n };\n\n // due to wrapper and conditionals at the top, this will either become\n // `module.exports ReactDOMFactories` if that is available,\n // otherwise it will be defined via `define(['react'], ReactDOMFactories)`\n // if that is available,\n // otherwise it will be defined as global variable.\n return ReactDOMFactories;\n});\n\n","/*!\n * Adapted from jQuery UI core\n *\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/ui-core/\n */\n\nfunction focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n return (/input|select|textarea|button|object/.test(nodeName) ?\n !element.disabled :\n \"a\" === nodeName ?\n element.href || isTabIndexNotNaN :\n isTabIndexNotNaN) && visible(element);\n}\n\nfunction hidden(el) {\n return (el.offsetWidth <= 0 && el.offsetHeight <= 0) ||\n el.style.display === 'none';\n}\n\nfunction visible(element) {\n while (element) {\n if (element === document.body) break;\n if (hidden(element)) return false;\n element = element.parentNode;\n }\n return true;\n}\n\nfunction tabbable(element) {\n var tabIndex = element.getAttribute('tabindex');\n if (tabIndex === null) tabIndex = undefined;\n var isTabIndexNaN = isNaN(tabIndex);\n return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN);\n}\n\nfunction findTabbableDescendants(element) {\n return [].slice.call(element.querySelectorAll('*'), 0).filter(function(el) {\n return tabbable(el);\n });\n}\n\nmodule.exports = findTabbableDescendants;\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/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\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 */\nfunction 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 * 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 */\nfunction 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 * 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 */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\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 propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max;\n\n/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */\nvar nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf');\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 */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\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 */\nfunction 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 object[key] = value;\n }\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 */\nfunction 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 `_.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 */\nfunction baseRest(func, start) {\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] = array;\n return apply(func, this, otherArgs);\n };\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 */\nfunction copyObject(source, props, object, customizer) {\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 assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\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 */\nfunction 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 * 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 */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || 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 */\nfunction 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 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 */\nfunction 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 * 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 */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== 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 */\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\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 */\nvar assign = createAssigner(function(object, source) {\n if (nonEnumShadows || 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 * 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 */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = assign;\n","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../meta\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"markdown\", function(cmCfg, modeCfg) {\n\n var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n var htmlModeMissing = htmlMode.name == \"null\"\n\n function getMode(name) {\n if (CodeMirror.findModeByName) {\n var found = CodeMirror.findModeByName(name);\n if (found) name = found.mime || found.mimes[0];\n }\n var mode = CodeMirror.getMode(cmCfg, name);\n return mode.name == \"null\" ? null : mode;\n }\n\n // Should characters that affect highlighting be highlighted separate?\n // Does not include characters that will be output (such as `1.` and `-` for lists)\n if (modeCfg.highlightFormatting === undefined)\n modeCfg.highlightFormatting = false;\n\n // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n // Excess `>` will emit `error` token.\n if (modeCfg.maxBlockquoteDepth === undefined)\n modeCfg.maxBlockquoteDepth = 0;\n\n // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;\n\n // Turn on strikethrough syntax\n if (modeCfg.strikethrough === undefined)\n modeCfg.strikethrough = false;\n\n if (modeCfg.emoji === undefined)\n modeCfg.emoji = false;\n\n if (modeCfg.fencedCodeBlockHighlighting === undefined)\n modeCfg.fencedCodeBlockHighlighting = true;\n\n if (modeCfg.xml === undefined)\n modeCfg.xml = true;\n\n // Allow token types to be overridden by user-provided token types.\n if (modeCfg.tokenTypeOverrides === undefined)\n modeCfg.tokenTypeOverrides = {};\n\n var tokenTypes = {\n header: \"header\",\n code: \"comment\",\n quote: \"quote\",\n list1: \"variable-2\",\n list2: \"variable-3\",\n list3: \"keyword\",\n hr: \"hr\",\n image: \"image\",\n imageAltText: \"image-alt-text\",\n imageMarker: \"image-marker\",\n formatting: \"formatting\",\n linkInline: \"link\",\n linkEmail: \"link\",\n linkText: \"link\",\n linkHref: \"string\",\n em: \"em\",\n strong: \"strong\",\n strikethrough: \"strikethrough\",\n emoji: \"builtin\"\n };\n\n for (var tokenType in tokenTypes) {\n if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n }\n }\n\n var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/\n , listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/\n , taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n , atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/\n , setextHeaderRE = /^ *(?:\\={1,}|-{1,})\\s*$/\n , textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/\n , fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w+#-]*)[^\\n`]*$/\n , linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n , punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\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\\u0AF0\\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-\\u2E42\\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]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/\n , expandedTab = \" \" // CommonMark specifies tab as 4 spaces\n\n function switchInline(stream, state, f) {\n state.f = state.inline = f;\n return f(stream, state);\n }\n\n function switchBlock(stream, state, f) {\n state.f = state.block = f;\n return f(stream, state);\n }\n\n function lineIsEmpty(line) {\n return !line || !/\\S/.test(line.string)\n }\n\n // Blocks\n\n function blankLine(state) {\n // Reset linkTitle state\n state.linkTitle = false;\n state.linkHref = false;\n state.linkText = false;\n // Reset EM state\n state.em = false;\n // Reset STRONG state\n state.strong = false;\n // Reset strikethrough state\n state.strikethrough = false;\n // Reset state.quote\n state.quote = 0;\n // Reset state.indentedCode\n state.indentedCode = false;\n if (state.f == htmlBlock) {\n var exit = htmlModeMissing\n if (!exit) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n exit = inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n (!inner.state.context && inner.state.tokenize.isInText)\n }\n if (exit) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n // Mark this line as blank\n state.prevLine = state.thisLine\n state.thisLine = {stream: null}\n return null;\n }\n\n function blockNormal(stream, state) {\n var firstTokenOnLine = stream.column() === state.indentation;\n var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n var prevLineIsIndentedCode = state.indentedCode;\n var prevLineIsHr = state.prevLine.hr;\n var prevLineIsList = state.list !== false;\n var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n\n state.indentedCode = false;\n\n var lineIndentation = state.indentation;\n // compute once per line (on first token)\n if (state.indentationDiff === null) {\n state.indentationDiff = state.indentation;\n if (prevLineIsList) {\n // Reset inline styles which shouldn't propagate aross list items\n state.em = false;\n state.strong = false;\n state.code = false;\n state.strikethrough = false;\n\n state.list = null;\n // While this list item's marker's indentation is less than the deepest\n // list item's content's indentation,pop the deepest list item\n // indentation off the stack, and update block indentation state\n while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n state.listStack.pop();\n if (state.listStack.length) {\n state.indentation = state.listStack[state.listStack.length - 1];\n // less than the first list's indent -> the line is no longer a list\n } else {\n state.list = false;\n }\n }\n if (state.list !== false) {\n state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1]\n }\n }\n }\n\n // not comprehensive (currently only for setext detection purposes)\n var allowsInlineContinuation = (\n !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header &&\n (!prevLineIsList || !prevLineIsIndentedCode) &&\n !state.prevLine.fencedCodeEnd\n );\n\n var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) &&\n state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n\n var match = null;\n if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd ||\n state.prevLine.header || prevLineLineIsEmpty)) {\n stream.skipToEnd();\n state.indentedCode = true;\n return tokenTypes.code;\n } else if (stream.eatSpace()) {\n return null;\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n state.quote = 0;\n state.header = match[1].length;\n state.thisLine.header = true;\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n state.f = state.inline;\n return getType(state);\n } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n stream.eatSpace();\n return getType(state);\n } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n var listType = match[1] ? \"ol\" : \"ul\";\n\n state.indentation = lineIndentation + stream.current().length;\n state.list = true;\n state.quote = 0;\n\n // Add this list item's content's indentation to the stack\n state.listStack.push(state.indentation);\n\n if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n state.taskList = true;\n }\n state.f = state.inline;\n if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n return getType(state);\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n state.quote = 0;\n state.fencedEndRE = new RegExp(match[1] + \"+ *$\");\n // try switching mode\n state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2]);\n if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n state.f = state.block = local;\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n state.code = -1\n return getType(state);\n // SETEXT has lowest block-scope precedence after HR, so check it after\n // the others (code, blockquote, list...)\n } else if (\n // if setext set, indicates line after ---/===\n state.setext || (\n // line before ---/===\n (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false &&\n !state.code && !isHr && !linkDefRE.test(stream.string) &&\n (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))\n )\n ) {\n if ( !state.setext ) {\n state.header = match[0].charAt(0) == '=' ? 1 : 2;\n state.setext = state.header;\n } else {\n state.header = state.setext;\n // has no effect on type so we can reset it now\n state.setext = 0;\n stream.skipToEnd();\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n }\n state.thisLine.header = true;\n state.f = state.inline;\n return getType(state);\n } else if (isHr) {\n stream.skipToEnd();\n state.hr = true;\n state.thisLine.hr = true;\n return tokenTypes.hr;\n } else if (stream.peek() === '[') {\n return switchInline(stream, state, footnoteLink);\n }\n\n return switchInline(stream, state, state.inline);\n }\n\n function htmlBlock(stream, state) {\n var style = htmlMode.token(stream, state.htmlState);\n if (!htmlModeMissing) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n if ((inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n (!inner.state.context && inner.state.tokenize.isInText)) ||\n (state.md_inside && stream.current().indexOf(\">\") > -1)) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n return style;\n }\n\n function local(stream, state) {\n var currListInd = state.listStack[state.listStack.length - 1] || 0;\n var hasExitedList = state.indentation < currListInd;\n var maxFencedEndInd = currListInd + 3;\n if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n var returnType;\n if (!hasExitedList) returnType = getType(state)\n state.localMode = state.localState = null;\n state.block = blockNormal;\n state.f = inlineNormal;\n state.fencedEndRE = null;\n state.code = 0\n state.thisLine.fencedCodeEnd = true;\n if (hasExitedList) return switchBlock(stream, state, state.block);\n return returnType;\n } else if (state.localMode) {\n return state.localMode.token(stream, state.localState);\n } else {\n stream.skipToEnd();\n return tokenTypes.code;\n }\n }\n\n // Inline\n function getType(state) {\n var styles = [];\n\n if (state.formatting) {\n styles.push(tokenTypes.formatting);\n\n if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n\n for (var i = 0; i < state.formatting.length; i++) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n\n if (state.formatting[i] === \"header\") {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n }\n\n // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n // Add `error` instead if the maximum blockquote nesting depth is passed\n if (state.formatting[i] === \"quote\") {\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n } else {\n styles.push(\"error\");\n }\n }\n }\n }\n\n if (state.taskOpen) {\n styles.push(\"meta\");\n return styles.length ? styles.join(' ') : null;\n }\n if (state.taskClosed) {\n styles.push(\"property\");\n return styles.length ? styles.join(' ') : null;\n }\n\n if (state.linkHref) {\n styles.push(tokenTypes.linkHref, \"url\");\n } else { // Only apply inline styles to non-url text\n if (state.strong) { styles.push(tokenTypes.strong); }\n if (state.em) { styles.push(tokenTypes.em); }\n if (state.strikethrough) { styles.push(tokenTypes.strikethrough); }\n if (state.emoji) { styles.push(tokenTypes.emoji); }\n if (state.linkText) { styles.push(tokenTypes.linkText); }\n if (state.code) { styles.push(tokenTypes.code); }\n if (state.image) { styles.push(tokenTypes.image); }\n if (state.imageAltText) { styles.push(tokenTypes.imageAltText, \"link\"); }\n if (state.imageMarker) { styles.push(tokenTypes.imageMarker); }\n }\n\n if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header); }\n\n if (state.quote) {\n styles.push(tokenTypes.quote);\n\n // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.quote + \"-\" + state.quote);\n } else {\n styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n }\n }\n\n if (state.list !== false) {\n var listMod = (state.listStack.length - 1) % 3;\n if (!listMod) {\n styles.push(tokenTypes.list1);\n } else if (listMod === 1) {\n styles.push(tokenTypes.list2);\n } else {\n styles.push(tokenTypes.list3);\n }\n }\n\n if (state.trailingSpaceNewLine) {\n styles.push(\"trailing-space-new-line\");\n } else if (state.trailingSpace) {\n styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n }\n\n return styles.length ? styles.join(' ') : null;\n }\n\n function handleText(stream, state) {\n if (stream.match(textRE, true)) {\n return getType(state);\n }\n return undefined;\n }\n\n function inlineNormal(stream, state) {\n var style = state.text(stream, state);\n if (typeof style !== 'undefined')\n return style;\n\n if (state.list) { // List marker (*, +, -, 1., etc)\n state.list = null;\n return getType(state);\n }\n\n if (state.taskList) {\n var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n if (taskOpen) state.taskOpen = true;\n else state.taskClosed = true;\n if (modeCfg.highlightFormatting) state.formatting = \"task\";\n state.taskList = false;\n return getType(state);\n }\n\n state.taskOpen = false;\n state.taskClosed = false;\n\n if (state.header && stream.match(/^#+$/, true)) {\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n return getType(state);\n }\n\n var ch = stream.next();\n\n // Matches link titles present on next line\n if (state.linkTitle) {\n state.linkTitle = false;\n var matchCh = ch;\n if (ch === '(') {\n matchCh = ')';\n }\n matchCh = (matchCh+'').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n if (stream.match(new RegExp(regex), true)) {\n return tokenTypes.linkHref;\n }\n }\n\n // If this block is changed, it may need to be updated in GFM mode\n if (ch === '`') {\n var previousFormatting = state.formatting;\n if (modeCfg.highlightFormatting) state.formatting = \"code\";\n stream.eatWhile('`');\n var count = stream.current().length\n if (state.code == 0 && (!state.quote || count == 1)) {\n state.code = count\n return getType(state)\n } else if (count == state.code) { // Must be exact\n var t = getType(state)\n state.code = 0\n return t\n } else {\n state.formatting = previousFormatting\n return getType(state)\n }\n } else if (state.code) {\n return getType(state);\n }\n\n if (ch === '\\\\') {\n stream.next();\n if (modeCfg.highlightFormatting) {\n var type = getType(state);\n var formattingEscape = tokenTypes.formatting + \"-escape\";\n return type ? type + \" \" + formattingEscape : formattingEscape;\n }\n }\n\n if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n state.imageMarker = true;\n state.image = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n state.imageMarker = false;\n state.imageAltText = true\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === ']' && state.imageAltText) {\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n var type = getType(state);\n state.imageAltText = false;\n state.image = false;\n state.inline = state.f = linkHref;\n return type;\n }\n\n if (ch === '[' && !state.image) {\n if (state.linkText && stream.match(/^.*?\\]/)) return getType(state)\n state.linkText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n return getType(state);\n }\n\n if (ch === ']' && state.linkText) {\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n state.linkText = false;\n state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal\n return type;\n }\n\n if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n\n if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkEmail;\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n var end = stream.string.indexOf(\">\", stream.pos);\n if (end != -1) {\n var atts = stream.string.substring(stream.start, end);\n if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n }\n stream.backUp(1);\n state.htmlState = CodeMirror.startState(htmlMode);\n return switchBlock(stream, state, htmlBlock);\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n state.md_inside = false;\n return \"tag\";\n } else if (ch === \"*\" || ch === \"_\") {\n var len = 1, before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2)\n while (len < 3 && stream.eat(ch)) len++\n var after = stream.peek() || \" \"\n // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before))\n var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after))\n var setEm = null, setStrong = null\n if (len % 2) { // Em\n if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n setEm = true\n else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n setEm = false\n }\n if (len > 1) { // Strong\n if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n setStrong = true\n else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n setStrong = false\n }\n if (setStrong != null || setEm != null) {\n if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\"\n if (setEm === true) state.em = ch\n if (setStrong === true) state.strong = ch\n var t = getType(state)\n if (setEm === false) state.em = false\n if (setStrong === false) state.strong = false\n return t\n }\n } else if (ch === ' ') {\n if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces\n if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n return getType(state);\n } else { // Not surrounded by spaces, back up pointer\n stream.backUp(1);\n }\n }\n }\n\n if (modeCfg.strikethrough) {\n if (ch === '~' && stream.eatWhile(ch)) {\n if (state.strikethrough) {// Remove strikethrough\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n var t = getType(state);\n state.strikethrough = false;\n return t;\n } else if (stream.match(/^[^\\s]/, false)) {// Add strikethrough\n state.strikethrough = true;\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n return getType(state);\n }\n } else if (ch === ' ') {\n if (stream.match(/^~~/, true)) { // Probably surrounded by space\n if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n return getType(state);\n } else { // Not surrounded by spaces, back up pointer\n stream.backUp(2);\n }\n }\n }\n }\n\n if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n state.emoji = true;\n if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n var retType = getType(state);\n state.emoji = false;\n return retType;\n }\n\n if (ch === ' ') {\n if (stream.match(/^ +$/, false)) {\n state.trailingSpace++;\n } else if (state.trailingSpace) {\n state.trailingSpaceNewLine = true;\n }\n }\n\n return getType(state);\n }\n\n function linkInline(stream, state) {\n var ch = stream.next();\n\n if (ch === \">\") {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n\n stream.match(/^[^>]+/, true);\n\n return tokenTypes.linkInline;\n }\n\n function linkHref(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if(stream.eatSpace()){\n return null;\n }\n var ch = stream.next();\n if (ch === '(' || ch === '[') {\n state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n state.linkHref = true;\n return getType(state);\n }\n return 'error';\n }\n\n var linkRE = {\n \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n }\n\n function getLinkHrefInside(endChar) {\n return function(stream, state) {\n var ch = stream.next();\n\n if (ch === endChar) {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n var returnState = getType(state);\n state.linkHref = false;\n return returnState;\n }\n\n stream.match(linkRE[endChar])\n state.linkHref = true;\n return getType(state);\n };\n }\n\n function footnoteLink(stream, state) {\n if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n state.f = footnoteLinkInside;\n stream.next(); // Consume [\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n state.linkText = true;\n return getType(state);\n }\n return switchInline(stream, state, inlineNormal);\n }\n\n function footnoteLinkInside(stream, state) {\n if (stream.match(/^\\]:/, true)) {\n state.f = state.inline = footnoteUrl;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var returnType = getType(state);\n state.linkText = false;\n return returnType;\n }\n\n stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n\n return tokenTypes.linkText;\n }\n\n function footnoteUrl(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if(stream.eatSpace()){\n return null;\n }\n // Match URL\n stream.match(/^[^\\s]+/, true);\n // Check for link title\n if (stream.peek() === undefined) { // End of line, set flag to check next line\n state.linkTitle = true;\n } else { // More content on line, check if link title\n stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\\\\\|\\\\.)+\"|'(?:[^'\\\\]|\\\\\\\\|\\\\.)+'|\\((?:[^)\\\\]|\\\\\\\\|\\\\.)+\\)))?/, true);\n }\n state.f = state.inline = inlineNormal;\n return tokenTypes.linkHref + \" url\";\n }\n\n var mode = {\n startState: function() {\n return {\n f: blockNormal,\n\n prevLine: {stream: null},\n thisLine: {stream: null},\n\n block: blockNormal,\n htmlState: null,\n indentation: 0,\n\n inline: inlineNormal,\n text: handleText,\n\n formatting: false,\n linkText: false,\n linkHref: false,\n linkTitle: false,\n code: 0,\n em: false,\n strong: false,\n header: 0,\n setext: 0,\n hr: false,\n taskList: false,\n list: false,\n listStack: [],\n quote: 0,\n trailingSpace: 0,\n trailingSpaceNewLine: false,\n strikethrough: false,\n emoji: false,\n fencedEndRE: null\n };\n },\n\n copyState: function(s) {\n return {\n f: s.f,\n\n prevLine: s.prevLine,\n thisLine: s.thisLine,\n\n block: s.block,\n htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n indentation: s.indentation,\n\n localMode: s.localMode,\n localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n\n inline: s.inline,\n text: s.text,\n formatting: false,\n linkText: s.linkText,\n linkTitle: s.linkTitle,\n linkHref: s.linkHref,\n code: s.code,\n em: s.em,\n strong: s.strong,\n strikethrough: s.strikethrough,\n emoji: s.emoji,\n header: s.header,\n setext: s.setext,\n hr: s.hr,\n taskList: s.taskList,\n list: s.list,\n listStack: s.listStack.slice(0),\n quote: s.quote,\n indentedCode: s.indentedCode,\n trailingSpace: s.trailingSpace,\n trailingSpaceNewLine: s.trailingSpaceNewLine,\n md_inside: s.md_inside,\n fencedEndRE: s.fencedEndRE\n };\n },\n\n token: function(stream, state) {\n\n // Reset state.formatting\n state.formatting = false;\n\n if (stream != state.thisLine.stream) {\n state.header = 0;\n state.hr = false;\n\n if (stream.match(/^\\s*$/, true)) {\n blankLine(state);\n return null;\n }\n\n state.prevLine = state.thisLine\n state.thisLine = {stream: stream}\n\n // Reset state.taskList\n state.taskList = false;\n\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n\n if (!state.localState) {\n state.f = state.block;\n if (state.f != htmlBlock) {\n var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n state.indentation = indentation;\n state.indentationDiff = null;\n if (indentation > 0) return null;\n }\n }\n }\n return state.f(stream, state);\n },\n\n innerMode: function(state) {\n if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode};\n if (state.localState) return {state: state.localState, mode: state.localMode};\n return {state: state, mode: mode};\n },\n\n indent: function(state, textAfter, line) {\n if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line)\n if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line)\n return CodeMirror.Pass\n },\n\n blankLine: blankLine,\n\n getType: getType,\n\n blockCommentStart: \"<!--\",\n blockCommentEnd: \"-->\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n fold: \"markdown\"\n };\n return mode;\n}, \"xml\");\n\nCodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n\nCodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n 'track': true, 'wbr': true, 'menuitem': true},\n implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n 'th': true, 'tr': true},\n contextGrabbers: {\n 'dd': {'dd': true, 'dt': true},\n 'dt': {'dd': true, 'dt': true},\n 'li': {'li': true},\n 'option': {'option': true, 'optgroup': true},\n 'optgroup': {'optgroup': true},\n 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n 'rp': {'rp': true, 'rt': true},\n 'rt': {'rp': true, 'rt': true},\n 'tbody': {'tbody': true, 'tfoot': true},\n 'td': {'td': true, 'th': true},\n 'tfoot': {'tbody': true},\n 'th': {'td': true, 'th': true},\n 'thead': {'tbody': true, 'tfoot': true},\n 'tr': {'tr': true}\n },\n doNotIndent: {\"pre\": true},\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n}\n\nvar xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n var indentUnit = editorConf.indentUnit\n var config = {}\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n for (var prop in defaults) config[prop] = defaults[prop]\n for (var prop in config_) config[prop] = config_[prop]\n\n // Return variables for tokenizers\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function(stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n }\n }\n\n function doctype(depth) {\n return function(stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName;\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||\n !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n return;\n }\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName &&\n config.implicitlyClosed.hasOwnProperty(state.context.tagName))\n popContext(state);\n if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName, tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" ||\n config.autoSelfClosers.hasOwnProperty(tagName)) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function(baseIndent) {\n var state = {tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null, tagStart: null,\n context: null}\n if (baseIndent != null) state.baseIndent = baseIndent\n return state\n },\n\n token: function(stream, state) {\n if (!state.tagName && stream.sol())\n state.indented = stream.indentation();\n\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle)\n style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n\n indent: function(state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented)\n return state.stringStartCol + 1;\n else\n return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText)\n return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false)\n return state.tagStart + state.tagName.length + 2;\n else\n return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n if (tagAfter && tagAfter[1]) { // Closing tag spotted\n while (context) {\n if (context.tagName == tagAfter[2]) {\n context = context.prev;\n break;\n } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n context = context.prev;\n } else {\n break;\n }\n }\n } else if (tagAfter) { // Opening tag spotted\n while (context) {\n var grabbers = config.contextGrabbers[context.tagName];\n if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n context = context.prev;\n else\n break;\n }\n }\n while (context && context.prev && !context.startOfLine)\n context = context.prev;\n if (context) return context.indent + indentUnit;\n else return state.baseIndent || 0;\n },\n\n electricInput: /<\\/[\\s\\w:]+>$/,\n blockCommentStart: \"<!--\",\n blockCommentEnd: \"-->\",\n\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n\n skipAttribute: function(state) {\n if (state.state == attrValueState)\n state.state = attrState\n },\n\n xmlCurrentTag: function(state) {\n return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n },\n\n xmlCurrentContext: function(state) {\n var context = []\n for (var cx = state.context; cx; cx = cx.prev)\n if (cx.tagName) context.push(cx.tagName)\n return context.reverse()\n }\n };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.overlayMode = function(base, overlay, combine) {\n return {\n startState: function() {\n return {\n base: CodeMirror.startState(base),\n overlay: CodeMirror.startState(overlay),\n basePos: 0, baseCur: null,\n overlayPos: 0, overlayCur: null,\n streamSeen: null\n };\n },\n copyState: function(state) {\n return {\n base: CodeMirror.copyState(base, state.base),\n overlay: CodeMirror.copyState(overlay, state.overlay),\n basePos: state.basePos, baseCur: null,\n overlayPos: state.overlayPos, overlayCur: null\n };\n },\n\n token: function(stream, state) {\n if (stream != state.streamSeen ||\n Math.min(state.basePos, state.overlayPos) < stream.start) {\n state.streamSeen = stream;\n state.basePos = state.overlayPos = stream.start;\n }\n\n if (stream.start == state.basePos) {\n state.baseCur = base.token(stream, state.base);\n state.basePos = stream.pos;\n }\n if (stream.start == state.overlayPos) {\n stream.pos = stream.start;\n state.overlayCur = overlay.token(stream, state.overlay);\n state.overlayPos = stream.pos;\n }\n stream.pos = Math.min(state.basePos, state.overlayPos);\n\n // state.overlay.combineTokens always takes precedence over combine,\n // unless set to null\n if (state.overlayCur == null) return state.baseCur;\n else if (state.baseCur != null &&\n state.overlay.combineTokens ||\n combine && state.overlay.combineTokens == null)\n return state.baseCur + \" \" + state.overlayCur;\n else return state.overlayCur;\n },\n\n indent: base.indent && function(state, textAfter, line) {\n return base.indent(state.base, textAfter, line);\n },\n electricChars: base.electricChars,\n\n innerMode: function(state) { return {state: state.base, mode: base}; },\n\n blankLine: function(state) {\n var baseToken, overlayToken;\n if (base.blankLine) baseToken = base.blankLine(state.base);\n if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n\n return overlayToken == null ?\n baseToken :\n (combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken);\n }\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","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","var React = require('react');\nvar createReactClass = require('create-react-class');\nvar PropTypes = require('prop-types');\nvar merge = require('object-assign');\nvar NotificationContainer = require('./NotificationContainer');\nvar Constants = require('./constants');\nvar Styles = require('./styles');\n\nvar NotificationSystem = createReactClass({\n\n uid: 3400,\n\n _isMounted: false,\n\n _getStyles: {\n overrideStyle: {},\n\n overrideWidth: null,\n\n setOverrideStyle: function(style) {\n this.overrideStyle = style;\n },\n\n wrapper: function() {\n if (!this.overrideStyle) return {};\n return merge({}, Styles.Wrapper, this.overrideStyle.Wrapper);\n },\n\n container: function(position) {\n var override = this.overrideStyle.Containers || {};\n if (!this.overrideStyle) return {};\n\n this.overrideWidth = Styles.Containers.DefaultStyle.width;\n\n if (override.DefaultStyle && override.DefaultStyle.width) {\n this.overrideWidth = override.DefaultStyle.width;\n }\n\n if (override[position] && override[position].width) {\n this.overrideWidth = override[position].width;\n }\n\n return merge({}, Styles.Containers.DefaultStyle, Styles.Containers[position], override.DefaultStyle, override[position]);\n },\n\n elements: {\n notification: 'NotificationItem',\n title: 'Title',\n messageWrapper: 'MessageWrapper',\n dismiss: 'Dismiss',\n action: 'Action',\n actionWrapper: 'ActionWrapper'\n },\n\n byElement: function(element) {\n var self = this;\n return function(level) {\n var _element = self.elements[element];\n var override = self.overrideStyle[_element] || {};\n if (!self.overrideStyle) return {};\n return merge({}, Styles[_element].DefaultStyle, Styles[_element][level], override.DefaultStyle, override[level]);\n };\n }\n },\n\n _didNotificationRemoved: function(uid) {\n var notification;\n var notifications = this.state.notifications.filter(function(toCheck) {\n if (toCheck.uid === uid) {\n notification = toCheck;\n return false;\n }\n return true;\n });\n\n if (this._isMounted) {\n this.setState({ notifications: notifications });\n }\n\n if (notification && notification.onRemove) {\n notification.onRemove(notification);\n }\n },\n\n getInitialState: function() {\n return {\n notifications: []\n };\n },\n\n propTypes: {\n style: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.object\n ]),\n noAnimation: PropTypes.bool,\n allowHTML: PropTypes.bool\n },\n\n getDefaultProps: function() {\n return {\n style: {},\n noAnimation: false,\n allowHTML: false\n };\n },\n\n addNotification: function(notification) {\n var _notification = merge({}, Constants.notification, notification);\n var notifications = this.state.notifications;\n var i;\n\n if (!_notification.level) {\n throw new Error('notification level is required.');\n }\n\n if (Object.keys(Constants.levels).indexOf(_notification.level) === -1) {\n throw new Error('\\'' + _notification.level + '\\' is not a valid level.');\n }\n\n // eslint-disable-next-line\n if (isNaN(_notification.autoDismiss)) {\n throw new Error('\\'autoDismiss\\' must be a number.');\n }\n\n if (Object.keys(Constants.positions).indexOf(_notification.position) === -1) {\n throw new Error('\\'' + _notification.position + '\\' is not a valid position.');\n }\n\n // Some preparations\n _notification.position = _notification.position.toLowerCase();\n _notification.level = _notification.level.toLowerCase();\n _notification.autoDismiss = parseInt(_notification.autoDismiss, 10);\n\n _notification.uid = _notification.uid || this.uid;\n _notification.ref = 'notification-' + _notification.uid;\n this.uid += 1;\n\n // do not add if the notification already exists based on supplied uid\n for (i = 0; i < notifications.length; i += 1) {\n if (notifications[i].uid === _notification.uid) {\n return false;\n }\n }\n\n notifications.push(_notification);\n\n if (typeof _notification.onAdd === 'function') {\n notification.onAdd(_notification);\n }\n\n this.setState({\n notifications: notifications\n });\n\n return _notification;\n },\n\n getNotificationRef: function(notification) {\n var self = this;\n var foundNotification = null;\n\n Object.keys(this.refs).forEach(function(container) {\n if (container.indexOf('container') > -1) {\n Object.keys(self.refs[container].refs).forEach(function(_notification) {\n var uid = notification.uid ? notification.uid : notification;\n if (_notification === 'notification-' + uid) {\n // NOTE: Stop iterating further and return the found notification.\n // Since UIDs are uniques and there won't be another notification found.\n foundNotification = self.refs[container].refs[_notification];\n }\n });\n }\n });\n\n return foundNotification;\n },\n\n removeNotification: function(notification) {\n var foundNotification = this.getNotificationRef(notification);\n return foundNotification && foundNotification._hideNotification();\n },\n\n editNotification: function(notification, newNotification) {\n var foundNotification = null;\n // NOTE: Find state notification to update by using\n // `setState` and forcing React to re-render the component.\n var uid = notification.uid ? notification.uid : notification;\n\n var newNotifications = this.state.notifications.filter(function(stateNotification) {\n if (uid === stateNotification.uid) {\n foundNotification = stateNotification;\n return false;\n }\n\n return true;\n });\n\n\n if (!foundNotification) {\n return;\n }\n\n newNotifications.push(merge(\n {},\n foundNotification,\n newNotification\n ));\n\n this.setState({\n notifications: newNotifications\n });\n },\n\n clearNotifications: function() {\n var self = this;\n Object.keys(this.refs).forEach(function(container) {\n if (container.indexOf('container') > -1) {\n Object.keys(self.refs[container].refs).forEach(function(_notification) {\n self.refs[container].refs[_notification]._hideNotification();\n });\n }\n });\n },\n\n componentDidMount: function() {\n this._getStyles.setOverrideStyle(this.props.style);\n this._isMounted = true;\n },\n\n componentWillUnmount: function() {\n this._isMounted = false;\n },\n\n render: function() {\n var self = this;\n var containers = null;\n var notifications = this.state.notifications;\n\n if (notifications.length) {\n containers = Object.keys(Constants.positions).map(function(position) {\n var _notifications = notifications.filter(function(notification) {\n return position === notification.position;\n });\n\n if (!_notifications.length) {\n return null;\n }\n\n return (\n React.createElement(NotificationContainer, {\n ref: 'container-' + position, \n key: position, \n position: position, \n notifications: _notifications, \n getStyles: self._getStyles, \n onRemove: self._didNotificationRemoved, \n noAnimation: self.props.noAnimation, \n allowHTML: self.props.allowHTML}\n )\n );\n });\n }\n\n\n return (\n React.createElement(\"div\", {className: \"notifications-wrapper\", style: this._getStyles.wrapper() }, \n containers \n )\n );\n }\n});\n\nmodule.exports = NotificationSystem;\n","/**!\n * Sortable\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\n\n(function sortableModule(factory) {\n\t\"use strict\";\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(factory);\n\t}\n\telse if (typeof module != \"undefined\" && typeof module.exports != \"undefined\") {\n\t\tmodule.exports = factory();\n\t}\n\telse {\n\t\t/* jshint sub:true */\n\t\twindow[\"Sortable\"] = factory();\n\t}\n})(function sortableFactory() {\n\t\"use strict\";\n\n\tif (typeof window === \"undefined\" || !window.document) {\n\t\treturn function sortableError() {\n\t\t\tthrow new Error(\"Sortable.js requires a window with a document\");\n\t\t};\n\t}\n\n\tvar dragEl,\n\t\tparentEl,\n\t\tghostEl,\n\t\tcloneEl,\n\t\trootEl,\n\t\tnextEl,\n\t\tlastDownEl,\n\n\t\tscrollEl,\n\t\tscrollParentEl,\n\t\tscrollCustomFn,\n\n\t\toldIndex,\n\t\tnewIndex,\n\n\t\tactiveGroup,\n\t\tputSortable,\n\n\t\tautoScrolls = [],\n\t\tscrolling = false,\n\n\t\tawaitingDragStarted = false,\n\t\tignoreNextClick = false,\n\t\tsortables = [],\n\n\t\tpointerElemChangedInterval,\n\t\tlastPointerElemX,\n\t\tlastPointerElemY,\n\n\t\ttapEvt,\n\t\ttouchEvt,\n\n\t\tmoved,\n\n\n\t\tlastTarget,\n\t\tlastDirection,\n\t\tpastFirstInvertThresh = false,\n\t\tisCircumstantialInvert = false,\n\t\tlastMode, // 'swap' or 'insert'\n\n\t\ttargetMoveDistance,\n\n\t\t// For positioning ghost absolutely\n\t\tghostRelativeParent,\n\t\tghostRelativeParentInitialScroll = [], // (left, top)\n\n\n\t\tforRepaintDummy,\n\t\trealDragElRect, // dragEl rect after current animation\n\n\t\t/** @const */\n\t\tR_SPACE = /\\s+/g,\n\n\t\texpando = 'Sortable' + (new Date).getTime(),\n\n\t\twin = window,\n\t\tdocument = win.document,\n\t\tparseInt = win.parseInt,\n\t\tsetTimeout = win.setTimeout,\n\n\t\t$ = win.jQuery || win.Zepto,\n\t\tPolymer = win.Polymer,\n\n\t\tcaptureMode = {\n\t\t\tcapture: false,\n\t\t\tpassive: false\n\t\t},\n\n\t\tIE11OrLess = !!navigator.userAgent.match(/(?:Trident.*rv[ :]?11\\.|msie|iemobile)/i),\n\t\tEdge = !!navigator.userAgent.match(/Edge/i),\n\t\tFireFox = !!navigator.userAgent.match(/firefox/i),\n\t\tSafari = !!(navigator.userAgent.match(/safari/i) && !navigator.userAgent.match(/chrome/i) && !navigator.userAgent.match(/android/i)),\n\t\tIOS = !!(navigator.userAgent.match(/iP(ad|od|hone)/i)),\n\n\t\tPositionGhostAbsolutely = IOS,\n\n\t\tCSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n\n\t\t// This will not pass for IE9, because IE9 DnD only works on anchors\n\t\tsupportDraggable = ('draggable' in document.createElement('div')),\n\n\t\tsupportCssPointerEvents = (function() {\n\t\t\t// false when <= IE11\n\t\t\tif (IE11OrLess) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar el = document.createElement('x');\n\t\t\tel.style.cssText = 'pointer-events:auto';\n\t\t\treturn el.style.pointerEvents === 'auto';\n\t\t})(),\n\n\t\t_silent = false,\n\t\t_alignedSilent = false,\n\n\t\tabs = Math.abs,\n\t\tmin = Math.min,\n\t\tmax = Math.max,\n\n\t\tsavedInputChecked = [],\n\n\t\t_detectDirection = function(el, options) {\n\t\t\tvar elCSS = _css(el),\n\t\t\t\telWidth = parseInt(elCSS.width)\n\t\t\t\t\t- parseInt(elCSS.paddingLeft)\n\t\t\t\t\t- parseInt(elCSS.paddingRight)\n\t\t\t\t\t- parseInt(elCSS.borderLeftWidth)\n\t\t\t\t\t- parseInt(elCSS.borderRightWidth),\n\t\t\t\tchild1 = _getChild(el, 0, options),\n\t\t\t\tchild2 = _getChild(el, 1, options),\n\t\t\t\tfirstChildCSS = child1 && _css(child1),\n\t\t\t\tsecondChildCSS = child2 && _css(child2),\n\t\t\t\tfirstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + _getRect(child1).width,\n\t\t\t\tsecondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + _getRect(child2).width;\n\n\t\t\tif (elCSS.display === 'flex') {\n\t\t\t\treturn elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse'\n\t\t\t\t? 'vertical' : 'horizontal';\n\t\t\t}\n\n\t\t\tif (elCSS.display === 'grid') {\n\t\t\t\treturn elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n\t\t\t}\n\n\t\t\tif (child1 && firstChildCSS.float !== 'none') {\n\t\t\t\tvar touchingSideChild2 = firstChildCSS.float === 'left' ? 'left' : 'right';\n\n\t\t\t\treturn child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ?\n\t\t\t\t\t'vertical' : 'horizontal';\n\t\t\t}\n\n\t\t\treturn (child1 &&\n\t\t\t\t(\n\t\t\t\t\tfirstChildCSS.display === 'block' ||\n\t\t\t\t\tfirstChildCSS.display === 'flex' ||\n\t\t\t\t\tfirstChildCSS.display === 'table' ||\n\t\t\t\t\tfirstChildCSS.display === 'grid' ||\n\t\t\t\t\tfirstChildWidth >= elWidth &&\n\t\t\t\t\telCSS[CSSFloatProperty] === 'none' ||\n\t\t\t\t\tchild2 &&\n\t\t\t\t\telCSS[CSSFloatProperty] === 'none' &&\n\t\t\t\t\tfirstChildWidth + secondChildWidth > elWidth\n\t\t\t\t) ?\n\t\t\t\t'vertical' : 'horizontal'\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n\t\t * @param {Number} x X position\n\t\t * @param {Number} y Y position\n\t\t * @return {HTMLElement} Element of the first found nearest Sortable\n\t\t */\n\t\t_detectNearestEmptySortable = function(x, y) {\n\t\t\tfor (var i = 0; i < sortables.length; i++) {\n\t\t\t\tif (_lastChild(sortables[i])) continue;\n\n\t\t\t\tvar rect = _getRect(sortables[i]),\n\t\t\t\t\tthreshold = sortables[i][expando].options.emptyInsertThreshold,\n\t\t\t\t\tinsideHorizontally = x >= (rect.left - threshold) && x <= (rect.right + threshold),\n\t\t\t\t\tinsideVertically = y >= (rect.top - threshold) && y <= (rect.bottom + threshold);\n\n\t\t\t\tif (insideHorizontally && insideVertically) {\n\t\t\t\t\treturn sortables[i];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_isClientInRowColumn = function(x, y, el, axis, options) {\n\t\t\tvar targetRect = _getRect(el),\n\t\t\t\ttargetS1Opp = axis === 'vertical' ? targetRect.left : targetRect.top,\n\t\t\t\ttargetS2Opp = axis === 'vertical' ? targetRect.right : targetRect.bottom,\n\t\t\t\tmouseOnOppAxis = axis === 'vertical' ? x : y;\n\n\t\t\treturn targetS1Opp < mouseOnOppAxis && mouseOnOppAxis < targetS2Opp;\n\t\t},\n\n\t\t_isElInRowColumn = function(el1, el2, axis) {\n\t\t\tvar el1Rect = el1 === dragEl && realDragElRect || _getRect(el1),\n\t\t\t\tel2Rect = el2 === dragEl && realDragElRect || _getRect(el2),\n\t\t\t\tel1S1Opp = axis === 'vertical' ? el1Rect.left : el1Rect.top,\n\t\t\t\tel1S2Opp = axis === 'vertical' ? el1Rect.right : el1Rect.bottom,\n\t\t\t\tel1OppLength = axis === 'vertical' ? el1Rect.width : el1Rect.height,\n\t\t\t\tel2S1Opp = axis === 'vertical' ? el2Rect.left : el2Rect.top,\n\t\t\t\tel2S2Opp = axis === 'vertical' ? el2Rect.right : el2Rect.bottom,\n\t\t\t\tel2OppLength = axis === 'vertical' ? el2Rect.width : el2Rect.height;\n\n\t\t\treturn (\n\t\t\t\tel1S1Opp === el2S1Opp ||\n\t\t\t\tel1S2Opp === el2S2Opp ||\n\t\t\t\t(el1S1Opp + el1OppLength / 2) === (el2S1Opp + el2OppLength / 2)\n\t\t\t);\n\t\t},\n\n\t\t_getParentAutoScrollElement = function(el, includeSelf) {\n\t\t\t// skip to window\n\t\t\tif (!el || !el.getBoundingClientRect) return _getWindowScrollingElement();\n\n\t\t\tvar elem = el;\n\t\t\tvar gotSelf = false;\n\t\t\tdo {\n\t\t\t\t// we don't need to get elem css if it isn't even overflowing in the first place (performance)\n\t\t\t\tif (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n\t\t\t\t\tvar elemCSS = _css(elem);\n\t\t\t\t\tif (\n\t\t\t\t\t\telem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') ||\n\t\t\t\t\t\telem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (!elem || !elem.getBoundingClientRect || elem === document.body) return _getWindowScrollingElement();\n\n\t\t\t\t\t\tif (gotSelf || includeSelf) return elem;\n\t\t\t\t\t\tgotSelf = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t/* jshint boss:true */\n\t\t\t} while (elem = elem.parentNode);\n\n\t\t\treturn _getWindowScrollingElement();\n\t\t},\n\n\t\t_getWindowScrollingElement = function() {\n\t\t\tif (IE11OrLess) {\n\t\t\t\treturn document.documentElement;\n\t\t\t} else {\n\t\t\t\treturn document.scrollingElement;\n\t\t\t}\n\t\t},\n\n\t\t_scrollBy = function(el, x, y) {\n\t\t\tel.scrollLeft += x;\n\t\t\tel.scrollTop += y;\n\t\t},\n\n\t\t_autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl, /**Boolean*/isFallback) {\n\t\t\t// Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n\t\t\tif (options.scroll) {\n\t\t\t\tvar _this = rootEl ? rootEl[expando] : window,\n\t\t\t\t\tsens = options.scrollSensitivity,\n\t\t\t\t\tspeed = options.scrollSpeed,\n\n\t\t\t\t\tx = evt.clientX,\n\t\t\t\t\ty = evt.clientY,\n\n\t\t\t\t\twinScroller = _getWindowScrollingElement(),\n\n\t\t\t\t\tscrollThisInstance = false;\n\n\t\t\t\t// Detect scrollEl\n\t\t\t\tif (scrollParentEl !== rootEl) {\n\t\t\t\t\t_clearAutoScrolls();\n\n\t\t\t\t\tscrollEl = options.scroll;\n\t\t\t\t\tscrollCustomFn = options.scrollFn;\n\n\t\t\t\t\tif (scrollEl === true) {\n\t\t\t\t\t\tscrollEl = _getParentAutoScrollElement(rootEl, true);\n\t\t\t\t\t\tscrollParentEl = scrollEl;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\tvar layersOut = 0;\n\t\t\t\tvar currentParent = scrollEl;\n\t\t\t\tdo {\n\t\t\t\t\tvar\tel = currentParent,\n\t\t\t\t\t\trect = _getRect(el),\n\n\t\t\t\t\t\ttop = rect.top,\n\t\t\t\t\t\tbottom = rect.bottom,\n\t\t\t\t\t\tleft = rect.left,\n\t\t\t\t\t\tright = rect.right,\n\n\t\t\t\t\t\twidth = rect.width,\n\t\t\t\t\t\theight = rect.height,\n\n\t\t\t\t\t\tscrollWidth,\n\t\t\t\t\t\tscrollHeight,\n\n\t\t\t\t\t\tcss,\n\n\t\t\t\t\t\tvx,\n\t\t\t\t\t\tvy,\n\n\t\t\t\t\t\tcanScrollX,\n\t\t\t\t\t\tcanScrollY,\n\n\t\t\t\t\t\tscrollPosX,\n\t\t\t\t\t\tscrollPosY;\n\n\n\t\t\t\t\tscrollWidth = el.scrollWidth;\n\t\t\t\t\tscrollHeight = el.scrollHeight;\n\n\t\t\t\t\tcss = _css(el);\n\n\t\t\t\t\tscrollPosX = el.scrollLeft;\n\t\t\t\t\tscrollPosY = el.scrollTop;\n\n\t\t\t\t\tif (el === winScroller) {\n\t\t\t\t\t\tcanScrollX = width < scrollWidth && (css.overflowX === 'auto' || css.overflowX === 'scroll' || css.overflowX === 'visible');\n\t\t\t\t\t\tcanScrollY = height < scrollHeight && (css.overflowY === 'auto' || css.overflowY === 'scroll' || css.overflowY === 'visible');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcanScrollX = width < scrollWidth && (css.overflowX === 'auto' || css.overflowX === 'scroll');\n\t\t\t\t\t\tcanScrollY = height < scrollHeight && (css.overflowY === 'auto' || css.overflowY === 'scroll');\n\t\t\t\t\t}\n\n\t\t\t\t\tvx = canScrollX && (abs(right - x) <= sens && (scrollPosX + width) < scrollWidth) - (abs(left - x) <= sens && !!scrollPosX);\n\n\t\t\t\t\tvy = canScrollY && (abs(bottom - y) <= sens && (scrollPosY + height) < scrollHeight) - (abs(top - y) <= sens && !!scrollPosY);\n\n\n\t\t\t\t\tif (!autoScrolls[layersOut]) {\n\t\t\t\t\t\tfor (var i = 0; i <= layersOut; i++) {\n\t\t\t\t\t\t\tif (!autoScrolls[i]) {\n\t\t\t\t\t\t\t\tautoScrolls[i] = {};\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\tif (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n\t\t\t\t\t\tautoScrolls[layersOut].el = el;\n\t\t\t\t\t\tautoScrolls[layersOut].vx = vx;\n\t\t\t\t\t\tautoScrolls[layersOut].vy = vy;\n\n\t\t\t\t\t\tclearInterval(autoScrolls[layersOut].pid);\n\n\t\t\t\t\t\tif (el && (vx != 0 || vy != 0)) {\n\t\t\t\t\t\t\tscrollThisInstance = true;\n\t\t\t\t\t\t\t/* jshint loopfunc:true */\n\t\t\t\t\t\t\tautoScrolls[layersOut].pid = setInterval((function () {\n\t\t\t\t\t\t\t\t// emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n\t\t\t\t\t\t\t\tif (isFallback && this.layer === 0) {\n\t\t\t\t\t\t\t\t\tSortable.active._emulateDragOver(true);\n\t\t\t\t\t\t\t\t\tSortable.active._onTouchMove(touchEvt, true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvar scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n\t\t\t\t\t\t\t\tvar scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n\t\t\t\t\t\t\t\tif ('function' === typeof(scrollCustomFn)) {\n\t\t\t\t\t\t\t\t\tif (scrollCustomFn.call(_this, scrollOffsetX, scrollOffsetY, evt, touchEvt, autoScrolls[this.layer].el) !== 'continue') {\n\t\t\t\t\t\t\t\t\t\treturn;\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\t_scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n\t\t\t\t\t\t\t}).bind({layer: layersOut}), 24);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlayersOut++;\n\t\t\t\t} while (options.bubbleScroll && currentParent !== winScroller && (currentParent = _getParentAutoScrollElement(currentParent, false)));\n\t\t\t\tscrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n\t\t\t}\n\t\t}, 30),\n\n\t\t_clearAutoScrolls = function () {\n\t\t\tautoScrolls.forEach(function(autoScroll) {\n\t\t\t\tclearInterval(autoScroll.pid);\n\t\t\t});\n\t\t\tautoScrolls = [];\n\t\t},\n\n\t\t_prepareGroup = function (options) {\n\t\t\tfunction toFn(value, pull) {\n\t\t\t\treturn function(to, from, dragEl, evt) {\n\t\t\t\t\tvar sameGroup = to.options.group.name &&\n\t\t\t\t\t\t\t\t\tfrom.options.group.name &&\n\t\t\t\t\t\t\t\t\tto.options.group.name === from.options.group.name;\n\n\t\t\t\t\tif (value == null && (pull || sameGroup)) {\n\t\t\t\t\t\t// Default pull value\n\t\t\t\t\t\t// Default pull and put value if same group\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if (value == null || value === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (pull && value === 'clone') {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t} else if (typeof value === 'function') {\n\t\t\t\t\t\treturn toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar otherGroup = (pull ? to : from).options.group.name;\n\n\t\t\t\t\t\treturn (value === true ||\n\t\t\t\t\t\t(typeof value === 'string' && value === otherGroup) ||\n\t\t\t\t\t\t(value.join && value.indexOf(otherGroup) > -1));\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar group = {};\n\t\t\tvar originalGroup = options.group;\n\n\t\t\tif (!originalGroup || typeof originalGroup != 'object') {\n\t\t\t\toriginalGroup = {name: originalGroup};\n\t\t\t}\n\n\t\t\tgroup.name = originalGroup.name;\n\t\t\tgroup.checkPull = toFn(originalGroup.pull, true);\n\t\t\tgroup.checkPut = toFn(originalGroup.put);\n\t\t\tgroup.revertClone = originalGroup.revertClone;\n\n\t\t\toptions.group = group;\n\t\t},\n\n\t\t_checkAlignment = function(evt) {\n\t\t\tif (!dragEl || !dragEl.parentNode) return;\n\t\t\tdragEl.parentNode[expando] && dragEl.parentNode[expando]._computeIsAligned(evt);\n\t\t},\n\n\t\t_isTrueParentSortable = function(el, target) {\n\t\t\tvar trueParent = target;\n\t\t\twhile (!trueParent[expando]) {\n\t\t\t\ttrueParent = trueParent.parentNode;\n\t\t\t}\n\n\t\t\treturn el === trueParent;\n\t\t},\n\n\t\t_artificalBubble = function(sortable, originalEvt, method) {\n\t\t\t// Artificial IE bubbling\n\t\t\tvar nextParent = sortable.parentNode;\n\t\t\twhile (nextParent && !nextParent[expando]) {\n\t\t\t\tnextParent = nextParent.parentNode;\n\t\t\t}\n\n\t\t\tif (nextParent) {\n\t\t\t\tnextParent[expando][method](_extend(originalEvt, {\n\t\t\t\t\tartificialBubble: true\n\t\t\t\t}));\n\t\t\t}\n\t\t},\n\n\t\t_hideGhostForTarget = function() {\n\t\t\tif (!supportCssPointerEvents && ghostEl) {\n\t\t\t\t_css(ghostEl, 'display', 'none');\n\t\t\t}\n\t\t},\n\n\t\t_unhideGhostForTarget = function() {\n\t\t\tif (!supportCssPointerEvents && ghostEl) {\n\t\t\t\t_css(ghostEl, 'display', '');\n\t\t\t}\n\t\t};\n\n\n\t// #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\tdocument.addEventListener('click', function(evt) {\n\t\tif (ignoreNextClick) {\n\t\t\tevt.preventDefault();\n\t\t\tevt.stopPropagation && evt.stopPropagation();\n\t\t\tevt.stopImmediatePropagation && evt.stopImmediatePropagation();\n\t\t\tignoreNextClick = false;\n\t\t\treturn false;\n\t\t}\n\t}, true);\n\n\tvar nearestEmptyInsertDetectEvent = function(evt) {\n\t\tevt = evt.touches ? evt.touches[0] : evt;\n\t\tif (dragEl) {\n\t\t\tvar nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n\t\t\tif (nearest) {\n\t\t\t\tnearest[expando]._onDragOver({\n\t\t\t\t\tclientX: evt.clientX,\n\t\t\t\t\tclientY: evt.clientY,\n\t\t\t\t\ttarget: nearest,\n\t\t\t\t\trootEl: nearest\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\t// We do not want this to be triggered if completed (bubbling canceled), so only define it here\n\t_on(document, 'dragover', nearestEmptyInsertDetectEvent);\n\t_on(document, 'mousemove', nearestEmptyInsertDetectEvent);\n\t_on(document, 'touchmove', nearestEmptyInsertDetectEvent);\n\n\t/**\n\t * @class Sortable\n\t * @param {HTMLElement} el\n\t * @param {Object} [options]\n\t */\n\tfunction Sortable(el, options) {\n\t\tif (!(el && el.nodeType && el.nodeType === 1)) {\n\t\t\tthrow 'Sortable: `el` must be HTMLElement, not ' + {}.toString.call(el);\n\t\t}\n\n\t\tthis.el = el; // root element\n\t\tthis.options = options = _extend({}, options);\n\n\n\t\t// Export instance\n\t\tel[expando] = this;\n\n\t\t// Default options\n\t\tvar defaults = {\n\t\t\tgroup: null,\n\t\t\tsort: true,\n\t\t\tdisabled: false,\n\t\t\tstore: null,\n\t\t\thandle: null,\n\t\t\tscroll: true,\n\t\t\tscrollSensitivity: 30,\n\t\t\tscrollSpeed: 10,\n\t\t\tbubbleScroll: true,\n\t\t\tdraggable: /[uo]l/i.test(el.nodeName) ? '>li' : '>*',\n\t\t\tswapThreshold: 1, // percentage; 0 <= x <= 1\n\t\t\tinvertSwap: false, // invert always\n\t\t\tinvertedSwapThreshold: null, // will be set to same as swapThreshold if default\n\t\t\tremoveCloneOnHide: true,\n\t\t\tdirection: function() {\n\t\t\t\treturn _detectDirection(el, this.options);\n\t\t\t},\n\t\t\tghostClass: 'sortable-ghost',\n\t\t\tchosenClass: 'sortable-chosen',\n\t\t\tdragClass: 'sortable-drag',\n\t\t\tignore: 'a, img',\n\t\t\tfilter: null,\n\t\t\tpreventOnFilter: true,\n\t\t\tanimation: 0,\n\t\t\teasing: null,\n\t\t\tsetData: function (dataTransfer, dragEl) {\n\t\t\t\tdataTransfer.setData('Text', dragEl.textContent);\n\t\t\t},\n\t\t\tdropBubble: false,\n\t\t\tdragoverBubble: false,\n\t\t\tdataIdAttr: 'data-id',\n\t\t\tdelay: 0,\n\t\t\ttouchStartThreshold: parseInt(window.devicePixelRatio, 10) || 1,\n\t\t\tforceFallback: false,\n\t\t\tfallbackClass: 'sortable-fallback',\n\t\t\tfallbackOnBody: false,\n\t\t\tfallbackTolerance: 0,\n\t\t\tfallbackOffset: {x: 0, y: 0},\n\t\t\tsupportPointer: Sortable.supportPointer !== false && (\n\t\t\t\t('PointerEvent' in window) ||\n\t\t\t\twindow.navigator && ('msPointerEnabled' in window.navigator) // microsoft\n\t\t\t),\n\t\t\temptyInsertThreshold: 5\n\t\t};\n\n\n\t\t// Set default options\n\t\tfor (var name in defaults) {\n\t\t\t!(name in options) && (options[name] = defaults[name]);\n\t\t}\n\n\t\t_prepareGroup(options);\n\n\t\t// Bind all private methods\n\t\tfor (var fn in this) {\n\t\t\tif (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n\t\t\t\tthis[fn] = this[fn].bind(this);\n\t\t\t}\n\t\t}\n\n\t\t// Setup drag mode\n\t\tthis.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n\t\tif (this.nativeDraggable) {\n\t\t\t// Touch start threshold cannot be greater than the native dragstart threshold\n\t\t\tthis.options.touchStartThreshold = 1;\n\t\t}\n\n\t\t// Bind events\n\t\tif (options.supportPointer) {\n\t\t\t_on(el, 'pointerdown', this._onTapStart);\n\t\t} else {\n\t\t\t_on(el, 'mousedown', this._onTapStart);\n\t\t\t_on(el, 'touchstart', this._onTapStart);\n\t\t}\n\n\t\tif (this.nativeDraggable) {\n\t\t\t_on(el, 'dragover', this);\n\t\t\t_on(el, 'dragenter', this);\n\t\t}\n\n\t\tsortables.push(this.el);\n\n\t\t// Restore sorting\n\t\toptions.store && options.store.get && this.sort(options.store.get(this) || []);\n\t}\n\n\tSortable.prototype = /** @lends Sortable.prototype */ {\n\t\tconstructor: Sortable,\n\n\t\t_computeIsAligned: function(evt) {\n\t\t\tvar target;\n\n\t\t\tif (ghostEl && !supportCssPointerEvents) {\n\t\t\t\t_hideGhostForTarget();\n\t\t\t\ttarget = document.elementFromPoint(evt.clientX, evt.clientY);\n\t\t\t\t_unhideGhostForTarget();\n\t\t\t} else {\n\t\t\t\ttarget = evt.target;\n\t\t\t}\n\n\t\t\ttarget = _closest(target, this.options.draggable, this.el, false);\n\t\t\tif (_alignedSilent) return;\n\t\t\tif (!dragEl || dragEl.parentNode !== this.el) return;\n\n\t\t\tvar children = this.el.children;\n\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t// Don't change for target in case it is changed to aligned before onDragOver is fired\n\t\t\t\tif (_closest(children[i], this.options.draggable, this.el, false) && children[i] !== target) {\n\t\t\t\t\tchildren[i].sortableMouseAligned = _isClientInRowColumn(evt.clientX, evt.clientY, children[i], this._getDirection(evt, null), this.options);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Used for nulling last target when not in element, nothing to do with checking if aligned\n\t\t\tif (!_closest(target, this.options.draggable, this.el, true)) {\n\t\t\t\tlastTarget = null;\n\t\t\t}\n\n\t\t\t_alignedSilent = true;\n\t\t\tsetTimeout(function() {\n\t\t\t\t_alignedSilent = false;\n\t\t\t}, 30);\n\n\t\t},\n\n\t\t_getDirection: function(evt, target) {\n\t\t\treturn (typeof this.options.direction === 'function') ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n\t\t},\n\n\t\t_onTapStart: function (/** Event|TouchEvent */evt) {\n\t\t\tif (!evt.cancelable) return;\n\t\t\tvar _this = this,\n\t\t\t\tel = this.el,\n\t\t\t\toptions = this.options,\n\t\t\t\tpreventOnFilter = options.preventOnFilter,\n\t\t\t\ttype = evt.type,\n\t\t\t\ttouch = evt.touches && evt.touches[0],\n\t\t\t\ttarget = (touch || evt).target,\n\t\t\t\toriginalTarget = evt.target.shadowRoot && ((evt.path && evt.path[0]) || (evt.composedPath && evt.composedPath()[0])) || target,\n\t\t\t\tfilter = options.filter,\n\t\t\t\tstartIndex;\n\n\t\t\t_saveInputCheckedState(el);\n\n\n\t\t\t// IE: Calls events in capture mode if event element is nested. This ensures only correct element's _onTapStart goes through.\n\t\t\t// This process is also done in _onDragOver\n\t\t\tif (IE11OrLess && !evt.artificialBubble && !_isTrueParentSortable(el, target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\t\t\tif (dragEl) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n\t\t\t\treturn; // only left button and enabled\n\t\t\t}\n\n\t\t\t// cancel dnd if original target is content editable\n\t\t\tif (originalTarget.isContentEditable) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttarget = _closest(target, options.draggable, el, false);\n\n\t\t\tif (!target) {\n\t\t\t\tif (IE11OrLess) {\n\t\t\t\t\t_artificalBubble(el, evt, '_onTapStart');\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (lastDownEl === target) {\n\t\t\t\t// Ignoring duplicate `down`\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Get the index of the dragged element within its parent\n\t\t\tstartIndex = _index(target, options.draggable);\n\n\t\t\t// Check filter\n\t\t\tif (typeof filter === 'function') {\n\t\t\t\tif (filter.call(this, evt, target, this)) {\n\t\t\t\t\t_dispatchEvent(_this, originalTarget, 'filter', target, el, el, startIndex);\n\t\t\t\t\tpreventOnFilter && evt.cancelable && evt.preventDefault();\n\t\t\t\t\treturn; // cancel dnd\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (filter) {\n\t\t\t\tfilter = filter.split(',').some(function (criteria) {\n\t\t\t\t\tcriteria = _closest(originalTarget, criteria.trim(), el, false);\n\n\t\t\t\t\tif (criteria) {\n\t\t\t\t\t\t_dispatchEvent(_this, criteria, 'filter', target, el, el, startIndex);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (filter) {\n\t\t\t\t\tpreventOnFilter && evt.cancelable && evt.preventDefault();\n\t\t\t\t\treturn; // cancel dnd\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.handle && !_closest(originalTarget, options.handle, el, false)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Prepare `dragstart`\n\t\t\tthis._prepareDragStart(evt, touch, target, startIndex);\n\t\t},\n\n\n\t\t_handleAutoScroll: function(evt, fallback) {\n\t\t\tif (!dragEl || !this.options.scroll) return;\n\t\t\tvar x = evt.clientX,\n\t\t\t\ty = evt.clientY,\n\n\t\t\t\telem = document.elementFromPoint(x, y),\n\t\t\t\t_this = this;\n\n\t\t\t// IE does not seem to have native autoscroll,\n\t\t\t// Edge's autoscroll seems too conditional,\n\t\t\t// MACOS Safari does not have autoscroll,\n\t\t\t// Firefox and Chrome are good\n\t\t\tif (fallback || Edge || IE11OrLess || Safari) {\n\t\t\t\t_autoScroll(evt, _this.options, elem, fallback);\n\n\t\t\t\t// Listener for pointer element change\n\t\t\t\tvar ogElemScroller = _getParentAutoScrollElement(elem, true);\n\t\t\t\tif (\n\t\t\t\t\tscrolling &&\n\t\t\t\t\t(\n\t\t\t\t\t\t!pointerElemChangedInterval ||\n\t\t\t\t\t\tx !== lastPointerElemX ||\n\t\t\t\t\t\ty !== lastPointerElemY\n\t\t\t\t\t)\n\t\t\t\t) {\n\n\t\t\t\t\tpointerElemChangedInterval && clearInterval(pointerElemChangedInterval);\n\t\t\t\t\t// Detect for pointer elem change, emulating native DnD behaviour\n\t\t\t\t\tpointerElemChangedInterval = setInterval(function() {\n\t\t\t\t\t\tif (!dragEl) return;\n\t\t\t\t\t\t// could also check if scroll direction on newElem changes due to parent autoscrolling\n\t\t\t\t\t\tvar newElem = _getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\t\t\t\t\t\tif (newElem !== ogElemScroller) {\n\t\t\t\t\t\t\togElemScroller = newElem;\n\t\t\t\t\t\t\t_clearAutoScrolls();\n\t\t\t\t\t\t\t_autoScroll(evt, _this.options, ogElemScroller, fallback);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 10);\n\t\t\t\t\tlastPointerElemX = x;\n\t\t\t\t\tlastPointerElemY = y;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n\t\t\t\tif (!_this.options.bubbleScroll || _getParentAutoScrollElement(elem, true) === _getWindowScrollingElement()) {\n\t\t\t\t\t_clearAutoScrolls();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t_autoScroll(evt, _this.options, _getParentAutoScrollElement(elem, false), false);\n\t\t\t}\n\t\t},\n\n\t\t_prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target, /** Number */startIndex) {\n\t\t\tvar _this = this,\n\t\t\t\tel = _this.el,\n\t\t\t\toptions = _this.options,\n\t\t\t\townerDocument = el.ownerDocument,\n\t\t\t\tdragStartFn;\n\n\t\t\tif (target && !dragEl && (target.parentNode === el)) {\n\t\t\t\trootEl = el;\n\t\t\t\tdragEl = target;\n\t\t\t\tparentEl = dragEl.parentNode;\n\t\t\t\tnextEl = dragEl.nextSibling;\n\t\t\t\tlastDownEl = target;\n\t\t\t\tactiveGroup = options.group;\n\t\t\t\toldIndex = startIndex;\n\n\t\t\t\ttapEvt = {\n\t\t\t\t\ttarget: dragEl,\n\t\t\t\t\tclientX: (touch || evt).clientX,\n\t\t\t\t\tclientY: (touch || evt).clientY\n\t\t\t\t};\n\n\t\t\t\tthis._lastX = (touch || evt).clientX;\n\t\t\t\tthis._lastY = (touch || evt).clientY;\n\n\t\t\t\tdragEl.style['will-change'] = 'all';\n\t\t\t\t// undo animation if needed\n\t\t\t\tdragEl.style.transition = '';\n\t\t\t\tdragEl.style.transform = '';\n\n\t\t\t\tdragStartFn = function () {\n\t\t\t\t\t// Delayed drag has been triggered\n\t\t\t\t\t// we can re-enable the events: touchmove/mousemove\n\t\t\t\t\t_this._disableDelayedDragEvents();\n\n\t\t\t\t\tif (!FireFox && _this.nativeDraggable) {\n\t\t\t\t\t\tdragEl.draggable = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Bind the events: dragstart/dragend\n\t\t\t\t\t_this._triggerDragStart(evt, touch);\n\n\t\t\t\t\t// Drag start event\n\t\t\t\t\t_dispatchEvent(_this, rootEl, 'choose', dragEl, rootEl, rootEl, oldIndex);\n\n\t\t\t\t\t// Chosen item\n\t\t\t\t\t_toggleClass(dragEl, options.chosenClass, true);\n\t\t\t\t};\n\n\t\t\t\t// Disable \"draggable\"\n\t\t\t\toptions.ignore.split(',').forEach(function (criteria) {\n\t\t\t\t\t_find(dragEl, criteria.trim(), _disableDraggable);\n\t\t\t\t});\n\n\t\t\t\tif (options.supportPointer) {\n\t\t\t\t\t_on(ownerDocument, 'pointerup', _this._onDrop);\n\t\t\t\t} else {\n\t\t\t\t\t_on(ownerDocument, 'mouseup', _this._onDrop);\n\t\t\t\t\t_on(ownerDocument, 'touchend', _this._onDrop);\n\t\t\t\t\t_on(ownerDocument, 'touchcancel', _this._onDrop);\n\t\t\t\t}\n\n\t\t\t\t// Make dragEl draggable (must be before delay for FireFox)\n\t\t\t\tif (FireFox && this.nativeDraggable) {\n\t\t\t\t\tthis.options.touchStartThreshold = 4;\n\t\t\t\t\tdragEl.draggable = true;\n\t\t\t\t}\n\n\t\t\t\t// Delay is impossible for native DnD in Edge or IE\n\t\t\t\tif (options.delay && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n\t\t\t\t\t// If the user moves the pointer or let go the click or touch\n\t\t\t\t\t// before the delay has been reached:\n\t\t\t\t\t// disable the delayed drag\n\t\t\t\t\t_on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n\t\t\t\t\t_on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n\t\t\t\t\t_on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n\t\t\t\t\t_on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n\t\t\t\t\t_on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n\t\t\t\t\toptions.supportPointer && _on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n\n\t\t\t\t\t_this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n\t\t\t\t} else {\n\t\t\t\t\tdragStartFn();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/e) {\n\t\t\tvar touch = e.touches ? e.touches[0] : e;\n\t\t\tif (max(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY))\n\t\t\t\t\t>= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))\n\t\t\t) {\n\t\t\t\tthis._disableDelayedDrag();\n\t\t\t}\n\t\t},\n\n\t\t_disableDelayedDrag: function () {\n\t\t\tdragEl && _disableDraggable(dragEl);\n\t\t\tclearTimeout(this._dragStartTimer);\n\n\t\t\tthis._disableDelayedDragEvents();\n\t\t},\n\n\t\t_disableDelayedDragEvents: function () {\n\t\t\tvar ownerDocument = this.el.ownerDocument;\n\t\t\t_off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n\t\t\t_off(ownerDocument, 'touchend', this._disableDelayedDrag);\n\t\t\t_off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n\t\t\t_off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n\t\t\t_off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n\t\t\t_off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n\t\t},\n\n\t\t_triggerDragStart: function (/** Event */evt, /** Touch */touch) {\n\t\t\ttouch = touch || (evt.pointerType == 'touch' ? evt : null);\n\n\t\t\tif (!this.nativeDraggable || touch) {\n\t\t\t\tif (this.options.supportPointer) {\n\t\t\t\t\t_on(document, 'pointermove', this._onTouchMove);\n\t\t\t\t} else if (touch) {\n\t\t\t\t\t_on(document, 'touchmove', this._onTouchMove);\n\t\t\t\t} else {\n\t\t\t\t\t_on(document, 'mousemove', this._onTouchMove);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t_on(dragEl, 'dragend', this);\n\t\t\t\t_on(rootEl, 'dragstart', this._onDragStart);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tif (document.selection) {\n\t\t\t\t\t// Timeout neccessary for IE9\n\t\t\t\t\t_nextTick(function () {\n\t\t\t\t\t\tdocument.selection.empty();\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t}\n\t\t},\n\n\t\t_dragStarted: function (fallback, evt) {\n\t\t\tawaitingDragStarted = false;\n\t\t\tif (rootEl && dragEl) {\n\t\t\t\tif (this.nativeDraggable) {\n\t\t\t\t\t_on(document, 'dragover', this._handleAutoScroll);\n\t\t\t\t\t_on(document, 'dragover', _checkAlignment);\n\t\t\t\t}\n\t\t\t\tvar options = this.options;\n\n\t\t\t\t// Apply effect\n\t\t\t\t!fallback && _toggleClass(dragEl, options.dragClass, false);\n\t\t\t\t_toggleClass(dragEl, options.ghostClass, true);\n\n\t\t\t\t// In case dragging an animated element\n\t\t\t\t_css(dragEl, 'transform', '');\n\n\t\t\t\tSortable.active = this;\n\n\t\t\t\tfallback && this._appendGhost();\n\n\t\t\t\t// Drag start event\n\t\t\t\t_dispatchEvent(this, rootEl, 'start', dragEl, rootEl, rootEl, oldIndex, undefined, evt);\n\t\t\t} else {\n\t\t\t\tthis._nulling();\n\t\t\t}\n\t\t},\n\n\t\t_emulateDragOver: function (forAutoScroll) {\n\t\t\tif (touchEvt) {\n\t\t\t\tif (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY && !forAutoScroll) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._lastX = touchEvt.clientX;\n\t\t\t\tthis._lastY = touchEvt.clientY;\n\n\t\t\t\t_hideGhostForTarget();\n\n\t\t\t\tvar target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n\t\t\t\tvar parent = target;\n\n\t\t\t\twhile (target && target.shadowRoot) {\n\t\t\t\t\ttarget = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n\t\t\t\t\tparent = target;\n\t\t\t\t}\n\n\t\t\t\tif (parent) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (parent[expando]) {\n\t\t\t\t\t\t\tvar inserted;\n\n\t\t\t\t\t\t\tinserted = parent[expando]._onDragOver({\n\t\t\t\t\t\t\t\tclientX: touchEvt.clientX,\n\t\t\t\t\t\t\t\tclientY: touchEvt.clientY,\n\t\t\t\t\t\t\t\ttarget: target,\n\t\t\t\t\t\t\t\trootEl: parent\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (inserted && !this.options.dragoverBubble) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttarget = parent; // store last element\n\t\t\t\t\t}\n\t\t\t\t\t/* jshint boss:true */\n\t\t\t\t\twhile (parent = parent.parentNode);\n\t\t\t\t}\n\t\t\t\tdragEl.parentNode[expando]._computeIsAligned(touchEvt);\n\n\t\t\t\t_unhideGhostForTarget();\n\t\t\t}\n\t\t},\n\n\n\t\t_onTouchMove: function (/**TouchEvent*/evt, forAutoScroll) {\n\t\t\tif (tapEvt) {\n\t\t\t\tvar\toptions = this.options,\n\t\t\t\t\tfallbackTolerance = options.fallbackTolerance,\n\t\t\t\t\tfallbackOffset = options.fallbackOffset,\n\t\t\t\t\ttouch = evt.touches ? evt.touches[0] : evt,\n\t\t\t\t\tmatrix = ghostEl && _matrix(ghostEl),\n\t\t\t\t\tscaleX = ghostEl && matrix && matrix.a,\n\t\t\t\t\tscaleY = ghostEl && matrix && matrix.d,\n\t\t\t\t\trelativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && _getRelativeScrollOffset(ghostRelativeParent),\n\t\t\t\t\tdx = ((touch.clientX - tapEvt.clientX)\n\t\t\t\t\t\t\t+ fallbackOffset.x) / (scaleX || 1)\n\t\t\t\t\t\t\t+ (relativeScrollOffset ? (relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0]) : 0) / (scaleX || 1),\n\t\t\t\t\tdy = ((touch.clientY - tapEvt.clientY)\n\t\t\t\t\t\t\t+ fallbackOffset.y) / (scaleY || 1)\n\t\t\t\t\t\t\t+ (relativeScrollOffset ? (relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1]) : 0) / (scaleY || 1),\n\t\t\t\t\ttranslate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)';\n\n\t\t\t\t// only set the status to dragging, when we are actually dragging\n\t\t\t\tif (!Sortable.active && !awaitingDragStarted) {\n\t\t\t\t\tif (fallbackTolerance &&\n\t\t\t\t\t\tmin(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY)) < fallbackTolerance\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis._onDragStart(evt, true);\n\t\t\t\t}\n\n\t\t\t\t!forAutoScroll && this._handleAutoScroll(touch, true);\n\n\t\t\t\tmoved = true;\n\t\t\t\ttouchEvt = touch;\n\n\t\t\t\t_css(ghostEl, 'webkitTransform', translate3d);\n\t\t\t\t_css(ghostEl, 'mozTransform', translate3d);\n\t\t\t\t_css(ghostEl, 'msTransform', translate3d);\n\t\t\t\t_css(ghostEl, 'transform', translate3d);\n\n\t\t\t\tevt.cancelable && evt.preventDefault();\n\t\t\t}\n\t\t},\n\n\t\t_appendGhost: function () {\n\t\t\t// Bug if using scale(): https://stackoverflow.com/questions/2637058\n\t\t\t// Not being adjusted for\n\t\t\tif (!ghostEl) {\n\t\t\t\tvar container = this.options.fallbackOnBody ? document.body : rootEl,\n\t\t\t\t\trect = _getRect(dragEl, true, container, !PositionGhostAbsolutely),\n\t\t\t\t\tcss = _css(dragEl),\n\t\t\t\t\toptions = this.options;\n\n\t\t\t\t// Position absolutely\n\t\t\t\tif (PositionGhostAbsolutely) {\n\t\t\t\t\t// Get relatively positioned parent\n\t\t\t\t\tghostRelativeParent = container;\n\n\t\t\t\t\twhile (\n\t\t\t\t\t\t_css(ghostRelativeParent, 'position') === 'static' &&\n\t\t\t\t\t\t_css(ghostRelativeParent, 'transform') === 'none' &&\n\t\t\t\t\t\tghostRelativeParent !== document\n\t\t\t\t\t) {\n\t\t\t\t\t\tghostRelativeParent = ghostRelativeParent.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ghostRelativeParent !== document) {\n\t\t\t\t\t\tvar ghostRelativeParentRect = _getRect(ghostRelativeParent, true);\n\n\t\t\t\t\t\trect.top -= ghostRelativeParentRect.top;\n\t\t\t\t\t\trect.left -= ghostRelativeParentRect.left;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n\t\t\t\t\t\tif (ghostRelativeParent === document) ghostRelativeParent = _getWindowScrollingElement();\n\n\t\t\t\t\t\trect.top += ghostRelativeParent.scrollTop;\n\t\t\t\t\t\trect.left += ghostRelativeParent.scrollLeft;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tghostRelativeParent = _getWindowScrollingElement();\n\t\t\t\t\t}\n\t\t\t\t\tghostRelativeParentInitialScroll = _getRelativeScrollOffset(ghostRelativeParent);\n\t\t\t\t}\n\n\n\t\t\t\tghostEl = dragEl.cloneNode(true);\n\n\t\t\t\t_toggleClass(ghostEl, options.ghostClass, false);\n\t\t\t\t_toggleClass(ghostEl, options.fallbackClass, true);\n\t\t\t\t_toggleClass(ghostEl, options.dragClass, true);\n\n\t\t\t\t_css(ghostEl, 'box-sizing', 'border-box');\n\t\t\t\t_css(ghostEl, 'margin', 0);\n\t\t\t\t_css(ghostEl, 'top', rect.top);\n\t\t\t\t_css(ghostEl, 'left', rect.left);\n\t\t\t\t_css(ghostEl, 'width', rect.width);\n\t\t\t\t_css(ghostEl, 'height', rect.height);\n\t\t\t\t_css(ghostEl, 'opacity', '0.8');\n\t\t\t\t_css(ghostEl, 'position', (PositionGhostAbsolutely ? 'absolute' : 'fixed'));\n\t\t\t\t_css(ghostEl, 'zIndex', '100000');\n\t\t\t\t_css(ghostEl, 'pointerEvents', 'none');\n\n\t\t\t\tcontainer.appendChild(ghostEl);\n\t\t\t}\n\t\t},\n\n\t\t_onDragStart: function (/**Event*/evt, /**boolean*/fallback) {\n\t\t\tvar _this = this;\n\t\t\tvar dataTransfer = evt.dataTransfer;\n\t\t\tvar options = _this.options;\n\n\t\t\t// Setup clone\n\t\t\tcloneEl = _clone(dragEl);\n\n\t\t\tcloneEl.draggable = false;\n\t\t\tcloneEl.style['will-change'] = '';\n\n\t\t\tthis._hideClone();\n\n\t\t\t_toggleClass(cloneEl, _this.options.chosenClass, false);\n\n\n\t\t\t// #1143: IFrame support workaround\n\t\t\t_this._cloneId = _nextTick(function () {\n\t\t\t\tif (!_this.options.removeCloneOnHide) {\n\t\t\t\t\trootEl.insertBefore(cloneEl, dragEl);\n\t\t\t\t}\n\t\t\t\t_dispatchEvent(_this, rootEl, 'clone', dragEl);\n\t\t\t});\n\n\n\t\t\t!fallback && _toggleClass(dragEl, options.dragClass, true);\n\n\t\t\t// Set proper drop events\n\t\t\tif (fallback) {\n\t\t\t\tignoreNextClick = true;\n\t\t\t\t_this._loopId = setInterval(_this._emulateDragOver, 50);\n\t\t\t} else {\n\t\t\t\t// Undo what was set in _prepareDragStart before drag started\n\t\t\t\t_off(document, 'mouseup', _this._onDrop);\n\t\t\t\t_off(document, 'touchend', _this._onDrop);\n\t\t\t\t_off(document, 'touchcancel', _this._onDrop);\n\n\t\t\t\tif (dataTransfer) {\n\t\t\t\t\tdataTransfer.effectAllowed = 'move';\n\t\t\t\t\toptions.setData && options.setData.call(_this, dataTransfer, dragEl);\n\t\t\t\t}\n\n\t\t\t\t_on(document, 'drop', _this);\n\n\t\t\t\t// #1276 fix:\n\t\t\t\t_css(dragEl, 'transform', 'translateZ(0)');\n\t\t\t}\n\n\t\t\tawaitingDragStarted = true;\n\n\t\t\t_this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n\t\t\t_on(document, 'selectstart', _this);\n\t\t\tif (Safari) {\n\t\t\t\t_css(document.body, 'user-select', 'none');\n\t\t\t}\n\t\t},\n\n\n\t\t// Returns true - if no further action is needed (either inserted or another condition)\n\t\t_onDragOver: function (/**Event*/evt) {\n\t\t\tvar el = this.el,\n\t\t\t\ttarget = evt.target,\n\t\t\t\tdragRect,\n\t\t\t\ttargetRect,\n\t\t\t\trevert,\n\t\t\t\toptions = this.options,\n\t\t\t\tgroup = options.group,\n\t\t\t\tactiveSortable = Sortable.active,\n\t\t\t\tisOwner = (activeGroup === group),\n\t\t\t\tcanSort = options.sort,\n\t\t\t\t_this = this;\n\n\t\t\tif (_silent) return;\n\n\t\t\t// IE event order fix\n\t\t\tif (IE11OrLess && !evt.rootEl && !evt.artificialBubble && !_isTrueParentSortable(el, target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return invocation when dragEl is inserted (or completed)\n\t\t\tfunction completed(insertion) {\n\t\t\t\tif (insertion) {\n\t\t\t\t\tif (isOwner) {\n\t\t\t\t\t\tactiveSortable._hideClone();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tactiveSortable._showClone(_this);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (activeSortable) {\n\t\t\t\t\t\t// Set ghost class to new sortable's ghost class\n\t\t\t\t\t\t_toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n\t\t\t\t\t\t_toggleClass(dragEl, options.ghostClass, true);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (putSortable !== _this && _this !== Sortable.active) {\n\t\t\t\t\t\tputSortable = _this;\n\t\t\t\t\t} else if (_this === Sortable.active) {\n\t\t\t\t\t\tputSortable = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Animation\n\t\t\t\t\tdragRect && _this._animate(dragRect, dragEl);\n\t\t\t\t\ttarget && targetRect && _this._animate(targetRect, target);\n\t\t\t\t}\n\n\n\t\t\t\t// Null lastTarget if it is not inside a previously swapped element\n\t\t\t\tif ((target === dragEl && !dragEl.animated) || (target === el && !target.animated)) {\n\t\t\t\t\tlastTarget = null;\n\t\t\t\t}\n\t\t\t\t// no bubbling and not fallback\n\t\t\t\tif (!options.dragoverBubble && !evt.rootEl && target !== document) {\n\t\t\t\t\t_this._handleAutoScroll(evt);\n\t\t\t\t\tdragEl.parentNode[expando]._computeIsAligned(evt);\n\t\t\t\t}\n\n\t\t\t\t!options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Call when dragEl has been inserted\n\t\t\tfunction changed() {\n\t\t\t\t_dispatchEvent(_this, rootEl, 'change', target, el, rootEl, oldIndex, _index(dragEl, options.draggable), evt);\n\t\t\t}\n\n\n\t\t\tif (evt.preventDefault !== void 0) {\n\t\t\t\tevt.cancelable && evt.preventDefault();\n\t\t\t}\n\n\n\t\t\tmoved = true;\n\n\t\t\ttarget = _closest(target, options.draggable, el, true);\n\n\t\t\t// target is dragEl or target is animated\n\t\t\tif (!!_closest(evt.target, null, dragEl, true) || target.animated) {\n\t\t\t\treturn completed(false);\n\t\t\t}\n\n\t\t\tif (target !== dragEl) {\n\t\t\t\tignoreNextClick = false;\n\t\t\t}\n\n\t\t\tif (activeSortable && !options.disabled &&\n\t\t\t\t(isOwner\n\t\t\t\t\t? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n\t\t\t\t\t: (\n\t\t\t\t\t\tputSortable === this ||\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t(this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) &&\n\t\t\t\t\t\t\tgroup.checkPut(this, activeSortable, dragEl, evt)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tvar axis = this._getDirection(evt, target);\n\n\t\t\t\tdragRect = _getRect(dragEl);\n\n\t\t\t\tif (revert) {\n\t\t\t\t\tthis._hideClone();\n\t\t\t\t\tparentEl = rootEl; // actualization\n\n\t\t\t\t\tif (nextEl) {\n\t\t\t\t\t\trootEl.insertBefore(dragEl, nextEl);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trootEl.appendChild(dragEl);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn completed(true);\n\t\t\t\t}\n\n\t\t\t\tvar elLastChild = _lastChild(el);\n\n\t\t\t\tif (!elLastChild || _ghostIsLast(evt, axis, el) && !elLastChild.animated) {\n\t\t\t\t\t// assign target only if condition is true\n\t\t\t\t\tif (elLastChild && el === evt.target) {\n\t\t\t\t\t\ttarget = elLastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\ttargetRect = _getRect(target);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isOwner) {\n\t\t\t\t\t\tactiveSortable._hideClone();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tactiveSortable._showClone(this);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n\t\t\t\t\t\tel.appendChild(dragEl);\n\t\t\t\t\t\tparentEl = el; // actualization\n\t\t\t\t\t\trealDragElRect = null;\n\n\t\t\t\t\t\tchanged();\n\t\t\t\t\t\treturn completed(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (target && target !== dragEl && target.parentNode === el) {\n\t\t\t\t\tvar direction = 0,\n\t\t\t\t\t\ttargetBeforeFirstSwap,\n\t\t\t\t\t\taligned = target.sortableMouseAligned,\n\t\t\t\t\t\tdifferentLevel = dragEl.parentNode !== el,\n\t\t\t\t\t\tside1 = axis === 'vertical' ? 'top' : 'left',\n\t\t\t\t\t\tscrolledPastTop = _isScrolledPast(target, 'top') || _isScrolledPast(dragEl, 'top'),\n\t\t\t\t\t\tscrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n\n\t\t\t\t\tif (lastTarget !== target) {\n\t\t\t\t\t\tlastMode = null;\n\t\t\t\t\t\ttargetBeforeFirstSwap = _getRect(target)[side1];\n\t\t\t\t\t\tpastFirstInvertThresh = false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reference: https://www.lucidchart.com/documents/view/10fa0e93-e362-4126-aca2-b709ee56bd8b/0\n\t\t\t\t\tif (\n\t\t\t\t\t\t_isElInRowColumn(dragEl, target, axis) && aligned ||\n\t\t\t\t\t\tdifferentLevel ||\n\t\t\t\t\t\tscrolledPastTop ||\n\t\t\t\t\t\toptions.invertSwap ||\n\t\t\t\t\t\tlastMode === 'insert' ||\n\t\t\t\t\t\t// Needed, in the case that we are inside target and inserted because not aligned... aligned will stay false while inside\n\t\t\t\t\t\t// and lastMode will change to 'insert', but we must swap\n\t\t\t\t\t\tlastMode === 'swap'\n\t\t\t\t\t) {\n\t\t\t\t\t\t// New target that we will be inside\n\t\t\t\t\t\tif (lastMode !== 'swap') {\n\t\t\t\t\t\t\tisCircumstantialInvert = options.invertSwap || differentLevel;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdirection = _getSwapDirection(evt, target, axis,\n\t\t\t\t\t\t\toptions.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold,\n\t\t\t\t\t\t\tisCircumstantialInvert,\n\t\t\t\t\t\t\tlastTarget === target);\n\t\t\t\t\t\tlastMode = 'swap';\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Insert at position\n\t\t\t\t\t\tdirection = _getInsertDirection(target);\n\t\t\t\t\t\tlastMode = 'insert';\n\t\t\t\t\t}\n\t\t\t\t\tif (direction === 0) return completed(false);\n\n\t\t\t\t\trealDragElRect = null;\n\t\t\t\t\tlastTarget = target;\n\n\t\t\t\t\tlastDirection = direction;\n\n\t\t\t\t\ttargetRect = _getRect(target);\n\n\t\t\t\t\tvar nextSibling = target.nextElementSibling,\n\t\t\t\t\t\tafter = false;\n\n\t\t\t\t\tafter = direction === 1;\n\n\t\t\t\t\tvar moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n\t\t\t\t\tif (moveVector !== false) {\n\t\t\t\t\t\tif (moveVector === 1 || moveVector === -1) {\n\t\t\t\t\t\t\tafter = (moveVector === 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_silent = true;\n\t\t\t\t\t\tsetTimeout(_unsilent, 30);\n\n\t\t\t\t\t\tif (isOwner) {\n\t\t\t\t\t\t\tactiveSortable._hideClone();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tactiveSortable._showClone(this);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (after && !nextSibling) {\n\t\t\t\t\t\t\tel.appendChild(dragEl);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Undo chrome's scroll adjustment\n\t\t\t\t\t\tif (scrolledPastTop) {\n\t\t\t\t\t\t\t_scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparentEl = dragEl.parentNode; // actualization\n\n\t\t\t\t\t\t// must be done before animation\n\t\t\t\t\t\tif (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n\t\t\t\t\t\t\ttargetMoveDistance = abs(targetBeforeFirstSwap - _getRect(target)[side1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchanged();\n\n\t\t\t\t\t\treturn completed(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (el.contains(dragEl)) {\n\t\t\t\t\treturn completed(false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (IE11OrLess && !evt.rootEl) {\n\t\t\t\t_artificalBubble(el, evt, '_onDragOver');\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\t_animate: function (prevRect, target) {\n\t\t\tvar ms = this.options.animation;\n\n\t\t\tif (ms) {\n\t\t\t\tvar currentRect = _getRect(target);\n\n\t\t\t\tif (target === dragEl) {\n\t\t\t\t\trealDragElRect = currentRect;\n\t\t\t\t}\n\n\t\t\t\tif (prevRect.nodeType === 1) {\n\t\t\t\t\tprevRect = _getRect(prevRect);\n\t\t\t\t}\n\n\t\t\t\t// Check if actually moving position\n\t\t\t\tif ((prevRect.left + prevRect.width / 2) !== (currentRect.left + currentRect.width / 2)\n\t\t\t\t\t|| (prevRect.top + prevRect.height / 2) !== (currentRect.top + currentRect.height / 2)\n\t\t\t\t) {\n\t\t\t\t\tvar matrix = _matrix(this.el),\n\t\t\t\t\t\tscaleX = matrix && matrix.a,\n\t\t\t\t\t\tscaleY = matrix && matrix.d;\n\n\t\t\t\t\t_css(target, 'transition', 'none');\n\t\t\t\t\t_css(target, 'transform', 'translate3d('\n\t\t\t\t\t\t+ (prevRect.left - currentRect.left) / (scaleX ? scaleX : 1) + 'px,'\n\t\t\t\t\t\t+ (prevRect.top - currentRect.top) / (scaleY ? scaleY : 1) + 'px,0)'\n\t\t\t\t\t);\n\n\t\t\t\t\tforRepaintDummy = target.offsetWidth; // repaint\n\t\t\t\t\t_css(target, 'transition', 'transform ' + ms + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n\t\t\t\t\t_css(target, 'transform', 'translate3d(0,0,0)');\n\t\t\t\t}\n\n\t\t\t\t(typeof target.animated === 'number') && clearTimeout(target.animated);\n\t\t\t\ttarget.animated = setTimeout(function () {\n\t\t\t\t\t_css(target, 'transition', '');\n\t\t\t\t\t_css(target, 'transform', '');\n\t\t\t\t\ttarget.animated = false;\n\t\t\t\t}, ms);\n\t\t\t}\n\t\t},\n\n\t\t_offUpEvents: function () {\n\t\t\tvar ownerDocument = this.el.ownerDocument;\n\n\t\t\t_off(document, 'touchmove', this._onTouchMove);\n\t\t\t_off(document, 'pointermove', this._onTouchMove);\n\t\t\t_off(ownerDocument, 'mouseup', this._onDrop);\n\t\t\t_off(ownerDocument, 'touchend', this._onDrop);\n\t\t\t_off(ownerDocument, 'pointerup', this._onDrop);\n\t\t\t_off(ownerDocument, 'touchcancel', this._onDrop);\n\t\t\t_off(document, 'selectstart', this);\n\t\t},\n\n\t\t_onDrop: function (/**Event*/evt) {\n\t\t\tvar el = this.el,\n\t\t\t\toptions = this.options;\n\t\t\tawaitingDragStarted = false;\n\t\t\tscrolling = false;\n\t\t\tisCircumstantialInvert = false;\n\t\t\tpastFirstInvertThresh = false;\n\n\t\t\tclearInterval(this._loopId);\n\n\t\t\tclearInterval(pointerElemChangedInterval);\n\t\t\t_clearAutoScrolls();\n\t\t\t_cancelThrottle();\n\n\t\t\tclearTimeout(this._dragStartTimer);\n\n\t\t\t_cancelNextTick(this._cloneId);\n\t\t\t_cancelNextTick(this._dragStartId);\n\n\t\t\t// Unbind events\n\t\t\t_off(document, 'mousemove', this._onTouchMove);\n\n\n\t\t\tif (this.nativeDraggable) {\n\t\t\t\t_off(document, 'drop', this);\n\t\t\t\t_off(el, 'dragstart', this._onDragStart);\n\t\t\t\t_off(document, 'dragover', this._handleAutoScroll);\n\t\t\t\t_off(document, 'dragover', _checkAlignment);\n\t\t\t}\n\n\t\t\tif (Safari) {\n\t\t\t\t_css(document.body, 'user-select', '');\n\t\t\t}\n\n\t\t\tthis._offUpEvents();\n\n\t\t\tif (evt) {\n\t\t\t\tif (moved) {\n\t\t\t\t\tevt.cancelable && evt.preventDefault();\n\t\t\t\t\t!options.dropBubble && evt.stopPropagation();\n\t\t\t\t}\n\n\t\t\t\tghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n\t\t\t\tif (rootEl === parentEl || (putSortable && putSortable.lastPutMode !== 'clone')) {\n\t\t\t\t\t// Remove clone\n\t\t\t\t\tcloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n\t\t\t\t}\n\n\t\t\t\tif (dragEl) {\n\t\t\t\t\tif (this.nativeDraggable) {\n\t\t\t\t\t\t_off(dragEl, 'dragend', this);\n\t\t\t\t\t}\n\n\t\t\t\t\t_disableDraggable(dragEl);\n\t\t\t\t\tdragEl.style['will-change'] = '';\n\n\t\t\t\t\t// Remove class's\n\t\t\t\t\t_toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n\t\t\t\t\t_toggleClass(dragEl, this.options.chosenClass, false);\n\n\t\t\t\t\t// Drag stop event\n\t\t\t\t\t_dispatchEvent(this, rootEl, 'unchoose', dragEl, parentEl, rootEl, oldIndex, null, evt);\n\n\t\t\t\t\tif (rootEl !== parentEl) {\n\t\t\t\t\t\tnewIndex = _index(dragEl, options.draggable);\n\n\t\t\t\t\t\tif (newIndex >= 0) {\n\t\t\t\t\t\t\t// Add event\n\t\t\t\t\t\t\t_dispatchEvent(null, parentEl, 'add', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\n\t\t\t\t\t\t\t// Remove event\n\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'remove', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\n\t\t\t\t\t\t\t// drag from one list and drop into another\n\t\t\t\t\t\t\t_dispatchEvent(null, parentEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tputSortable && putSortable.save();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (dragEl.nextSibling !== nextEl) {\n\t\t\t\t\t\t\t// Get the index of the dragged element within its parent\n\t\t\t\t\t\t\tnewIndex = _index(dragEl, options.draggable);\n\n\t\t\t\t\t\t\tif (newIndex >= 0) {\n\t\t\t\t\t\t\t\t// drag & drop within the same list\n\t\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'update', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\t\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\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\tif (Sortable.active) {\n\t\t\t\t\t\t/* jshint eqnull:true */\n\t\t\t\t\t\tif (newIndex == null || newIndex === -1) {\n\t\t\t\t\t\t\tnewIndex = oldIndex;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'end', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\n\t\t\t\t\t\t// Save sorting\n\t\t\t\t\t\tthis.save();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tthis._nulling();\n\t\t},\n\n\t\t_nulling: function() {\n\t\t\trootEl =\n\t\t\tdragEl =\n\t\t\tparentEl =\n\t\t\tghostEl =\n\t\t\tnextEl =\n\t\t\tcloneEl =\n\t\t\tlastDownEl =\n\n\t\t\tscrollEl =\n\t\t\tscrollParentEl =\n\t\t\tautoScrolls.length =\n\n\t\t\tpointerElemChangedInterval =\n\t\t\tlastPointerElemX =\n\t\t\tlastPointerElemY =\n\n\t\t\ttapEvt =\n\t\t\ttouchEvt =\n\n\t\t\tmoved =\n\t\t\tnewIndex =\n\t\t\toldIndex =\n\n\t\t\tlastTarget =\n\t\t\tlastDirection =\n\n\t\t\tforRepaintDummy =\n\t\t\trealDragElRect =\n\n\t\t\tputSortable =\n\t\t\tactiveGroup =\n\t\t\tSortable.active = null;\n\n\t\t\tsavedInputChecked.forEach(function (el) {\n\t\t\t\tel.checked = true;\n\t\t\t});\n\n\t\t\tsavedInputChecked.length = 0;\n\t\t},\n\n\t\thandleEvent: function (/**Event*/evt) {\n\t\t\tswitch (evt.type) {\n\t\t\t\tcase 'drop':\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tthis._onDrop(evt);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'dragenter':\n\t\t\t\tcase 'dragover':\n\t\t\t\t\tif (dragEl) {\n\t\t\t\t\t\tthis._onDragOver(evt);\n\t\t\t\t\t\t_globalDragOver(evt);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'selectstart':\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\n\t\t/**\n\t\t * Serializes the item into an array of string.\n\t\t * @returns {String[]}\n\t\t */\n\t\ttoArray: function () {\n\t\t\tvar order = [],\n\t\t\t\tel,\n\t\t\t\tchildren = this.el.children,\n\t\t\t\ti = 0,\n\t\t\t\tn = children.length,\n\t\t\t\toptions = this.options;\n\n\t\t\tfor (; i < n; i++) {\n\t\t\t\tel = children[i];\n\t\t\t\tif (_closest(el, options.draggable, this.el, false)) {\n\t\t\t\t\torder.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn order;\n\t\t},\n\n\n\t\t/**\n\t\t * Sorts the elements according to the array.\n\t\t * @param {String[]} order order of the items\n\t\t */\n\t\tsort: function (order) {\n\t\t\tvar items = {}, rootEl = this.el;\n\n\t\t\tthis.toArray().forEach(function (id, i) {\n\t\t\t\tvar el = rootEl.children[i];\n\n\t\t\t\tif (_closest(el, this.options.draggable, rootEl, false)) {\n\t\t\t\t\titems[id] = el;\n\t\t\t\t}\n\t\t\t}, this);\n\n\t\t\torder.forEach(function (id) {\n\t\t\t\tif (items[id]) {\n\t\t\t\t\trootEl.removeChild(items[id]);\n\t\t\t\t\trootEl.appendChild(items[id]);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\n\t\t/**\n\t\t * Save the current sorting\n\t\t */\n\t\tsave: function () {\n\t\t\tvar store = this.options.store;\n\t\t\tstore && store.set && store.set(this);\n\t\t},\n\n\n\t\t/**\n\t\t * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n\t\t * @param {HTMLElement} el\n\t\t * @param {String} [selector] default: `options.draggable`\n\t\t * @returns {HTMLElement|null}\n\t\t */\n\t\tclosest: function (el, selector) {\n\t\t\treturn _closest(el, selector || this.options.draggable, this.el, false);\n\t\t},\n\n\n\t\t/**\n\t\t * Set/get option\n\t\t * @param {string} name\n\t\t * @param {*} [value]\n\t\t * @returns {*}\n\t\t */\n\t\toption: function (name, value) {\n\t\t\tvar options = this.options;\n\n\t\t\tif (value === void 0) {\n\t\t\t\treturn options[name];\n\t\t\t} else {\n\t\t\t\toptions[name] = value;\n\n\t\t\t\tif (name === 'group') {\n\t\t\t\t\t_prepareGroup(options);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\n\t\t/**\n\t\t * Destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tvar el = this.el;\n\n\t\t\tel[expando] = null;\n\n\t\t\t_off(el, 'mousedown', this._onTapStart);\n\t\t\t_off(el, 'touchstart', this._onTapStart);\n\t\t\t_off(el, 'pointerdown', this._onTapStart);\n\n\t\t\tif (this.nativeDraggable) {\n\t\t\t\t_off(el, 'dragover', this);\n\t\t\t\t_off(el, 'dragenter', this);\n\t\t\t}\n\t\t\t// Remove draggable attributes\n\t\t\tArray.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n\t\t\t\tel.removeAttribute('draggable');\n\t\t\t});\n\n\t\t\tthis._onDrop();\n\n\t\t\tsortables.splice(sortables.indexOf(this.el), 1);\n\n\t\t\tthis.el = el = null;\n\t\t},\n\n\t\t_hideClone: function() {\n\t\t\tif (!cloneEl.cloneHidden) {\n\t\t\t\t_css(cloneEl, 'display', 'none');\n\t\t\t\tcloneEl.cloneHidden = true;\n\t\t\t\tif (cloneEl.parentNode && this.options.removeCloneOnHide) {\n\t\t\t\t\tcloneEl.parentNode.removeChild(cloneEl);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_showClone: function(putSortable) {\n\t\t\tif (putSortable.lastPutMode !== 'clone') {\n\t\t\t\tthis._hideClone();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (cloneEl.cloneHidden) {\n\t\t\t\t// show clone at dragEl or original position\n\t\t\t\tif (rootEl.contains(dragEl) && !this.options.group.revertClone) {\n\t\t\t\t\trootEl.insertBefore(cloneEl, dragEl);\n\t\t\t\t} else if (nextEl) {\n\t\t\t\t\trootEl.insertBefore(cloneEl, nextEl);\n\t\t\t\t} else {\n\t\t\t\t\trootEl.appendChild(cloneEl);\n\t\t\t\t}\n\n\t\t\t\tif (this.options.group.revertClone) {\n\t\t\t\t\tthis._animate(dragEl, cloneEl);\n\t\t\t\t}\n\t\t\t\t_css(cloneEl, 'display', '');\n\t\t\t\tcloneEl.cloneHidden = false;\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n\t\tif (el) {\n\t\t\tctx = ctx || document;\n\n\t\t\tdo {\n\t\t\t\tif (\n\t\t\t\t\tselector != null &&\n\t\t\t\t\t(\n\t\t\t\t\t\tselector[0] === '>' && el.parentNode === ctx && _matches(el, selector.substring(1)) ||\n\t\t\t\t\t\t_matches(el, selector)\n\t\t\t\t\t) ||\n\t\t\t\t\tincludeCTX && el === ctx\n\t\t\t\t) {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\n\t\t\t\tif (el === ctx) break;\n\t\t\t\t/* jshint boss:true */\n\t\t\t} while (el = _getParentOrHost(el));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\n\tfunction _getParentOrHost(el) {\n\t\treturn (el.host && el !== document && el.host.nodeType)\n\t\t\t? el.host\n\t\t\t: el.parentNode;\n\t}\n\n\n\tfunction _globalDragOver(/**Event*/evt) {\n\t\tif (evt.dataTransfer) {\n\t\t\tevt.dataTransfer.dropEffect = 'move';\n\t\t}\n\t\tevt.cancelable && evt.preventDefault();\n\t}\n\n\n\tfunction _on(el, event, fn) {\n\t\tel.addEventListener(event, fn, captureMode);\n\t}\n\n\n\tfunction _off(el, event, fn) {\n\t\tel.removeEventListener(event, fn, captureMode);\n\t}\n\n\n\tfunction _toggleClass(el, name, state) {\n\t\tif (el && name) {\n\t\t\tif (el.classList) {\n\t\t\t\tel.classList[state ? 'add' : 'remove'](name);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n\t\t\t\tel.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfunction _css(el, prop, val) {\n\t\tvar style = el && el.style;\n\n\t\tif (style) {\n\t\t\tif (val === void 0) {\n\t\t\t\tif (document.defaultView && document.defaultView.getComputedStyle) {\n\t\t\t\t\tval = document.defaultView.getComputedStyle(el, '');\n\t\t\t\t}\n\t\t\t\telse if (el.currentStyle) {\n\t\t\t\t\tval = el.currentStyle;\n\t\t\t\t}\n\n\t\t\t\treturn prop === void 0 ? val : val[prop];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!(prop in style) && prop.indexOf('webkit') === -1) {\n\t\t\t\t\tprop = '-webkit-' + prop;\n\t\t\t\t}\n\n\t\t\t\tstyle[prop] = val + (typeof val === 'string' ? '' : 'px');\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction _matrix(el) {\n\t\tvar appliedTransforms = '';\n\t\tdo {\n\t\t\tvar transform = _css(el, 'transform');\n\n\t\t\tif (transform && transform !== 'none') {\n\t\t\t\tappliedTransforms = transform + ' ' + appliedTransforms;\n\t\t\t}\n\t\t\t/* jshint boss:true */\n\t\t} while (el = el.parentNode);\n\n\t\tif (window.DOMMatrix) {\n\t\t\treturn new DOMMatrix(appliedTransforms);\n\t\t} else if (window.WebKitCSSMatrix) {\n\t\t\treturn new WebKitCSSMatrix(appliedTransforms);\n\t\t} else if (window.CSSMatrix) {\n\t\t\treturn new CSSMatrix(appliedTransforms);\n\t\t}\n\t}\n\n\n\tfunction _find(ctx, tagName, iterator) {\n\t\tif (ctx) {\n\t\t\tvar list = ctx.getElementsByTagName(tagName), i = 0, n = list.length;\n\n\t\t\tif (iterator) {\n\t\t\t\tfor (; i < n; i++) {\n\t\t\t\t\titerator(list[i], i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn list;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\n\n\tfunction _dispatchEvent(sortable, rootEl, name, targetEl, toEl, fromEl, startIndex, newIndex, originalEvt) {\n\t\tsortable = (sortable || rootEl[expando]);\n\t\tvar evt,\n\t\t\toptions = sortable.options,\n\t\t\tonName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n\t\t// Support for new CustomEvent feature\n\t\tif (window.CustomEvent && !IE11OrLess && !Edge) {\n\t\t\tevt = new CustomEvent(name, {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true\n\t\t\t});\n\t\t} else {\n\t\t\tevt = document.createEvent('Event');\n\t\t\tevt.initEvent(name, true, true);\n\t\t}\n\n\t\tevt.to = toEl || rootEl;\n\t\tevt.from = fromEl || rootEl;\n\t\tevt.item = targetEl || rootEl;\n\t\tevt.clone = cloneEl;\n\n\t\tevt.oldIndex = startIndex;\n\t\tevt.newIndex = newIndex;\n\n\t\tevt.originalEvent = originalEvt;\n\t\tevt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n\t\tif (rootEl) {\n\t\t\trootEl.dispatchEvent(evt);\n\t\t}\n\n\t\tif (options[onName]) {\n\t\t\toptions[onName].call(sortable, evt);\n\t\t}\n\t}\n\n\n\tfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvt, willInsertAfter) {\n\t\tvar evt,\n\t\t\tsortable = fromEl[expando],\n\t\t\tonMoveFn = sortable.options.onMove,\n\t\t\tretVal;\n\t\t// Support for new CustomEvent feature\n\t\tif (window.CustomEvent && !IE11OrLess && !Edge) {\n\t\t\tevt = new CustomEvent('move', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true\n\t\t\t});\n\t\t} else {\n\t\t\tevt = document.createEvent('Event');\n\t\t\tevt.initEvent('move', true, true);\n\t\t}\n\n\t\tevt.to = toEl;\n\t\tevt.from = fromEl;\n\t\tevt.dragged = dragEl;\n\t\tevt.draggedRect = dragRect;\n\t\tevt.related = targetEl || toEl;\n\t\tevt.relatedRect = targetRect || _getRect(toEl);\n\t\tevt.willInsertAfter = willInsertAfter;\n\n\t\tevt.originalEvent = originalEvt;\n\n\t\tfromEl.dispatchEvent(evt);\n\n\t\tif (onMoveFn) {\n\t\t\tretVal = onMoveFn.call(sortable, evt, originalEvt);\n\t\t}\n\n\t\treturn retVal;\n\t}\n\n\tfunction _disableDraggable(el) {\n\t\tel.draggable = false;\n\t}\n\n\tfunction _unsilent() {\n\t\t_silent = false;\n\t}\n\n\t/**\n\t * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n\t * and non-draggable elements\n\t * @param {HTMLElement} el The parent element\n\t * @param {Number} childNum The index of the child\n\t * @param {Object} options Parent Sortable's options\n\t * @return {HTMLElement} The child at index childNum, or null if not found\n\t */\n\tfunction _getChild(el, childNum, options) {\n\t\tvar currentChild = 0,\n\t\t\ti = 0,\n\t\t\tchildren = el.children;\n\n\t\twhile (i < children.length) {\n\t\t\tif (\n\t\t\t\tchildren[i].style.display !== 'none' &&\n\t\t\t\tchildren[i] !== ghostEl &&\n\t\t\t\tchildren[i] !== dragEl &&\n\t\t\t\t_closest(children[i], options.draggable, el, false)\n\t\t\t) {\n\t\t\t\tif (currentChild === childNum) {\n\t\t\t\t\treturn children[i];\n\t\t\t\t}\n\t\t\t\tcurrentChild++;\n\t\t\t}\n\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n\t * @param {HTMLElement} el Parent element\n\t * @return {HTMLElement} The last child, ignoring ghostEl\n\t */\n\tfunction _lastChild(el) {\n\t\tvar last = el.lastElementChild;\n\n\t\twhile (last && (last === ghostEl || last.style.display === 'none')) {\n\t\t\tlast = last.previousElementSibling;\n\t\t}\n\n\t\treturn last || null;\n\t}\n\n\tfunction _ghostIsLast(evt, axis, el) {\n\t\tvar elRect = _getRect(_lastChild(el)),\n\t\t\tmouseOnAxis = axis === 'vertical' ? evt.clientY : evt.clientX,\n\t\t\tmouseOnOppAxis = axis === 'vertical' ? evt.clientX : evt.clientY,\n\t\t\ttargetS2 = axis === 'vertical' ? elRect.bottom : elRect.right,\n\t\t\ttargetS1Opp = axis === 'vertical' ? elRect.left : elRect.top,\n\t\t\ttargetS2Opp = axis === 'vertical' ? elRect.right : elRect.bottom,\n\t\t\tspacer = 10;\n\n\t\treturn (\n\t\t\taxis === 'vertical' ?\n\t\t\t\t(mouseOnOppAxis > targetS2Opp + spacer || mouseOnOppAxis <= targetS2Opp && mouseOnAxis > targetS2 && mouseOnOppAxis >= targetS1Opp) :\n\t\t\t\t(mouseOnAxis > targetS2 && mouseOnOppAxis > targetS1Opp || mouseOnAxis <= targetS2 && mouseOnOppAxis > targetS2Opp + spacer)\n\t\t);\n\t}\n\n\tfunction _getSwapDirection(evt, target, axis, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n\t\tvar targetRect = _getRect(target),\n\t\t\tmouseOnAxis = axis === 'vertical' ? evt.clientY : evt.clientX,\n\t\t\ttargetLength = axis === 'vertical' ? targetRect.height : targetRect.width,\n\t\t\ttargetS1 = axis === 'vertical' ? targetRect.top : targetRect.left,\n\t\t\ttargetS2 = axis === 'vertical' ? targetRect.bottom : targetRect.right,\n\t\t\tdragRect = _getRect(dragEl),\n\t\t\tinvert = false;\n\n\n\t\tif (!invertSwap) {\n\t\t\t// Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n\t\t\tif (isLastTarget && targetMoveDistance < targetLength * swapThreshold) { // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n\t\t\t\t// check if past first invert threshold on side opposite of lastDirection\n\t\t\t\tif (!pastFirstInvertThresh &&\n\t\t\t\t\t(lastDirection === 1 ?\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tmouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tmouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\t// past first invert threshold, do not restrict inverted threshold to dragEl shadow\n\t\t\t\t\tpastFirstInvertThresh = true;\n\t\t\t\t}\n\n\t\t\t\tif (!pastFirstInvertThresh) {\n\t\t\t\t\tvar dragS1 = axis === 'vertical' ? dragRect.top : dragRect.left,\n\t\t\t\t\t\tdragS2 = axis === 'vertical' ? dragRect.bottom : dragRect.right;\n\t\t\t\t\t// dragEl shadow (target move distance shadow)\n\t\t\t\t\tif (\n\t\t\t\t\t\tlastDirection === 1 ?\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tmouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tmouseOnAxis > targetS2 - targetMoveDistance\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn lastDirection * -1;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tinvert = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Regular\n\t\t\t\tif (\n\t\t\t\t\tmouseOnAxis > targetS1 + (targetLength * (1 - swapThreshold) / 2) &&\n\t\t\t\t\tmouseOnAxis < targetS2 - (targetLength * (1 - swapThreshold) / 2)\n\t\t\t\t) {\n\t\t\t\t\treturn _getInsertDirection(target);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinvert = invert || invertSwap;\n\n\t\tif (invert) {\n\t\t\t// Invert of regular\n\t\t\tif (\n\t\t\t\tmouseOnAxis < targetS1 + (targetLength * invertedSwapThreshold / 2) ||\n\t\t\t\tmouseOnAxis > targetS2 - (targetLength * invertedSwapThreshold / 2)\n\t\t\t)\n\t\t\t{\n\t\t\t\treturn ((mouseOnAxis > targetS1 + targetLength / 2) ? 1 : -1);\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\t/**\n\t * Gets the direction dragEl must be swapped relative to target in order to make it\n\t * seem that dragEl has been \"inserted\" into that element's position\n\t * @param {HTMLElement} target The target whose position dragEl is being inserted at\n\t * @return {Number} Direction dragEl must be swapped\n\t */\n\tfunction _getInsertDirection(target) {\n\t\tvar dragElIndex = _index(dragEl),\n\t\t\ttargetIndex = _index(target);\n\n\t\tif (dragElIndex < targetIndex) {\n\t\t\treturn 1;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\t}\n\n\n\t/**\n\t * Generate id\n\t * @param {HTMLElement} el\n\t * @returns {String}\n\t * @private\n\t */\n\tfunction _generateId(el) {\n\t\tvar str = el.tagName + el.className + el.src + el.href + el.textContent,\n\t\t\ti = str.length,\n\t\t\tsum = 0;\n\n\t\twhile (i--) {\n\t\t\tsum += str.charCodeAt(i);\n\t\t}\n\n\t\treturn sum.toString(36);\n\t}\n\n\t/**\n\t * Returns the index of an element within its parent for a selected set of\n\t * elements\n\t * @param {HTMLElement} el\n\t * @param {selector} selector\n\t * @return {number}\n\t */\n\tfunction _index(el, selector) {\n\t\tvar index = 0;\n\n\t\tif (!el || !el.parentNode) {\n\t\t\treturn -1;\n\t\t}\n\n\t\twhile (el && (el = el.previousElementSibling)) {\n\t\t\tif ((el.nodeName.toUpperCase() !== 'TEMPLATE') && el !== cloneEl) {\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t}\n\n\tfunction _matches(/**HTMLElement*/el, /**String*/selector) {\n\t\tif (el) {\n\t\t\ttry {\n\t\t\t\tif (el.matches) {\n\t\t\t\t\treturn el.matches(selector);\n\t\t\t\t} else if (el.msMatchesSelector) {\n\t\t\t\t\treturn el.msMatchesSelector(selector);\n\t\t\t\t} else if (el.webkitMatchesSelector) {\n\t\t\t\t\treturn el.webkitMatchesSelector(selector);\n\t\t\t\t}\n\t\t\t} catch(_) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tvar _throttleTimeout;\n\tfunction _throttle(callback, ms) {\n\t\treturn function () {\n\t\t\tif (!_throttleTimeout) {\n\t\t\t\tvar args = arguments,\n\t\t\t\t\t_this = this;\n\n\t\t\t\t_throttleTimeout = setTimeout(function () {\n\t\t\t\t\tif (args.length === 1) {\n\t\t\t\t\t\tcallback.call(_this, args[0]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback.apply(_this, args);\n\t\t\t\t\t}\n\n\t\t\t\t\t_throttleTimeout = void 0;\n\t\t\t\t}, ms);\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction _cancelThrottle() {\n\t\tclearTimeout(_throttleTimeout);\n\t\t_throttleTimeout = void 0;\n\t}\n\n\tfunction _extend(dst, src) {\n\t\tif (dst && src) {\n\t\t\tfor (var key in src) {\n\t\t\t\tif (src.hasOwnProperty(key)) {\n\t\t\t\t\tdst[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn dst;\n\t}\n\n\tfunction _clone(el) {\n\t\tif (Polymer && Polymer.dom) {\n\t\t\treturn Polymer.dom(el).cloneNode(true);\n\t\t}\n\t\telse if ($) {\n\t\t\treturn $(el).clone(true)[0];\n\t\t}\n\t\telse {\n\t\t\treturn el.cloneNode(true);\n\t\t}\n\t}\n\n\tfunction _saveInputCheckedState(root) {\n\t\tsavedInputChecked.length = 0;\n\n\t\tvar inputs = root.getElementsByTagName('input');\n\t\tvar idx = inputs.length;\n\n\t\twhile (idx--) {\n\t\t\tvar el = inputs[idx];\n\t\t\tel.checked && savedInputChecked.push(el);\n\t\t}\n\t}\n\n\tfunction _nextTick(fn) {\n\t\treturn setTimeout(fn, 0);\n\t}\n\n\tfunction _cancelNextTick(id) {\n\t\treturn clearTimeout(id);\n\t}\n\n\n\t/**\n\t * Returns the \"bounding client rect\" of given element\n\t * @param {HTMLElement} el The element whose boundingClientRect is wanted\n\t * @param {[HTMLElement]} container the parent the element will be placed in\n\t * @param {[Boolean]} adjustForTransform Whether the rect should compensate for parent's transform\n\t * @return {Object} The boundingClientRect of el\n\t */\n\tfunction _getRect(el, adjustForTransform, container, adjustForFixed) {\n\t\tif (!el.getBoundingClientRect && el !== win) return;\n\n\t\tvar elRect,\n\t\t\ttop,\n\t\t\tleft,\n\t\t\tbottom,\n\t\t\tright,\n\t\t\theight,\n\t\t\twidth;\n\n\t\tif (el !== win && el !== _getWindowScrollingElement()) {\n\t\t\telRect = el.getBoundingClientRect();\n\t\t\ttop = elRect.top;\n\t\t\tleft = elRect.left;\n\t\t\tbottom = elRect.bottom;\n\t\t\tright = elRect.right;\n\t\t\theight = elRect.height;\n\t\t\twidth = elRect.width;\n\t\t} else {\n\t\t\ttop = 0;\n\t\t\tleft = 0;\n\t\t\tbottom = window.innerHeight;\n\t\t\tright = window.innerWidth;\n\t\t\theight = window.innerHeight;\n\t\t\twidth = window.innerWidth;\n\t\t}\n\n\t\tif (adjustForFixed && el !== win) {\n\t\t\t// Adjust for translate()\n\t\t\tcontainer = container || el.parentNode;\n\n\t\t\t// solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n\t\t\t// Not needed on <= IE11\n\t\t\tif (!IE11OrLess) {\n\t\t\t\tdo {\n\t\t\t\t\tif (container && container.getBoundingClientRect && _css(container, 'transform') !== 'none') {\n\t\t\t\t\t\tvar containerRect = container.getBoundingClientRect();\n\n\t\t\t\t\t\t// Set relative to edges of padding box of container\n\t\t\t\t\t\ttop -= containerRect.top + parseInt(_css(container, 'border-top-width'));\n\t\t\t\t\t\tleft -= containerRect.left + parseInt(_css(container, 'border-left-width'));\n\t\t\t\t\t\tbottom = top + elRect.height;\n\t\t\t\t\t\tright = left + elRect.width;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t/* jshint boss:true */\n\t\t\t\t} while (container = container.parentNode);\n\t\t\t}\n\t\t}\n\n\t\tif (adjustForTransform && el !== win) {\n\t\t\t// Adjust for scale()\n\t\t\tvar matrix = _matrix(container || el),\n\t\t\t\tscaleX = matrix && matrix.a,\n\t\t\t\tscaleY = matrix && matrix.d;\n\n\t\t\tif (matrix) {\n\t\t\t\ttop /= scaleY;\n\t\t\t\tleft /= scaleX;\n\n\t\t\t\twidth /= scaleX;\n\t\t\t\theight /= scaleY;\n\n\t\t\t\tbottom = top + height;\n\t\t\t\tright = left + width;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: top,\n\t\t\tleft: left,\n\t\t\tbottom: bottom,\n\t\t\tright: right,\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\t}\n\n\n\t/**\n\t * Checks if a side of an element is scrolled past a side of it's parents\n\t * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n\t * @param {String} side Side of the element in question ('top', 'left', 'right', 'bottom')\n\t * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n\t */\n\tfunction _isScrolledPast(el, side) {\n\t\tvar parent = _getParentAutoScrollElement(el, true),\n\t\t\telSide = _getRect(el)[side];\n\n\t\t/* jshint boss:true */\n\t\twhile (parent) {\n\t\t\tvar parentSide = _getRect(parent)[side],\n\t\t\t\tvisible;\n\n\t\t\tif (side === 'top' || side === 'left') {\n\t\t\t\tvisible = elSide >= parentSide;\n\t\t\t} else {\n\t\t\t\tvisible = elSide <= parentSide;\n\t\t\t}\n\n\t\t\tif (!visible) return parent;\n\n\t\t\tif (parent === _getWindowScrollingElement()) break;\n\n\t\t\tparent = _getParentAutoScrollElement(parent, false);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n\t * The value is returned in real pixels.\n\t * @param {HTMLElement} el\n\t * @return {Array} Offsets in the format of [left, top]\n\t */\n\tfunction _getRelativeScrollOffset(el) {\n\t\tvar offsetLeft = 0,\n\t\t\toffsetTop = 0,\n\t\t\twinScroller = _getWindowScrollingElement();\n\n\t\tif (el) {\n\t\t\tdo {\n\t\t\t\tvar matrix = _matrix(el),\n\t\t\t\t\tscaleX = matrix.a,\n\t\t\t\t\tscaleY = matrix.d;\n\n\t\t\t\toffsetLeft += el.scrollLeft * scaleX;\n\t\t\t\toffsetTop += el.scrollTop * scaleY;\n\t\t\t} while (el !== winScroller && (el = el.parentNode));\n\t\t}\n\n\t\treturn [offsetLeft, offsetTop];\n\t}\n\n\t// Fixed #973:\n\t_on(document, 'touchmove', function(evt) {\n\t\tif ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n\t\t\tevt.preventDefault();\n\t\t}\n\t});\n\n\n\t// Export utils\n\tSortable.utils = {\n\t\ton: _on,\n\t\toff: _off,\n\t\tcss: _css,\n\t\tfind: _find,\n\t\tis: function (el, selector) {\n\t\t\treturn !!_closest(el, selector, el, false);\n\t\t},\n\t\textend: _extend,\n\t\tthrottle: _throttle,\n\t\tclosest: _closest,\n\t\ttoggleClass: _toggleClass,\n\t\tclone: _clone,\n\t\tindex: _index,\n\t\tnextTick: _nextTick,\n\t\tcancelNextTick: _cancelNextTick,\n\t\tdetectDirection: _detectDirection,\n\t\tgetChild: _getChild\n\t};\n\n\n\t/**\n\t * Create sortable instance\n\t * @param {HTMLElement} el\n\t * @param {Object} [options]\n\t */\n\tSortable.create = function (el, options) {\n\t\treturn new Sortable(el, options);\n\t};\n\n\n\t// Export\n\tSortable.version = '1.8.4';\n\treturn Sortable;\n});\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _invariant = _interopRequireDefault(require(\"invariant\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = require(\"react-dom\");\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _activeElement = _interopRequireDefault(require(\"dom-helpers/activeElement\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _deprecated = _interopRequireDefault(require(\"prop-types-extra/lib/deprecated\"));\n\nvar _uncontrollable = _interopRequireDefault(require(\"uncontrollable\"));\n\nvar _Widget = _interopRequireDefault(require(\"./Widget\"));\n\nvar _WidgetPicker = _interopRequireDefault(require(\"./WidgetPicker\"));\n\nvar _Popup = _interopRequireDefault(require(\"./Popup\"));\n\nvar _Button = _interopRequireDefault(require(\"./Button\"));\n\nvar _Calendar = _interopRequireDefault(require(\"./Calendar\"));\n\nvar _DateTimePickerInput = _interopRequireDefault(require(\"./DateTimePickerInput\"));\n\nvar _Select = _interopRequireDefault(require(\"./Select\"));\n\nvar _TimeList = _interopRequireDefault(require(\"./TimeList\"));\n\nvar _messages = require(\"./messages\");\n\nvar Props = _interopRequireWildcard(require(\"./util/Props\"));\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\n\nvar _focusManager = _interopRequireDefault(require(\"./util/focusManager\"));\n\nvar _scrollManager = _interopRequireDefault(require(\"./util/scrollManager\"));\n\nvar _interaction = require(\"./util/interaction\");\n\nvar _dates = _interopRequireDefault(require(\"./util/dates\"));\n\nvar _localizers = require(\"./util/localizers\");\n\nvar _widgetHelpers = require(\"./util/widgetHelpers\");\n\nvar _Icon = require(\"./Icon\");\n\nvar _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _class3, _temp;\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\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 _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object['ke' + 'ys'](descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object['define' + 'Property'](target, property, desc); desc = null; } return desc; }\n\nfunction _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and set to use loose mode. ' + 'To use proposal-class-properties in spec mode with decorators, wait for ' + 'the next major version of decorators in stage 2.'); }\n\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 NEXT_VIEW = {\n date: 'time',\n time: 'date'\n};\n\nvar isBothOrNeither = function isBothOrNeither(a, b) {\n return a && b || !a && !b;\n};\n\nvar propTypes = _extends({}, _Calendar.default.ControlledComponent.propTypes, {\n /**\n * @example ['valuePicker', [ ['new Date()', null] ]]\n */\n value: _propTypes.default.instanceOf(Date),\n\n /**\n * @example ['onChangePicker', [ ['new Date()', null] ]]\n */\n onChange: _propTypes.default.func,\n\n /**\n * @type {(false | 'time' | 'date')}\n * @example ['openDateTime']\n */\n open: _propTypes.default.oneOf([false, 'time', 'date']),\n onToggle: _propTypes.default.func,\n\n /**\n * Default current date at which the calendar opens. If none is provided, opens at today's date or the `value` date (if any).\n */\n currentDate: _propTypes.default.instanceOf(Date),\n\n /**\n * Change event Handler that is called when the currentDate is changed. The handler is called with the currentDate object.\n */\n onCurrentDateChange: _propTypes.default.func,\n onSelect: _propTypes.default.func,\n\n /**\n * The minimum Date that can be selected. Min only limits selection, it doesn't constrain the date values that\n * can be typed or pasted into the widget. If you need this behavior you can constrain values via\n * the `onChange` handler.\n *\n * @example ['prop', ['min', 'new Date()']]\n */\n min: _propTypes.default.instanceOf(Date),\n\n /**\n * The maximum Date that can be selected. Max only limits selection, it doesn't constrain the date values that\n * can be typed or pasted into the widget. If you need this behavior you can constrain values via\n * the `onChange` handler.\n *\n * @example ['prop', ['max', 'new Date()']]\n */\n max: _propTypes.default.instanceOf(Date),\n\n /**\n * The amount of minutes between each entry in the time list.\n *\n * @example ['prop', { step: 90 }]\n */\n step: _propTypes.default.number,\n culture: _propTypes.default.string,\n\n /**\n * A formatter used to display the date value. For more information about formats\n * visit the [Localization page](/localization)\n *\n * @example ['dateFormat', ['format', \"{ raw: 'MMM dd, yyyy' }\", null, { defaultValue: 'new Date()', time: 'false' }]]\n */\n format: CustomPropTypes.dateFormat,\n\n /**\n * A formatter used by the time dropdown to render times. For more information about formats visit\n * the [Localization page](/localization).\n *\n * @example ['dateFormat', ['timeFormat', \"{ time: 'medium' }\", null, { date: 'false', open: '\"time\"' }]]\n */\n timeFormat: CustomPropTypes.dateFormat,\n\n /**\n * A formatter to be used while the date input has focus. Useful for showing a simpler format for inputing.\n * For more information about formats visit the [Localization page](/localization)\n *\n * @example ['dateFormat', ['editFormat', \"{ date: 'short' }\", null, { defaultValue: 'new Date()', format: \"{ raw: 'MMM dd, yyyy' }\", time: 'false' }]]\n */\n editFormat: CustomPropTypes.dateFormat,\n\n /**\n * Enable the calendar component of the picker.\n */\n date: _propTypes.default.bool,\n\n /**\n * Enable the time list component of the picker.\n */\n time: _propTypes.default.bool,\n\n /** @ignore */\n calendar: (0, _deprecated.default)(_propTypes.default.bool, 'Use `date` instead'),\n\n /**\n * A customize the rendering of times but providing a custom component.\n */\n timeComponent: CustomPropTypes.elementType,\n\n /** Specify the element used to render the calendar dropdown icon. */\n dateIcon: _propTypes.default.node,\n\n /** Specify the element used to render the time list dropdown icon. */\n timeIcon: _propTypes.default.node,\n dropUp: _propTypes.default.bool,\n popupTransition: CustomPropTypes.elementType,\n placeholder: _propTypes.default.string,\n name: _propTypes.default.string,\n autoFocus: _propTypes.default.bool,\n\n /**\n * @example ['disabled', ['new Date()']]\n */\n disabled: CustomPropTypes.disabled,\n\n /**\n * @example ['readOnly', ['new Date()']]\n */\n readOnly: CustomPropTypes.disabled,\n\n /**\n * Determines how the widget parses the typed date string into a Date object. You can provide an array of formats to try,\n * or provide a function that returns a date to handle parsing yourself. When `parse` is unspecified and\n * the `format` prop is a `string` parse will automatically use that format as its default.\n */\n parse: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.string), _propTypes.default.string, _propTypes.default.func]),\n\n /** @ignore */\n tabIndex: _propTypes.default.any,\n\n /** @ignore */\n 'aria-labelledby': _propTypes.default.string,\n\n /** @ignore */\n 'aria-describedby': _propTypes.default.string,\n onKeyDown: _propTypes.default.func,\n onKeyPress: _propTypes.default.func,\n onBlur: _propTypes.default.func,\n onFocus: _propTypes.default.func,\n\n /** Adds a css class to the input container element. */\n containerClassName: _propTypes.default.string,\n inputProps: _propTypes.default.object,\n isRtl: _propTypes.default.bool,\n messages: _propTypes.default.shape({\n dateButton: _propTypes.default.string,\n timeButton: _propTypes.default.string\n })\n /**\n * ---\n * subtitle: DatePicker, TimePicker\n * localized: true\n * shortcuts:\n * - { key: alt + down arrow, label: open calendar or time }\n * - { key: alt + up arrow, label: close calendar or time }\n * - { key: down arrow, label: move focus to next item }\n * - { key: up arrow, label: move focus to previous item }\n * - { key: home, label: move focus to first item }\n * - { key: end, label: move focus to last item }\n * - { key: enter, label: select focused item }\n * - { key: any key, label: search list for item starting with key }\n * ---\n *\n * @public\n * @extends Calendar\n */\n\n});\n\nvar DateTimePicker = (0, _reactLifecyclesCompat.polyfill)(_class = (_class2 = (_temp = _class3 =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(DateTimePicker, _React$Component);\n\n function DateTimePicker() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _initializerDefineProperty(_this, \"handleChange\", _descriptor, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleKeyDown\", _descriptor2, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleKeyPress\", _descriptor3, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleDateSelect\", _descriptor4, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleTimeSelect\", _descriptor5, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleCalendarClick\", _descriptor6, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleTimeClick\", _descriptor7, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _this.attachCalRef = function (ref) {\n return _this.calRef = ref;\n };\n\n _this.attachTimeRef = function (ref) {\n return _this.timeRef = ref;\n };\n\n _this.attachInputRef = function (ref) {\n return _this.inputRef = ref;\n };\n\n _this.parse = function (string) {\n var _this$props = _this.props,\n parse = _this$props.parse,\n culture = _this$props.culture,\n editFormat = _this$props.editFormat;\n var format = getFormat(_this.props, true);\n !(parse || format || editFormat) ? process.env.NODE_ENV !== \"production\" ? (0, _invariant.default)(false, 'React Widgets: there are no specified `parse` formats provided and the `format` prop is a function. ' + 'the DateTimePicker is unable to parse `%s` into a dateTime, ' + 'please provide either a parse function or localizer compatible `format` prop', string) : invariant(false) : void 0;\n var date;\n var formats = [format, editFormat];\n\n if (typeof parse == 'function') {\n date = parse(string, culture);\n if (date) return date;\n } else {\n // parse is a string format or array of string formats\n formats = formats.concat(parse).filter(Boolean);\n }\n\n for (var i = 0; i < formats.length; i++) {\n date = _localizers.date.parse(string, formats[i], culture);\n if (date) return date;\n }\n\n return null;\n };\n\n _this.inputId = (0, _widgetHelpers.instanceId)(_assertThisInitialized(_assertThisInitialized(_this)), '_input');\n _this.dateId = (0, _widgetHelpers.instanceId)(_assertThisInitialized(_assertThisInitialized(_this)), '_date');\n _this.listId = (0, _widgetHelpers.instanceId)(_assertThisInitialized(_assertThisInitialized(_this)), '_listbox');\n _this.activeCalendarId = (0, _widgetHelpers.instanceId)(_assertThisInitialized(_assertThisInitialized(_this)), '_calendar_active_cell');\n _this.activeOptionId = (0, _widgetHelpers.instanceId)(_assertThisInitialized(_assertThisInitialized(_this)), '_listbox_active_option');\n _this.handleScroll = (0, _scrollManager.default)(_assertThisInitialized(_assertThisInitialized(_this)));\n _this.focusManager = (0, _focusManager.default)(_assertThisInitialized(_assertThisInitialized(_this)), {\n didHandle: function didHandle(focused) {\n if (!focused) _this.close();\n }\n });\n _this.state = {\n focused: false,\n messages: (0, _messages.getMessages)(_this.props.messages)\n };\n return _this;\n }\n\n DateTimePicker.getDerivedStateFromProps = function getDerivedStateFromProps(_ref) {\n var messages = _ref.messages;\n return {\n messages: (0, _messages.getMessages)(messages)\n };\n };\n\n var _proto = DateTimePicker.prototype;\n\n _proto.renderInput = function renderInput(owns) {\n var _this$props2 = this.props,\n open = _this$props2.open,\n value = _this$props2.value,\n editFormat = _this$props2.editFormat,\n culture = _this$props2.culture,\n placeholder = _this$props2.placeholder,\n disabled = _this$props2.disabled,\n readOnly = _this$props2.readOnly,\n name = _this$props2.name,\n tabIndex = _this$props2.tabIndex,\n autoFocus = _this$props2.autoFocus,\n inputProps = _this$props2.inputProps,\n ariaLabelledby = _this$props2['aria-labelledby'],\n ariaDescribedby = _this$props2['aria-describedby'];\n var focused = this.state.focused;\n var inputReadOnly = inputProps ? inputProps.readOnly : null;\n var activeId = null;\n\n if (open === 'time') {\n activeId = this.activeOptionId;\n } else if (open === 'date') {\n activeId = this.activeCalendarId;\n }\n\n return _react.default.createElement(_DateTimePickerInput.default, _extends({}, inputProps, {\n id: this.inputId,\n ref: this.attachInputRef,\n role: \"combobox\",\n name: name,\n value: value,\n tabIndex: tabIndex,\n autoFocus: autoFocus,\n placeholder: placeholder,\n disabled: disabled,\n readOnly: inputReadOnly != null ? inputReadOnly : readOnly,\n format: getFormat(this.props),\n editFormat: editFormat,\n editing: focused,\n culture: culture,\n parse: this.parse,\n onChange: this.handleChange,\n \"aria-haspopup\": true,\n \"aria-activedescendant\": activeId,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby,\n \"aria-expanded\": !!open,\n \"aria-owns\": owns\n }));\n };\n\n _proto.renderButtons = function renderButtons() {\n var _this$props3 = this.props,\n date = _this$props3.date,\n dateIcon = _this$props3.dateIcon,\n time = _this$props3.time,\n timeIcon = _this$props3.timeIcon,\n disabled = _this$props3.disabled,\n readOnly = _this$props3.readOnly;\n\n if (!date && !time) {\n return null;\n }\n\n var messages = this.state.messages;\n return _react.default.createElement(_Select.default, {\n bordered: true\n }, date && _react.default.createElement(_Button.default, {\n icon: dateIcon,\n label: messages.dateButton(),\n disabled: disabled || readOnly,\n onClick: this.handleCalendarClick\n }), time && _react.default.createElement(_Button.default, {\n icon: timeIcon,\n label: messages.timeButton(),\n disabled: disabled || readOnly,\n onClick: this.handleTimeClick\n }));\n };\n\n _proto.renderCalendar = function renderCalendar() {\n var _this2 = this;\n\n var activeCalendarId = this.activeCalendarId,\n inputId = this.inputId,\n dateId = this.dateId;\n var _this$props4 = this.props,\n open = _this$props4.open,\n value = _this$props4.value,\n popupTransition = _this$props4.popupTransition,\n dropUp = _this$props4.dropUp,\n onCurrentDateChange = _this$props4.onCurrentDateChange,\n currentDate = _this$props4.currentDate;\n var calendarProps = Props.pick(this.props, _Calendar.default.ControlledComponent); // manually include the last controlled default Props\n\n calendarProps.defaultView = this.props.defaultView;\n return _react.default.createElement(_Popup.default, {\n dropUp: dropUp,\n open: open === 'date',\n className: \"rw-calendar-popup\",\n transition: popupTransition\n }, _react.default.createElement(_Calendar.default, _extends({}, calendarProps, {\n id: dateId,\n activeId: activeCalendarId,\n tabIndex: \"-1\",\n value: value,\n autoFocus: false,\n onChange: this.handleDateSelect // #75: need to aggressively reclaim focus from the calendar otherwise\n // disabled header/footer buttons will drop focus completely from the widget\n ,\n onNavigate: function onNavigate() {\n return _this2.focus();\n },\n currentDate: currentDate,\n onCurrentDateChange: onCurrentDateChange,\n \"aria-hidden\": !open,\n \"aria-live\": \"polite\",\n \"aria-labelledby\": inputId,\n ref: this.attachCalRef\n })));\n };\n\n _proto.renderTimeList = function renderTimeList() {\n var _this3 = this;\n\n var activeOptionId = this.activeOptionId,\n inputId = this.inputId,\n listId = this.listId;\n var _this$props5 = this.props,\n open = _this$props5.open,\n value = _this$props5.value,\n min = _this$props5.min,\n max = _this$props5.max,\n step = _this$props5.step,\n currentDate = _this$props5.currentDate,\n dropUp = _this$props5.dropUp,\n date = _this$props5.date,\n culture = _this$props5.culture,\n timeFormat = _this$props5.timeFormat,\n timeComponent = _this$props5.timeComponent,\n timeListProps = _this$props5.timeListProps,\n popupTransition = _this$props5.popupTransition;\n return _react.default.createElement(_Popup.default, {\n dropUp: dropUp,\n transition: popupTransition,\n open: open === 'time',\n onEntering: function onEntering() {\n return _this3.timeRef.forceUpdate();\n }\n }, _react.default.createElement(\"div\", null, _react.default.createElement(_TimeList.default, {\n id: listId,\n min: min,\n max: max,\n step: step,\n listProps: timeListProps,\n currentDate: currentDate,\n activeId: activeOptionId,\n format: timeFormat,\n culture: culture,\n value: dateOrNull(value),\n onMove: this.handleScroll,\n onSelect: this.handleTimeSelect,\n preserveDate: !!date,\n itemComponent: timeComponent,\n \"aria-labelledby\": inputId,\n \"aria-live\": open && 'polite',\n \"aria-hidden\": !open,\n messages: this.state.messages,\n ref: this.attachTimeRef\n })));\n };\n\n _proto.render = function render() {\n var _this$props6 = this.props,\n className = _this$props6.className,\n date = _this$props6.date,\n time = _this$props6.time,\n open = _this$props6.open,\n disabled = _this$props6.disabled,\n readOnly = _this$props6.readOnly,\n dropUp = _this$props6.dropUp,\n containerClassName = _this$props6.containerClassName;\n var focused = this.state.focused;\n var elementProps = Props.pickElementProps(this, _Calendar.default.ControlledComponent);\n var shouldRenderList = (0, _widgetHelpers.isFirstFocusedRender)(this);\n var shouldRenderTimeList = !!(shouldRenderList && time);\n var shouldRenderCalendar = !!(shouldRenderList && date);\n var owns = '';\n if (shouldRenderCalendar && open === 'date') owns += this.dateId;\n if (shouldRenderTimeList && open === 'time') owns += ' ' + this.listId;\n return _react.default.createElement(_Widget.default, _extends({}, elementProps, {\n open: !!open,\n dropUp: dropUp,\n focused: focused,\n disabled: disabled,\n readOnly: readOnly,\n onKeyDown: this.handleKeyDown,\n onKeyPress: this.handleKeyPress,\n onBlur: this.focusManager.handleBlur,\n onFocus: this.focusManager.handleFocus,\n className: (0, _classnames.default)(className, 'rw-datetime-picker')\n }), _react.default.createElement(_WidgetPicker.default, {\n className: containerClassName\n }, this.renderInput(owns.trim()), this.renderButtons()), shouldRenderTimeList && this.renderTimeList(), shouldRenderCalendar && this.renderCalendar());\n };\n\n _proto.focus = function focus() {\n if (this.inputRef && (0, _activeElement.default)() !== (0, _reactDom.findDOMNode)(this.inputRef)) this.inputRef.focus();\n };\n\n _proto.toggle = function toggle(view) {\n var open = this.props.open;\n if (!open || open !== view) this.open(view);else this.close();\n };\n\n _proto.open = function open(view) {\n var _this$props7 = this.props,\n open = _this$props7.open,\n date = _this$props7.date,\n time = _this$props7.time,\n onToggle = _this$props7.onToggle;\n\n if (!view) {\n if (time) view = 'time';\n if (date) view = 'date';\n if (isBothOrNeither(date, time)) view = NEXT_VIEW[open] || 'date';\n }\n\n if (open !== view) (0, _widgetHelpers.notify)(onToggle, view);\n };\n\n _proto.close = function close() {\n if (this.props.open) (0, _widgetHelpers.notify)(this.props.onToggle, false);\n };\n\n _proto.inRangeValue = function inRangeValue(value) {\n if (value == null) return value;\n return _dates.default.max(_dates.default.min(value, this.props.max), this.props.min);\n };\n\n return DateTimePicker;\n}(_react.default.Component), _class3.displayName = 'DateTimePicker', _class3.propTypes = propTypes, _class3.defaultProps = _extends({}, _Calendar.default.ControlledComponent.defaultProps, {\n value: null,\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n date: true,\n time: true,\n open: false,\n dateIcon: _Icon.calendar,\n timeIcon: _Icon.clock\n}), _temp), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, \"handleChange\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this4 = this;\n\n return function (date, str, constrain) {\n var _this4$props = _this4.props,\n onChange = _this4$props.onChange,\n value = _this4$props.value;\n if (constrain) date = _this4.inRangeValue(date);\n\n if (onChange) {\n if (date == null || value == null) {\n if (date != value //eslint-disable-line eqeqeq\n ) onChange(date, str);\n } else if (!_dates.default.eq(date, value)) {\n onChange(date, str);\n }\n }\n };\n }\n}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, \"handleKeyDown\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this5 = this;\n\n return function (e) {\n var _this5$props = _this5.props,\n open = _this5$props.open,\n onKeyDown = _this5$props.onKeyDown;\n (0, _widgetHelpers.notify)(onKeyDown, [e]);\n if (e.defaultPrevented) return;\n if (e.key === 'Escape' && open) _this5.close();else if (e.altKey) {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n\n _this5.open();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n\n _this5.close();\n }\n } else if (open) {\n if (open === 'date') _this5.calRef.inner.handleKeyDown(e);\n if (open === 'time') _this5.timeRef.handleKeyDown(e);\n }\n };\n }\n}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, \"handleKeyPress\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this6 = this;\n\n return function (e) {\n (0, _widgetHelpers.notify)(_this6.props.onKeyPress, [e]);\n if (e.defaultPrevented) return;\n };\n }\n}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"handleDateSelect\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this7 = this;\n\n return function (date) {\n var format = getFormat(_this7.props),\n dateTime = _dates.default.merge(date, _this7.props.value, _this7.props.currentDate),\n dateStr = formatDate(date, format, _this7.props.culture);\n\n _this7.close();\n\n (0, _widgetHelpers.notify)(_this7.props.onSelect, [dateTime, dateStr]);\n\n _this7.handleChange(dateTime, dateStr, true);\n\n _this7.focus();\n };\n }\n}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"handleTimeSelect\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this8 = this;\n\n return function (datum) {\n var format = getFormat(_this8.props),\n dateTime = _dates.default.merge(_this8.props.value, datum.date, _this8.props.currentDate),\n dateStr = formatDate(datum.date, format, _this8.props.culture);\n\n _this8.close();\n\n (0, _widgetHelpers.notify)(_this8.props.onSelect, [dateTime, dateStr]);\n\n _this8.handleChange(dateTime, dateStr, true);\n\n _this8.focus();\n };\n }\n}), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, \"handleCalendarClick\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this9 = this;\n\n return function () {\n _this9.focus();\n\n _this9.toggle('date');\n };\n }\n}), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, \"handleTimeClick\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this10 = this;\n\n return function () {\n _this10.focus();\n\n _this10.toggle('time');\n };\n }\n})), _class2)) || _class;\n\nvar _default = (0, _uncontrollable.default)(DateTimePicker, {\n open: 'onToggle',\n value: 'onChange',\n currentDate: 'onCurrentDateChange'\n}, ['focus']);\n\nexports.default = _default;\n\nfunction getFormat(props) {\n var isDate = props.date != null ? props.date : true;\n var isTime = props.time != null ? props.time : true;\n return props.format ? props.format : isDate && isTime || !isDate && !isTime ? _localizers.date.getFormat('default') : _localizers.date.getFormat(isDate ? 'date' : 'time');\n}\n\nfunction formatDate(date, format, culture) {\n var val = '';\n if (date instanceof Date && !isNaN(date.getTime())) val = _localizers.date.format(date, format, culture);\n return val;\n}\n\nfunction dateOrNull(dt) {\n if (dt && !isNaN(dt.getTime())) return dt;\n return null;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = require(\"react-dom\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _activeElement = _interopRequireDefault(require(\"dom-helpers/activeElement\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _reactComponentManagers = require(\"react-component-managers\");\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _uncontrollable = _interopRequireDefault(require(\"uncontrollable\"));\n\nvar _Widget = _interopRequireDefault(require(\"./Widget\"));\n\nvar _WidgetPicker = _interopRequireDefault(require(\"./WidgetPicker\"));\n\nvar _Select = _interopRequireDefault(require(\"./Select\"));\n\nvar _Popup = _interopRequireDefault(require(\"./Popup\"));\n\nvar _List = _interopRequireDefault(require(\"./List\"));\n\nvar _AddToListOption = _interopRequireDefault(require(\"./AddToListOption\"));\n\nvar _DropdownListInput = _interopRequireDefault(require(\"./DropdownListInput\"));\n\nvar _messages = require(\"./messages\");\n\nvar Props = _interopRequireWildcard(require(\"./util/Props\"));\n\nvar Filter = _interopRequireWildcard(require(\"./util/Filter\"));\n\nvar _focusManager = _interopRequireDefault(require(\"./util/focusManager\"));\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\n\nvar _reduceToListState = _interopRequireDefault(require(\"./util/reduceToListState\"));\n\nvar _getAccessors = _interopRequireDefault(require(\"./util/getAccessors\"));\n\nvar _scrollManager = _interopRequireDefault(require(\"./util/scrollManager\"));\n\nvar _interaction = require(\"./util/interaction\");\n\nvar _widgetHelpers = require(\"./util/widgetHelpers\");\n\nvar _dataHelpers = require(\"./util/dataHelpers\");\n\nvar _Icon = require(\"./Icon\");\n\nvar _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _class3, _temp;\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\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 _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object['ke' + 'ys'](descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object['define' + 'Property'](target, property, desc); desc = null; } return desc; }\n\nfunction _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and set to use loose mode. ' + 'To use proposal-class-properties in spec mode with decorators, wait for ' + 'the next major version of decorators in stage 2.'); }\n\nvar CREATE_OPTION = {};\n/**\n * ---\n * shortcuts:\n * - { key: alt + down arrow, label: open dropdown }\n * - { key: alt + up arrow, label: close dropdown }\n * - { key: down arrow, label: move focus to next item }\n * - { key: up arrow, label: move focus to previous item }\n * - { key: home, label: move focus to first item }\n * - { key: end, label: move focus to last item }\n * - { key: enter, label: select focused item }\n * - { key: ctrl + enter, label: create new option from current searchTerm }\n * - { key: any key, label: search list for item starting with key }\n * ---\n *\n * A `<select>` replacement for single value lists.\n * @public\n */\n\nvar DropdownList = (0, _reactLifecyclesCompat.polyfill)(_class = (_class2 = (_temp = _class3 =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(DropdownList, _React$Component);\n\n function DropdownList() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.handleFocusChanged = function (focused) {\n if (!focused) _this.close();\n };\n\n _initializerDefineProperty(_this, \"handleSelect\", _descriptor, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleCreate\", _descriptor2, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleClick\", _descriptor3, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleKeyDown\", _descriptor4, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleKeyPress\", _descriptor5, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _this.handleInputChange = function (e) {\n _this.search(e.target.value, e, 'input');\n };\n\n _this.handleAutofillChange = function (e) {\n var data = _this.props.data;\n var filledValue = e.target.value.toLowerCase();\n if (filledValue === '') return void _this.change(null);\n\n for (var _iterator = data, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var item = _ref;\n var value = (0, _dataHelpers.dataValue)(item);\n\n if (String(value).toLowerCase() === filledValue || (0, _dataHelpers.dataText)(item).toLowerCase() === filledValue) {\n _this.change(item, e);\n\n break;\n }\n }\n };\n\n _this.handleAutofill = function (autofilling) {\n _this.setState({\n autofilling: autofilling\n });\n };\n\n _this.attachInputRef = function (ref) {\n return _this.inputRef = ref;\n };\n\n _this.attachFilterRef = function (ref) {\n return _this.filterRef = ref;\n };\n\n _this.attachListRef = function (ref) {\n return _this.listRef = ref;\n };\n\n _this.focus = function (target) {\n var _this$props = _this.props,\n filter = _this$props.filter,\n open = _this$props.open;\n var inst = target || (filter && open ? _this.filterRef : _this.inputRef);\n inst = (0, _reactDom.findDOMNode)(inst);\n if (inst && (0, _activeElement.default)() !== inst) inst.focus();\n };\n\n (0, _reactComponentManagers.autoFocus)(_assertThisInitialized(_assertThisInitialized(_this)));\n _this.inputId = (0, _widgetHelpers.instanceId)(_assertThisInitialized(_assertThisInitialized(_this)), '_input');\n _this.listId = (0, _widgetHelpers.instanceId)(_assertThisInitialized(_assertThisInitialized(_this)), '_listbox');\n _this.activeId = (0, _widgetHelpers.instanceId)(_assertThisInitialized(_assertThisInitialized(_this)), '_listbox_active_option');\n _this.mounted = (0, _reactComponentManagers.mountManager)(_assertThisInitialized(_assertThisInitialized(_this)));\n _this.timeouts = (0, _reactComponentManagers.timeoutManager)(_assertThisInitialized(_assertThisInitialized(_this)));\n _this.handleScroll = (0, _scrollManager.default)(_assertThisInitialized(_assertThisInitialized(_this)));\n _this.focusManager = (0, _focusManager.default)(_assertThisInitialized(_assertThisInitialized(_this)), {\n didHandle: _this.handleFocusChanged\n });\n _this.state = {};\n return _this;\n }\n\n DropdownList.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var open = nextProps.open,\n value = nextProps.value,\n data = nextProps.data,\n messages = nextProps.messages,\n searchTerm = nextProps.searchTerm,\n filter = nextProps.filter,\n minLength = nextProps.minLength,\n caseSensitive = nextProps.caseSensitive;\n var focusedItem = prevState.focusedItem;\n var accessors = (0, _getAccessors.default)(nextProps);\n var valueChanged = value !== prevState.lastValue;\n var initialIdx = valueChanged && accessors.indexOf(data, value);\n if (open) data = Filter.filter(data, {\n filter: filter,\n searchTerm: searchTerm,\n minLength: minLength,\n caseSensitive: caseSensitive,\n textField: accessors.text\n });\n var list = (0, _reduceToListState.default)(data, prevState.list, {\n nextProps: nextProps\n });\n var selectedItem = data[initialIdx];\n var nextFocusedItem = ~data.indexOf(focusedItem) ? focusedItem : data[0];\n return {\n data: data,\n list: list,\n accessors: accessors,\n lastValue: value,\n messages: (0, _messages.getMessages)(messages),\n selectedItem: valueChanged ? list.nextEnabled(selectedItem) : prevState.selectedItem,\n focusedItem: valueChanged || focusedItem === undefined ? list.nextEnabled(selectedItem !== undefined ? selectedItem : nextFocusedItem) : nextFocusedItem\n };\n };\n\n var _proto = DropdownList.prototype;\n\n _proto.change = function change(nextValue, originalEvent) {\n var _this$props2 = this.props,\n onChange = _this$props2.onChange,\n searchTerm = _this$props2.searchTerm,\n lastValue = _this$props2.value;\n\n if (!this.state.accessors.matches(nextValue, lastValue)) {\n (0, _widgetHelpers.notify)(onChange, [nextValue, {\n originalEvent: originalEvent,\n lastValue: lastValue,\n searchTerm: searchTerm\n }]);\n this.clearSearch(originalEvent);\n this.close();\n }\n };\n\n _proto.renderList = function renderList() {\n var _this$props3 = this.props,\n open = _this$props3.open,\n filter = _this$props3.filter,\n data = _this$props3.data,\n searchTerm = _this$props3.searchTerm,\n searchIcon = _this$props3.searchIcon,\n optionComponent = _this$props3.optionComponent,\n itemComponent = _this$props3.itemComponent,\n groupComponent = _this$props3.groupComponent,\n listProps = _this$props3.listProps;\n var _this$state = this.state,\n list = _this$state.list,\n accessors = _this$state.accessors,\n focusedItem = _this$state.focusedItem,\n selectedItem = _this$state.selectedItem,\n messages = _this$state.messages,\n filteredData = _this$state.data;\n var List = this.props.listComponent;\n return _react.default.createElement(\"div\", null, filter && _react.default.createElement(_WidgetPicker.default, {\n className: \"rw-filter-input rw-input\"\n }, _react.default.createElement(\"input\", {\n value: searchTerm,\n className: \"rw-input-reset\",\n onChange: this.handleInputChange,\n placeholder: messages.filterPlaceholder(this.props),\n ref: this.attachFilterRef\n }), _react.default.createElement(_Select.default, {\n icon: searchIcon,\n role: \"presentation\",\n \"aria-hidden\": \"true\"\n })), _react.default.createElement(List, _extends({}, listProps, {\n id: this.listId,\n activeId: this.activeId,\n data: filteredData,\n dataState: list.dataState,\n isDisabled: list.isDisabled,\n searchTerm: searchTerm,\n textAccessor: accessors.text,\n valueAccessor: accessors.value,\n itemComponent: itemComponent,\n groupComponent: groupComponent,\n optionComponent: optionComponent,\n selectedItem: selectedItem,\n focusedItem: open ? focusedItem : null,\n onSelect: this.handleSelect,\n onMove: this.handleScroll,\n \"aria-live\": open && 'polite',\n \"aria-labelledby\": this.inputId,\n \"aria-hidden\": !this.props.open,\n ref: this.attachListRef,\n messages: {\n emptyList: data.length ? messages.emptyFilter : messages.emptyList\n }\n })), this.allowCreate() && _react.default.createElement(_AddToListOption.default, {\n id: this.createId,\n searchTerm: searchTerm,\n onSelect: this.handleCreate,\n focused: !focusedItem || focusedItem === CREATE_OPTION\n }, messages.createOption(this.props)));\n };\n\n _proto.render = function render() {\n var _this2 = this;\n\n var _this$props4 = this.props,\n className = _this$props4.className,\n tabIndex = _this$props4.tabIndex,\n popupTransition = _this$props4.popupTransition,\n textField = _this$props4.textField,\n data = _this$props4.data,\n busy = _this$props4.busy,\n dropUp = _this$props4.dropUp,\n placeholder = _this$props4.placeholder,\n value = _this$props4.value,\n open = _this$props4.open,\n isRtl = _this$props4.isRtl,\n filter = _this$props4.filter,\n inputProps = _this$props4.inputProps,\n selectIcon = _this$props4.selectIcon,\n busySpinner = _this$props4.busySpinner,\n containerClassName = _this$props4.containerClassName,\n valueComponent = _this$props4.valueComponent;\n var _this$state2 = this.state,\n focused = _this$state2.focused,\n accessors = _this$state2.accessors,\n messages = _this$state2.messages,\n autofilling = _this$state2.autofilling;\n var disabled = this.props.disabled === true;\n var readOnly = this.props.readOnly === true;\n var valueItem = accessors.findOrSelf(data, value);\n var shouldRenderPopup = (0, _widgetHelpers.isFirstFocusedRender)(this);\n\n var elementProps = _extends(Props.pickElementProps(this), {\n name: undefined,\n role: 'combobox',\n id: this.inputId,\n tabIndex: open && filter ? -1 : tabIndex || 0,\n 'aria-owns': this.listId,\n 'aria-activedescendant': open ? this.activeId : null,\n 'aria-expanded': !!open,\n 'aria-haspopup': true,\n 'aria-busy': !!busy,\n 'aria-live': !open && 'polite',\n 'aria-autocomplete': 'list',\n 'aria-disabled': disabled,\n 'aria-readonly': readOnly\n });\n\n return _react.default.createElement(_Widget.default, _extends({}, elementProps, {\n open: open,\n isRtl: isRtl,\n dropUp: dropUp,\n focused: focused,\n disabled: disabled,\n readOnly: readOnly,\n autofilling: autofilling,\n onBlur: this.focusManager.handleBlur,\n onFocus: this.focusManager.handleFocus,\n onKeyDown: this.handleKeyDown,\n onKeyPress: this.handleKeyPress,\n className: (0, _classnames.default)(className, 'rw-dropdown-list'),\n ref: this.attachInputRef\n }), _react.default.createElement(_WidgetPicker.default, {\n onClick: this.handleClick,\n className: (0, _classnames.default)(containerClassName, 'rw-widget-input')\n }, _react.default.createElement(_DropdownListInput.default, _extends({}, inputProps, {\n value: valueItem,\n textField: textField,\n name: this.props.name,\n autoComplete: this.props.autoComplete,\n onAutofill: this.handleAutofill,\n onAutofillChange: this.handleAutofillChange,\n placeholder: placeholder,\n valueComponent: valueComponent\n })), _react.default.createElement(_Select.default, {\n busy: busy,\n icon: selectIcon,\n spinner: busySpinner,\n role: \"presentational\",\n \"aria-hidden\": \"true\",\n disabled: disabled || readOnly,\n label: messages.openDropdown(this.props)\n })), shouldRenderPopup && _react.default.createElement(_Popup.default, {\n open: open,\n dropUp: dropUp,\n transition: popupTransition,\n onEntered: function onEntered() {\n return _this2.focus();\n },\n onEntering: function onEntering() {\n return _this2.listRef.forceUpdate();\n }\n }, this.renderList(messages)));\n };\n\n _proto.findOption = function findOption(character, cb) {\n var _this3 = this;\n\n var word = ((this._currentWord || '') + character).toLowerCase();\n if (!character) return;\n this._currentWord = word;\n this.timeouts.set('search', function () {\n var list = _this3.state.list;\n var key = _this3.props.open ? 'focusedItem' : 'selectedItem';\n var item = list.next(_this3.state[key], word);\n\n if (item === _this3.state[key]) {\n item = list.next(null, word);\n }\n\n _this3._currentWord = '';\n if (item) cb(item);\n }, this.props.delay);\n };\n\n _proto.clearSearch = function clearSearch(originalEvent) {\n this.search('', originalEvent, 'clear');\n };\n\n _proto.search = function search(searchTerm, originalEvent, action) {\n if (action === void 0) {\n action = 'input';\n }\n\n var _this$props5 = this.props,\n onSearch = _this$props5.onSearch,\n lastSearchTerm = _this$props5.searchTerm;\n if (searchTerm !== lastSearchTerm) (0, _widgetHelpers.notify)(onSearch, [searchTerm, {\n action: action,\n lastSearchTerm: lastSearchTerm,\n originalEvent: originalEvent\n }]);\n };\n\n _proto.open = function open() {\n if (!this.props.open) (0, _widgetHelpers.notify)(this.props.onToggle, true);\n };\n\n _proto.close = function close() {\n if (this.props.open) (0, _widgetHelpers.notify)(this.props.onToggle, false);\n };\n\n _proto.toggle = function toggle() {\n this.props.open ? this.close() : this.open();\n };\n\n _proto.allowCreate = function allowCreate() {\n var _this$props6 = this.props,\n searchTerm = _this$props6.searchTerm,\n onCreate = _this$props6.onCreate,\n allowCreate = _this$props6.allowCreate;\n return !!(onCreate && (allowCreate === true || allowCreate === 'onFilter' && searchTerm) && !this.hasExtactMatch());\n };\n\n _proto.hasExtactMatch = function hasExtactMatch() {\n var _this$props7 = this.props,\n searchTerm = _this$props7.searchTerm,\n caseSensitive = _this$props7.caseSensitive,\n filter = _this$props7.filter;\n var _this$state3 = this.state,\n data = _this$state3.data,\n accessors = _this$state3.accessors;\n\n var lower = function lower(text) {\n return caseSensitive ? text : text.toLowerCase();\n }; // if there is an exact match on textFields:\n\n\n return filter && data.some(function (v) {\n return lower(accessors.text(v)) === lower(searchTerm);\n });\n };\n\n return DropdownList;\n}(_react.default.Component), _class3.propTypes = _extends({}, Filter.propTypes, {\n value: _propTypes.default.any,\n\n /**\n * @type {function (\n * dataItems: ?any,\n * metadata: {\n * lastValue: ?any,\n * searchTerm: ?string\n * originalEvent: SyntheticEvent,\n * }\n * ): void}\n */\n onChange: _propTypes.default.func,\n open: _propTypes.default.bool,\n onToggle: _propTypes.default.func,\n data: _propTypes.default.array,\n valueField: CustomPropTypes.accessor,\n textField: CustomPropTypes.accessor,\n allowCreate: _propTypes.default.oneOf([true, false, 'onFilter']),\n\n /**\n * A React component for customizing the rendering of the DropdownList\n * value\n */\n valueComponent: CustomPropTypes.elementType,\n itemComponent: CustomPropTypes.elementType,\n listComponent: CustomPropTypes.elementType,\n optionComponent: CustomPropTypes.elementType,\n groupComponent: CustomPropTypes.elementType,\n groupBy: CustomPropTypes.accessor,\n\n /**\n *\n * @type {(dataItem: ?any, metadata: { originalEvent: SyntheticEvent }) => void}\n */\n onSelect: _propTypes.default.func,\n onCreate: _propTypes.default.func,\n\n /**\n * @type function(searchTerm: string, metadata: { action, lastSearchTerm, originalEvent? })\n */\n onSearch: _propTypes.default.func,\n searchTerm: _propTypes.default.string,\n busy: _propTypes.default.bool,\n\n /** Specify the element used to render the select (down arrow) icon. */\n selectIcon: _propTypes.default.node,\n searchIcon: _propTypes.default.node,\n\n /** Specify the element used to render the busy indicator */\n busySpinner: _propTypes.default.node,\n placeholder: _propTypes.default.string,\n dropUp: _propTypes.default.bool,\n popupTransition: CustomPropTypes.elementType,\n disabled: CustomPropTypes.disabled.acceptsArray,\n readOnly: CustomPropTypes.disabled,\n\n /** Adds a css class to the input container element. */\n containerClassName: _propTypes.default.string,\n inputProps: _propTypes.default.object,\n listProps: _propTypes.default.object,\n isRtl: _propTypes.default.bool,\n messages: _propTypes.default.shape({\n open: _propTypes.default.string,\n emptyList: CustomPropTypes.message,\n emptyFilter: CustomPropTypes.message,\n filterPlaceholder: _propTypes.default.string,\n createOption: CustomPropTypes.message\n })\n}), _class3.defaultProps = {\n data: [],\n delay: 500,\n searchTerm: '',\n allowCreate: false,\n searchIcon: _Icon.search,\n selectIcon: _Icon.caretDown,\n listComponent: _List.default\n}, _temp), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, \"handleSelect\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this4 = this;\n\n return function (dataItem, originalEvent) {\n if (dataItem === undefined || dataItem === CREATE_OPTION) {\n _this4.handleCreate(_this4.props.searchTerm);\n\n return;\n }\n\n (0, _widgetHelpers.notify)(_this4.props.onSelect, [dataItem, {\n originalEvent: originalEvent\n }]);\n\n _this4.change(dataItem, originalEvent);\n\n _this4.close();\n\n _this4.focus(_this4);\n };\n }\n}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, \"handleCreate\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this5 = this;\n\n return function (searchTerm, event) {\n if (searchTerm === void 0) {\n searchTerm = '';\n }\n\n (0, _widgetHelpers.notify)(_this5.props.onCreate, searchTerm);\n\n _this5.clearSearch(event);\n\n _this5.close();\n\n _this5.focus(_this5);\n };\n }\n}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, \"handleClick\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this6 = this;\n\n return function (e) {\n _this6.focus();\n\n _this6.toggle();\n\n (0, _widgetHelpers.notify)(_this6.props.onClick, e);\n };\n }\n}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"handleKeyDown\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this7 = this;\n\n return function (e) {\n var key = e.key,\n altKey = e.altKey,\n ctrlKey = e.ctrlKey;\n var _this7$props = _this7.props,\n open = _this7$props.open,\n onKeyDown = _this7$props.onKeyDown,\n filter = _this7$props.filter,\n searchTerm = _this7$props.searchTerm;\n var _this7$state = _this7.state,\n focusedItem = _this7$state.focusedItem,\n selectedItem = _this7$state.selectedItem,\n list = _this7$state.list;\n var createIsFocused = focusedItem === CREATE_OPTION;\n\n var canCreate = _this7.allowCreate();\n\n (0, _widgetHelpers.notify)(onKeyDown, [e]);\n\n var closeWithFocus = function closeWithFocus() {\n _this7.close();\n\n (0, _reactDom.findDOMNode)(_this7).focus();\n };\n\n var change = function change(item) {\n return item != null && _this7.change(item, e);\n };\n\n var focusItem = function focusItem(item) {\n return _this7.setState({\n focusedItem: item\n });\n };\n\n if (e.defaultPrevented) return;\n\n if (key === 'End') {\n e.preventDefault();\n if (open) focusItem(list.last());else change(list.last());\n } else if (key === 'Home') {\n e.preventDefault();\n if (open) focusItem(list.first());else change(list.first());\n } else if (key === 'Escape' && open) {\n e.preventDefault();\n closeWithFocus();\n } else if (key === 'Enter' && open && ctrlKey && canCreate) {\n e.preventDefault();\n\n _this7.handleCreate(searchTerm, e);\n } else if ((key === 'Enter' || key === ' ' && !filter) && open) {\n e.preventDefault();\n\n _this7.handleSelect(focusedItem, e);\n } else if (key === ' ' && !open) {\n e.preventDefault();\n\n _this7.open();\n } else if (key === 'ArrowDown') {\n e.preventDefault();\n if (altKey) return _this7.open();\n if (!open) change(list.next(selectedItem));\n var next = list.next(focusedItem);\n var creating = createIsFocused || canCreate && focusedItem === next;\n focusItem(creating ? CREATE_OPTION : next);\n } else if (key === 'ArrowUp') {\n e.preventDefault();\n if (altKey) return closeWithFocus();\n if (!open) return change(list.prev(selectedItem));\n focusItem(createIsFocused ? list.last() : list.prev(focusedItem));\n }\n };\n }\n}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"handleKeyPress\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this8 = this;\n\n return function (e) {\n (0, _widgetHelpers.notify)(_this8.props.onKeyPress, [e]);\n if (e.defaultPrevented) return;\n if (!(_this8.props.filter && _this8.props.open)) _this8.findOption(String.fromCharCode(e.which), function (item) {\n _this8.mounted() && _this8.props.open ? _this8.setState({\n focusedItem: item\n }) : item && _this8.change(item, e);\n });\n };\n }\n})), _class2)) || _class;\n\nvar _default = (0, _uncontrollable.default)(DropdownList, {\n open: 'onToggle',\n value: 'onChange',\n searchTerm: 'onSearch'\n}, ['focus']);\n\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = momentLocalizer;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _configure = _interopRequireDefault(require(\"react-widgets/lib/configure\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nif (typeof _moment.default !== 'function') throw new TypeError('You must provide a valid moment object');\nvar localField = typeof (0, _moment.default)().locale === 'function' ? 'locale' : 'lang',\n hasLocaleData = !!_moment.default.localeData;\nif (!hasLocaleData) throw new TypeError('The Moment localizer depends on the `localeData` api, please provide a moment object v2.2.0 or higher');\n\nfunction getMoment(culture, value, format) {\n return culture ? (0, _moment.default)(value, format, true)[localField](culture) : (0, _moment.default)(value, format, true);\n}\n\nfunction endOfDecade(date) {\n return (0, _moment.default)(date).add(10, 'year').add(-1, 'millisecond').toDate();\n}\n\nfunction endOfCentury(date) {\n return (0, _moment.default)(date).add(100, 'year').add(-1, 'millisecond').toDate();\n}\n\nfunction momentLocalizer() {\n var localizer = {\n formats: {\n date: 'L',\n time: 'LT',\n default: 'lll',\n header: 'MMMM YYYY',\n footer: 'LL',\n weekday: 'dd',\n dayOfMonth: 'DD',\n month: 'MMM',\n year: 'YYYY',\n decade: function decade(date, culture, localizer) {\n return localizer.format(date, 'YYYY', culture) + ' - ' + localizer.format(endOfDecade(date), 'YYYY', culture);\n },\n century: function century(date, culture, localizer) {\n return localizer.format(date, 'YYYY', culture) + ' - ' + localizer.format(endOfCentury(date), 'YYYY', culture);\n }\n },\n firstOfWeek: function firstOfWeek(culture) {\n return _moment.default.localeData(culture).firstDayOfWeek();\n },\n parse: function parse(value, format, culture) {\n if (!value) return null;\n var m = getMoment(culture, value, format);\n if (m.isValid()) return m.toDate();\n return null;\n },\n format: function format(value, _format, culture) {\n return getMoment(culture, value).format(_format);\n }\n };\n\n _configure.default.setDateLocalizer(localizer);\n}\n\nmodule.exports = exports[\"default\"];\n","module.exports = require('./components/Modal');\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\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 _brace = require('brace');\n\nvar _brace2 = _interopRequireDefault(_brace);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _lodash = require('lodash.isequal');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\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 _ace$acequire = _brace2.default.acequire('ace/range'),\n Range = _ace$acequire.Range;\n\nvar editorOptions = ['minLines', 'maxLines', 'readOnly', 'highlightActiveLine', 'tabSize', 'enableBasicAutocompletion', 'enableLiveAutocompletion', 'enableSnippets'];\n\nvar ReactAce = function (_PureComponent) {\n _inherits(ReactAce, _PureComponent);\n\n function ReactAce(props) {\n _classCallCheck(this, ReactAce);\n\n var _this = _possibleConstructorReturn(this, (ReactAce.__proto__ || Object.getPrototypeOf(ReactAce)).call(this, props));\n\n ['onChange', 'onFocus', 'onBlur', 'onCopy', 'onPaste', 'onScroll', 'handleOptions'].forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n return _this;\n }\n\n _createClass(ReactAce, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _this2 = this;\n\n var _props = this.props,\n name = _props.name,\n className = _props.className,\n onBeforeLoad = _props.onBeforeLoad,\n mode = _props.mode,\n focus = _props.focus,\n theme = _props.theme,\n fontSize = _props.fontSize,\n value = _props.value,\n defaultValue = _props.defaultValue,\n cursorStart = _props.cursorStart,\n showGutter = _props.showGutter,\n wrapEnabled = _props.wrapEnabled,\n showPrintMargin = _props.showPrintMargin,\n _props$scrollMargin = _props.scrollMargin,\n scrollMargin = _props$scrollMargin === undefined ? [0, 0, 0, 0] : _props$scrollMargin,\n keyboardHandler = _props.keyboardHandler,\n onLoad = _props.onLoad,\n commands = _props.commands,\n annotations = _props.annotations,\n markers = _props.markers;\n\n\n this.editor = _brace2.default.edit(this.refs.editor);\n\n if (onBeforeLoad) {\n onBeforeLoad(_brace2.default);\n }\n\n var editorProps = Object.keys(this.props.editorProps);\n for (var i = 0; i < editorProps.length; i++) {\n this.editor[editorProps[i]] = this.props.editorProps[editorProps[i]];\n }\n\n this.editor.renderer.setScrollMargin(scrollMargin[0], scrollMargin[1], scrollMargin[2], scrollMargin[3]);\n this.editor.getSession().setMode('ace/mode/' + mode);\n this.editor.setTheme('ace/theme/' + theme);\n this.editor.setFontSize(fontSize);\n this.editor.setValue(defaultValue === undefined ? value : defaultValue, cursorStart);\n this.editor.renderer.setShowGutter(showGutter);\n this.editor.getSession().setUseWrapMode(wrapEnabled);\n this.editor.setShowPrintMargin(showPrintMargin);\n this.editor.on('focus', this.onFocus);\n this.editor.on('blur', this.onBlur);\n this.editor.on('copy', this.onCopy);\n this.editor.on('paste', this.onPaste);\n this.editor.on('change', this.onChange);\n this.editor.session.on('changeScrollTop', this.onScroll);\n this.handleOptions(this.props);\n this.editor.getSession().setAnnotations(annotations || []);\n this.handleMarkers(markers || []);\n\n // get a list of possible options to avoid 'misspelled option errors'\n var availableOptions = this.editor.$options;\n for (var _i = 0; _i < editorOptions.length; _i++) {\n var option = editorOptions[_i];\n if (availableOptions.hasOwnProperty(option)) {\n this.editor.setOption(option, this.props[option]);\n }\n }\n\n if (Array.isArray(commands)) {\n commands.forEach(function (command) {\n _this2.editor.commands.addCommand(command);\n });\n }\n\n if (keyboardHandler) {\n this.editor.setKeyboardHandler('ace/keyboard/' + keyboardHandler);\n }\n\n if (className) {\n this.refs.editor.className += ' ' + className;\n }\n\n if (focus) {\n this.editor.focus();\n }\n\n if (onLoad) {\n onLoad(this.editor);\n }\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n var oldProps = this.props;\n\n for (var i = 0; i < editorOptions.length; i++) {\n var option = editorOptions[i];\n if (nextProps[option] !== oldProps[option]) {\n this.editor.setOption(option, nextProps[option]);\n }\n }\n\n if (nextProps.className !== oldProps.className) {\n var appliedClasses = this.refs.editor.className;\n var appliedClassesArray = appliedClasses.trim().split(' ');\n var oldClassesArray = oldProps.className.trim().split(' ');\n oldClassesArray.forEach(function (oldClass) {\n var index = appliedClassesArray.indexOf(oldClass);\n appliedClassesArray.splice(index, 1);\n });\n this.refs.editor.className = ' ' + nextProps.className + ' ' + appliedClassesArray.join(' ');\n }\n\n if (nextProps.mode !== oldProps.mode) {\n this.editor.getSession().setMode('ace/mode/' + nextProps.mode);\n }\n if (nextProps.theme !== oldProps.theme) {\n this.editor.setTheme('ace/theme/' + nextProps.theme);\n }\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n this.editor.setKeyboardHandler('ace/keyboard/' + nextProps.keyboardHandler);\n } else {\n this.editor.setKeyboardHandler(null);\n }\n }\n if (nextProps.fontSize !== oldProps.fontSize) {\n this.editor.setFontSize(nextProps.fontSize);\n }\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n this.editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n this.editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n if (nextProps.showGutter !== oldProps.showGutter) {\n this.editor.renderer.setShowGutter(nextProps.showGutter);\n }\n if (!(0, _lodash2.default)(nextProps.setOptions, oldProps.setOptions)) {\n this.handleOptions(nextProps);\n }\n if (!(0, _lodash2.default)(nextProps.annotations, oldProps.annotations)) {\n this.editor.getSession().setAnnotations(nextProps.annotations || []);\n }\n if (!(0, _lodash2.default)(nextProps.markers, oldProps.markers)) {\n this.handleMarkers(nextProps.markers || []);\n }\n if (!(0, _lodash2.default)(nextProps.scrollMargins, oldProps.scrollMargins)) {\n this.handleScrollMargins(nextProps.scrollMargins);\n }\n if (this.editor && this.editor.getValue() !== nextProps.value) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n this.silent = true;\n var pos = this.editor.session.selection.toJSON();\n this.editor.setValue(nextProps.value, nextProps.cursorStart);\n this.editor.session.selection.fromJSON(pos);\n this.silent = false;\n }\n\n if (nextProps.focus && !oldProps.focus) {\n this.editor.focus();\n }\n if (nextProps.height !== this.props.height) {\n this.editor.resize();\n }\n }\n }, {\n key: 'handleScrollMargins',\n value: function handleScrollMargins() {\n var margins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [0, 0, 0, 0];\n\n this.editor.renderer.setScrollMargins(margins[0], margins[1], margins[2], margins[3]);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.editor.destroy();\n this.editor = null;\n }\n }, {\n key: 'onChange',\n value: function onChange() {\n if (this.props.onChange && !this.silent) {\n var value = this.editor.getValue();\n this.props.onChange(value);\n }\n }\n }, {\n key: 'onFocus',\n value: function onFocus() {\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n }\n }, {\n key: 'onBlur',\n value: function onBlur() {\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n }\n }, {\n key: 'onCopy',\n value: function onCopy(text) {\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n }\n }, {\n key: 'onPaste',\n value: function onPaste(text) {\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n }\n }, {\n key: 'onScroll',\n value: function onScroll() {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n }\n }, {\n key: 'handleOptions',\n value: function handleOptions(props) {\n var setOptions = Object.keys(props.setOptions);\n for (var y = 0; y < setOptions.length; y++) {\n this.editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n }\n }, {\n key: 'handleMarkers',\n value: function handleMarkers(markers) {\n var _this3 = this;\n\n // remove foreground markers\n var currentMarkers = this.editor.getSession().getMarkers(true);\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n this.editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // remove background markers\n currentMarkers = this.editor.getSession().getMarkers(false);\n for (var _i2 in currentMarkers) {\n if (currentMarkers.hasOwnProperty(_i2)) {\n this.editor.getSession().removeMarker(currentMarkers[_i2].id);\n }\n }\n // add new markers\n markers.forEach(function (_ref) {\n var startRow = _ref.startRow,\n startCol = _ref.startCol,\n endRow = _ref.endRow,\n endCol = _ref.endCol,\n className = _ref.className,\n type = _ref.type,\n _ref$inFront = _ref.inFront,\n inFront = _ref$inFront === undefined ? false : _ref$inFront;\n\n var range = new Range(startRow, startCol, endRow, endCol);\n _this3.editor.getSession().addMarker(range, className, type, inFront);\n });\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n name = _props2.name,\n width = _props2.width,\n height = _props2.height,\n style = _props2.style;\n\n var divStyle = _extends({ width: width, height: height }, style);\n return _react2.default.createElement('div', { ref: 'editor',\n id: name,\n style: divStyle\n });\n }\n }]);\n\n return ReactAce;\n}(_react.PureComponent);\n\nexports.default = ReactAce;\n\n\nReactAce.propTypes = {\n mode: _react.PropTypes.string,\n focus: _react.PropTypes.bool,\n theme: _react.PropTypes.string,\n name: _react.PropTypes.string,\n className: _react.PropTypes.string,\n height: _react.PropTypes.string,\n width: _react.PropTypes.string,\n fontSize: _react.PropTypes.oneOfType([_react.PropTypes.number, _react.PropTypes.string]),\n showGutter: _react.PropTypes.bool,\n onChange: _react.PropTypes.func,\n onCopy: _react.PropTypes.func,\n onPaste: _react.PropTypes.func,\n onFocus: _react.PropTypes.func,\n onBlur: _react.PropTypes.func,\n onScroll: _react.PropTypes.func,\n value: _react.PropTypes.string,\n defaultValue: _react.PropTypes.string,\n onLoad: _react.PropTypes.func,\n onBeforeLoad: _react.PropTypes.func,\n minLines: _react.PropTypes.number,\n maxLines: _react.PropTypes.number,\n readOnly: _react.PropTypes.bool,\n highlightActiveLine: _react.PropTypes.bool,\n tabSize: _react.PropTypes.number,\n showPrintMargin: _react.PropTypes.bool,\n cursorStart: _react.PropTypes.number,\n editorProps: _react.PropTypes.object,\n setOptions: _react.PropTypes.object,\n annotations: _react.PropTypes.array,\n markers: _react.PropTypes.array,\n keyboardHandler: _react.PropTypes.string,\n wrapEnabled: _react.PropTypes.bool,\n enableBasicAutocompletion: _react.PropTypes.oneOfType([_react.PropTypes.bool, _react.PropTypes.array]),\n enableLiveAutocompletion: _react.PropTypes.oneOfType([_react.PropTypes.bool, _react.PropTypes.array]),\n commands: _react.PropTypes.array\n};\n\nReactAce.defaultProps = {\n name: 'brace-editor',\n focus: false,\n mode: '',\n theme: '',\n height: '500px',\n width: '500px',\n value: '',\n fontSize: 12,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false\n};","/*global require,module*/\n\"use strict\";\nvar CodeMirror = require(\"codemirror\");\nrequire(\"codemirror/addon/edit/continuelist.js\");\nrequire(\"./codemirror/tablist\");\nrequire(\"codemirror/addon/display/fullscreen.js\");\nrequire(\"codemirror/mode/markdown/markdown.js\");\nrequire(\"codemirror/addon/mode/overlay.js\");\nrequire(\"codemirror/addon/display/placeholder.js\");\nrequire(\"codemirror/addon/selection/mark-selection.js\");\nrequire(\"codemirror/mode/gfm/gfm.js\");\nrequire(\"codemirror/mode/xml/xml.js\");\nvar CodeMirrorSpellChecker = require(\"codemirror-spell-checker\");\nvar marked = require(\"marked\");\n\n\n// Some variables\nvar isMac = /Mac/.test(navigator.platform);\n\n// Mapping of actions that can be bound to keyboard shortcuts or toolbar buttons\nvar bindings = {\n\t\"toggleBold\": toggleBold,\n\t\"toggleItalic\": toggleItalic,\n\t\"drawLink\": drawLink,\n\t\"toggleHeadingSmaller\": toggleHeadingSmaller,\n\t\"toggleHeadingBigger\": toggleHeadingBigger,\n\t\"drawImage\": drawImage,\n\t\"toggleBlockquote\": toggleBlockquote,\n\t\"toggleOrderedList\": toggleOrderedList,\n\t\"toggleUnorderedList\": toggleUnorderedList,\n\t\"toggleCodeBlock\": toggleCodeBlock,\n\t\"togglePreview\": togglePreview,\n\t\"toggleStrikethrough\": toggleStrikethrough,\n\t\"toggleHeading1\": toggleHeading1,\n\t\"toggleHeading2\": toggleHeading2,\n\t\"toggleHeading3\": toggleHeading3,\n\t\"cleanBlock\": cleanBlock,\n\t\"drawTable\": drawTable,\n\t\"drawHorizontalRule\": drawHorizontalRule,\n\t\"undo\": undo,\n\t\"redo\": redo,\n\t\"toggleSideBySide\": toggleSideBySide,\n\t\"toggleFullScreen\": toggleFullScreen\n};\n\nvar shortcuts = {\n\t\"toggleBold\": \"Cmd-B\",\n\t\"toggleItalic\": \"Cmd-I\",\n\t\"drawLink\": \"Cmd-K\",\n\t\"toggleHeadingSmaller\": \"Cmd-H\",\n\t\"toggleHeadingBigger\": \"Shift-Cmd-H\",\n\t\"cleanBlock\": \"Cmd-E\",\n\t\"drawImage\": \"Cmd-Alt-I\",\n\t\"toggleBlockquote\": \"Cmd-'\",\n\t\"toggleOrderedList\": \"Cmd-Alt-L\",\n\t\"toggleUnorderedList\": \"Cmd-L\",\n\t\"toggleCodeBlock\": \"Cmd-Alt-C\",\n\t\"togglePreview\": \"Cmd-P\",\n\t\"toggleSideBySide\": \"F9\",\n\t\"toggleFullScreen\": \"F11\"\n};\n\nvar getBindingName = function(f) {\n\tfor(var key in bindings) {\n\t\tif(bindings[key] === f) {\n\t\t\treturn key;\n\t\t}\n\t}\n\treturn null;\n};\n\nvar isMobile = function() {\n\tvar check = false;\n\t(function(a) {\n\t\tif(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;\n\t})(navigator.userAgent || navigator.vendor || window.opera);\n\treturn check;\n};\n\n\n/**\n * Fix shortcut. Mac use Command, others use Ctrl.\n */\nfunction fixShortcut(name) {\n\tif(isMac) {\n\t\tname = name.replace(\"Ctrl\", \"Cmd\");\n\t} else {\n\t\tname = name.replace(\"Cmd\", \"Ctrl\");\n\t}\n\treturn name;\n}\n\n\n/**\n * Create icon element for toolbar.\n */\nfunction createIcon(options, enableTooltips, shortcuts) {\n\toptions = options || {};\n\tvar el = document.createElement(\"a\");\n\tenableTooltips = (enableTooltips == undefined) ? true : enableTooltips;\n\n\tif(options.title && enableTooltips) {\n\t\tel.title = createTootlip(options.title, options.action, shortcuts);\n\n\t\tif(isMac) {\n\t\t\tel.title = el.title.replace(\"Ctrl\", \"⌘\");\n\t\t\tel.title = el.title.replace(\"Alt\", \"⌥\");\n\t\t}\n\t}\n\n\tel.tabIndex = -1;\n\tel.className = options.className;\n\treturn el;\n}\n\nfunction createSep() {\n\tvar el = document.createElement(\"i\");\n\tel.className = \"separator\";\n\tel.innerHTML = \"|\";\n\treturn el;\n}\n\nfunction createTootlip(title, action, shortcuts) {\n\tvar actionName;\n\tvar tooltip = title;\n\n\tif(action) {\n\t\tactionName = getBindingName(action);\n\t\tif(shortcuts[actionName]) {\n\t\t\ttooltip += \" (\" + fixShortcut(shortcuts[actionName]) + \")\";\n\t\t}\n\t}\n\n\treturn tooltip;\n}\n\n/**\n * The state of CodeMirror at the given position.\n */\nfunction getState(cm, pos) {\n\tpos = pos || cm.getCursor(\"start\");\n\tvar stat = cm.getTokenAt(pos);\n\tif(!stat.type) return {};\n\n\tvar types = stat.type.split(\" \");\n\n\tvar ret = {},\n\t\tdata, text;\n\tfor(var i = 0; i < types.length; i++) {\n\t\tdata = types[i];\n\t\tif(data === \"strong\") {\n\t\t\tret.bold = true;\n\t\t} else if(data === \"variable-2\") {\n\t\t\ttext = cm.getLine(pos.line);\n\t\t\tif(/^\\s*\\d+\\.\\s/.test(text)) {\n\t\t\t\tret[\"ordered-list\"] = true;\n\t\t\t} else {\n\t\t\t\tret[\"unordered-list\"] = true;\n\t\t\t}\n\t\t} else if(data === \"atom\") {\n\t\t\tret.quote = true;\n\t\t} else if(data === \"em\") {\n\t\t\tret.italic = true;\n\t\t} else if(data === \"quote\") {\n\t\t\tret.quote = true;\n\t\t} else if(data === \"strikethrough\") {\n\t\t\tret.strikethrough = true;\n\t\t} else if(data === \"comment\") {\n\t\t\tret.code = true;\n\t\t} else if(data === \"link\") {\n\t\t\tret.link = true;\n\t\t} else if(data === \"tag\") {\n\t\t\tret.image = true;\n\t\t} else if(data.match(/^header(\\-[1-6])?$/)) {\n\t\t\tret[data.replace(\"header\", \"heading\")] = true;\n\t\t}\n\t}\n\treturn ret;\n}\n\n\n// Saved overflow setting\nvar saved_overflow = \"\";\n\n/**\n * Toggle full screen of the editor.\n */\nfunction toggleFullScreen(editor) {\n\t// Set fullscreen\n\tvar cm = editor.codemirror;\n\tcm.setOption(\"fullScreen\", !cm.getOption(\"fullScreen\"));\n\n\n\t// Prevent scrolling on body during fullscreen active\n\tif(cm.getOption(\"fullScreen\")) {\n\t\tsaved_overflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\t} else {\n\t\tdocument.body.style.overflow = saved_overflow;\n\t}\n\n\n\t// Update toolbar class\n\tvar wrap = cm.getWrapperElement();\n\n\tif(!/fullscreen/.test(wrap.previousSibling.className)) {\n\t\twrap.previousSibling.className += \" fullscreen\";\n\t} else {\n\t\twrap.previousSibling.className = wrap.previousSibling.className.replace(/\\s*fullscreen\\b/, \"\");\n\t}\n\n\n\t// Update toolbar button\n\tvar toolbarButton = editor.toolbarElements.fullscreen;\n\n\tif(!/active/.test(toolbarButton.className)) {\n\t\ttoolbarButton.className += \" active\";\n\t} else {\n\t\ttoolbarButton.className = toolbarButton.className.replace(/\\s*active\\s*/g, \"\");\n\t}\n\n\n\t// Hide side by side if needed\n\tvar sidebyside = cm.getWrapperElement().nextSibling;\n\tif(/editor-preview-active-side/.test(sidebyside.className))\n\t\ttoggleSideBySide(editor);\n}\n\n\n/**\n * Action for toggling bold.\n */\nfunction toggleBold(editor) {\n\t_toggleBlock(editor, \"bold\", editor.options.blockStyles.bold);\n}\n\n\n/**\n * Action for toggling italic.\n */\nfunction toggleItalic(editor) {\n\t_toggleBlock(editor, \"italic\", editor.options.blockStyles.italic);\n}\n\n\n/**\n * Action for toggling strikethrough.\n */\nfunction toggleStrikethrough(editor) {\n\t_toggleBlock(editor, \"strikethrough\", \"~~\");\n}\n\n/**\n * Action for toggling code block.\n */\nfunction toggleCodeBlock(editor) {\n\tvar fenceCharsToInsert = editor.options.blockStyles.code;\n\n\tfunction fencing_line(line) {\n\t\t/* return true, if this is a ``` or ~~~ line */\n\t\tif(typeof line !== \"object\") {\n\t\t\tthrow \"fencing_line() takes a 'line' object (not a line number, or line text). Got: \" + typeof line + \": \" + line;\n\t\t}\n\t\treturn line.styles && line.styles[2] && line.styles[2].indexOf(\"formatting-code-block\") !== -1;\n\t}\n\n\tfunction token_state(token) {\n\t\t// base goes an extra level deep when mode backdrops are used, e.g. spellchecker on\n\t\treturn token.state.base.base || token.state.base;\n\t}\n\n\tfunction code_type(cm, line_num, line, firstTok, lastTok) {\n\t\t/*\n\t\t * Return \"single\", \"indented\", \"fenced\" or false\n\t\t *\n\t\t * cm and line_num are required. Others are optional for efficiency\n\t\t * To check in the middle of a line, pass in firstTok yourself.\n\t\t */\n\t\tline = line || cm.getLineHandle(line_num);\n\t\tfirstTok = firstTok || cm.getTokenAt({\n\t\t\tline: line_num,\n\t\t\tch: 1\n\t\t});\n\t\tlastTok = lastTok || (!!line.text && cm.getTokenAt({\n\t\t\tline: line_num,\n\t\t\tch: line.text.length - 1\n\t\t}));\n\t\tvar types = firstTok.type ? firstTok.type.split(\" \") : [];\n\t\tif(lastTok && token_state(lastTok).indentedCode) {\n\t\t\t// have to check last char, since first chars of first line aren\"t marked as indented\n\t\t\treturn \"indented\";\n\t\t} else if(types.indexOf(\"comment\") === -1) {\n\t\t\t// has to be after \"indented\" check, since first chars of first indented line aren\"t marked as such\n\t\t\treturn false;\n\t\t} else if(token_state(firstTok).fencedChars || token_state(lastTok).fencedChars || fencing_line(line)) {\n\t\t\treturn \"fenced\";\n\t\t} else {\n\t\t\treturn \"single\";\n\t\t}\n\t}\n\n\tfunction insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert) {\n\t\tvar start_line_sel = cur_start.line + 1,\n\t\t\tend_line_sel = cur_end.line + 1,\n\t\t\tsel_multi = cur_start.line !== cur_end.line,\n\t\t\trepl_start = fenceCharsToInsert + \"\\n\",\n\t\t\trepl_end = \"\\n\" + fenceCharsToInsert;\n\t\tif(sel_multi) {\n\t\t\tend_line_sel++;\n\t\t}\n\t\t// handle last char including \\n or not\n\t\tif(sel_multi && cur_end.ch === 0) {\n\t\t\trepl_end = fenceCharsToInsert + \"\\n\";\n\t\t\tend_line_sel--;\n\t\t}\n\t\t_replaceSelection(cm, false, [repl_start, repl_end]);\n\t\tcm.setSelection({\n\t\t\tline: start_line_sel,\n\t\t\tch: 0\n\t\t}, {\n\t\t\tline: end_line_sel,\n\t\t\tch: 0\n\t\t});\n\t}\n\n\tvar cm = editor.codemirror,\n\t\tcur_start = cm.getCursor(\"start\"),\n\t\tcur_end = cm.getCursor(\"end\"),\n\t\ttok = cm.getTokenAt({\n\t\t\tline: cur_start.line,\n\t\t\tch: cur_start.ch || 1\n\t\t}), // avoid ch 0 which is a cursor pos but not token\n\t\tline = cm.getLineHandle(cur_start.line),\n\t\tis_code = code_type(cm, cur_start.line, line, tok);\n\tvar block_start, block_end, lineCount;\n\n\tif(is_code === \"single\") {\n\t\t// similar to some SimpleMDE _toggleBlock logic\n\t\tvar start = line.text.slice(0, cur_start.ch).replace(\"`\", \"\"),\n\t\t\tend = line.text.slice(cur_start.ch).replace(\"`\", \"\");\n\t\tcm.replaceRange(start + end, {\n\t\t\tline: cur_start.line,\n\t\t\tch: 0\n\t\t}, {\n\t\t\tline: cur_start.line,\n\t\t\tch: 99999999999999\n\t\t});\n\t\tcur_start.ch--;\n\t\tif(cur_start !== cur_end) {\n\t\t\tcur_end.ch--;\n\t\t}\n\t\tcm.setSelection(cur_start, cur_end);\n\t\tcm.focus();\n\t} else if(is_code === \"fenced\") {\n\t\tif(cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n\t\t\t// use selection\n\n\t\t\t// find the fenced line so we know what type it is (tilde, backticks, number of them)\n\t\t\tfor(block_start = cur_start.line; block_start >= 0; block_start--) {\n\t\t\t\tline = cm.getLineHandle(block_start);\n\t\t\t\tif(fencing_line(line)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar fencedTok = cm.getTokenAt({\n\t\t\t\tline: block_start,\n\t\t\t\tch: 1\n\t\t\t});\n\t\t\tvar fence_chars = token_state(fencedTok).fencedChars;\n\t\t\tvar start_text, start_line;\n\t\t\tvar end_text, end_line;\n\t\t\t// check for selection going up against fenced lines, in which case we don't want to add more fencing\n\t\t\tif(fencing_line(cm.getLineHandle(cur_start.line))) {\n\t\t\t\tstart_text = \"\";\n\t\t\t\tstart_line = cur_start.line;\n\t\t\t} else if(fencing_line(cm.getLineHandle(cur_start.line - 1))) {\n\t\t\t\tstart_text = \"\";\n\t\t\t\tstart_line = cur_start.line - 1;\n\t\t\t} else {\n\t\t\t\tstart_text = fence_chars + \"\\n\";\n\t\t\t\tstart_line = cur_start.line;\n\t\t\t}\n\t\t\tif(fencing_line(cm.getLineHandle(cur_end.line))) {\n\t\t\t\tend_text = \"\";\n\t\t\t\tend_line = cur_end.line;\n\t\t\t\tif(cur_end.ch === 0) {\n\t\t\t\t\tend_line += 1;\n\t\t\t\t}\n\t\t\t} else if(cur_end.ch !== 0 && fencing_line(cm.getLineHandle(cur_end.line + 1))) {\n\t\t\t\tend_text = \"\";\n\t\t\t\tend_line = cur_end.line + 1;\n\t\t\t} else {\n\t\t\t\tend_text = fence_chars + \"\\n\";\n\t\t\t\tend_line = cur_end.line + 1;\n\t\t\t}\n\t\t\tif(cur_end.ch === 0) {\n\t\t\t\t// full last line selected, putting cursor at beginning of next\n\t\t\t\tend_line -= 1;\n\t\t\t}\n\t\t\tcm.operation(function() {\n\t\t\t\t// end line first, so that line numbers don't change\n\t\t\t\tcm.replaceRange(end_text, {\n\t\t\t\t\tline: end_line,\n\t\t\t\t\tch: 0\n\t\t\t\t}, {\n\t\t\t\t\tline: end_line + (end_text ? 0 : 1),\n\t\t\t\t\tch: 0\n\t\t\t\t});\n\t\t\t\tcm.replaceRange(start_text, {\n\t\t\t\t\tline: start_line,\n\t\t\t\t\tch: 0\n\t\t\t\t}, {\n\t\t\t\t\tline: start_line + (start_text ? 0 : 1),\n\t\t\t\t\tch: 0\n\t\t\t\t});\n\t\t\t});\n\t\t\tcm.setSelection({\n\t\t\t\tline: start_line + (start_text ? 1 : 0),\n\t\t\t\tch: 0\n\t\t\t}, {\n\t\t\t\tline: end_line + (start_text ? 1 : -1),\n\t\t\t\tch: 0\n\t\t\t});\n\t\t\tcm.focus();\n\t\t} else {\n\t\t\t// no selection, search for ends of this fenced block\n\t\t\tvar search_from = cur_start.line;\n\t\t\tif(fencing_line(cm.getLineHandle(cur_start.line))) { // gets a little tricky if cursor is right on a fenced line\n\t\t\t\tif(code_type(cm, cur_start.line + 1) === \"fenced\") {\n\t\t\t\t\tblock_start = cur_start.line;\n\t\t\t\t\tsearch_from = cur_start.line + 1; // for searching for \"end\"\n\t\t\t\t} else {\n\t\t\t\t\tblock_end = cur_start.line;\n\t\t\t\t\tsearch_from = cur_start.line - 1; // for searching for \"start\"\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(block_start === undefined) {\n\t\t\t\tfor(block_start = search_from; block_start >= 0; block_start--) {\n\t\t\t\t\tline = cm.getLineHandle(block_start);\n\t\t\t\t\tif(fencing_line(line)) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(block_end === undefined) {\n\t\t\t\tlineCount = cm.lineCount();\n\t\t\t\tfor(block_end = search_from; block_end < lineCount; block_end++) {\n\t\t\t\t\tline = cm.getLineHandle(block_end);\n\t\t\t\t\tif(fencing_line(line)) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcm.operation(function() {\n\t\t\t\tcm.replaceRange(\"\", {\n\t\t\t\t\tline: block_start,\n\t\t\t\t\tch: 0\n\t\t\t\t}, {\n\t\t\t\t\tline: block_start + 1,\n\t\t\t\t\tch: 0\n\t\t\t\t});\n\t\t\t\tcm.replaceRange(\"\", {\n\t\t\t\t\tline: block_end - 1,\n\t\t\t\t\tch: 0\n\t\t\t\t}, {\n\t\t\t\t\tline: block_end,\n\t\t\t\t\tch: 0\n\t\t\t\t});\n\t\t\t});\n\t\t\tcm.focus();\n\t\t}\n\t} else if(is_code === \"indented\") {\n\t\tif(cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n\t\t\t// use selection\n\t\t\tblock_start = cur_start.line;\n\t\t\tblock_end = cur_end.line;\n\t\t\tif(cur_end.ch === 0) {\n\t\t\t\tblock_end--;\n\t\t\t}\n\t\t} else {\n\t\t\t// no selection, search for ends of this indented block\n\t\t\tfor(block_start = cur_start.line; block_start >= 0; block_start--) {\n\t\t\t\tline = cm.getLineHandle(block_start);\n\t\t\t\tif(line.text.match(/^\\s*$/)) {\n\t\t\t\t\t// empty or all whitespace - keep going\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tif(code_type(cm, block_start, line) !== \"indented\") {\n\t\t\t\t\t\tblock_start += 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlineCount = cm.lineCount();\n\t\t\tfor(block_end = cur_start.line; block_end < lineCount; block_end++) {\n\t\t\t\tline = cm.getLineHandle(block_end);\n\t\t\t\tif(line.text.match(/^\\s*$/)) {\n\t\t\t\t\t// empty or all whitespace - keep going\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tif(code_type(cm, block_end, line) !== \"indented\") {\n\t\t\t\t\t\tblock_end -= 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// if we are going to un-indent based on a selected set of lines, and the next line is indented too, we need to\n\t\t// insert a blank line so that the next line(s) continue to be indented code\n\t\tvar next_line = cm.getLineHandle(block_end + 1),\n\t\t\tnext_line_last_tok = next_line && cm.getTokenAt({\n\t\t\t\tline: block_end + 1,\n\t\t\t\tch: next_line.text.length - 1\n\t\t\t}),\n\t\t\tnext_line_indented = next_line_last_tok && token_state(next_line_last_tok).indentedCode;\n\t\tif(next_line_indented) {\n\t\t\tcm.replaceRange(\"\\n\", {\n\t\t\t\tline: block_end + 1,\n\t\t\t\tch: 0\n\t\t\t});\n\t\t}\n\n\t\tfor(var i = block_start; i <= block_end; i++) {\n\t\t\tcm.indentLine(i, \"subtract\"); // TODO: this doesn't get tracked in the history, so can't be undone :(\n\t\t}\n\t\tcm.focus();\n\t} else {\n\t\t// insert code formatting\n\t\tvar no_sel_and_starting_of_line = (cur_start.line === cur_end.line && cur_start.ch === cur_end.ch && cur_start.ch === 0);\n\t\tvar sel_multi = cur_start.line !== cur_end.line;\n\t\tif(no_sel_and_starting_of_line || sel_multi) {\n\t\t\tinsertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert);\n\t\t} else {\n\t\t\t_replaceSelection(cm, false, [\"`\", \"`\"]);\n\t\t}\n\t}\n}\n\n/**\n * Action for toggling blockquote.\n */\nfunction toggleBlockquote(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleLine(cm, \"quote\");\n}\n\n/**\n * Action for toggling heading size: normal -> h1 -> h2 -> h3 -> h4 -> h5 -> h6 -> normal\n */\nfunction toggleHeadingSmaller(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleHeading(cm, \"smaller\");\n}\n\n/**\n * Action for toggling heading size: normal -> h6 -> h5 -> h4 -> h3 -> h2 -> h1 -> normal\n */\nfunction toggleHeadingBigger(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleHeading(cm, \"bigger\");\n}\n\n/**\n * Action for toggling heading size 1\n */\nfunction toggleHeading1(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleHeading(cm, undefined, 1);\n}\n\n/**\n * Action for toggling heading size 2\n */\nfunction toggleHeading2(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleHeading(cm, undefined, 2);\n}\n\n/**\n * Action for toggling heading size 3\n */\nfunction toggleHeading3(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleHeading(cm, undefined, 3);\n}\n\n\n/**\n * Action for toggling ul.\n */\nfunction toggleUnorderedList(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleLine(cm, \"unordered-list\");\n}\n\n\n/**\n * Action for toggling ol.\n */\nfunction toggleOrderedList(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleLine(cm, \"ordered-list\");\n}\n\n/**\n * Action for clean block (remove headline, list, blockquote code, markers)\n */\nfunction cleanBlock(editor) {\n\tvar cm = editor.codemirror;\n\t_cleanBlock(cm);\n}\n\n/**\n * Action for drawing a link.\n */\nfunction drawLink(editor) {\n\tvar cm = editor.codemirror;\n\tvar stat = getState(cm);\n\tvar options = editor.options;\n\tvar url = \"http://\";\n\tif(options.promptURLs) {\n\t\turl = prompt(options.promptTexts.link);\n\t\tif(!url) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t_replaceSelection(cm, stat.link, options.insertTexts.link, url);\n}\n\n/**\n * Action for drawing an img.\n */\nfunction drawImage(editor) {\n\tvar cm = editor.codemirror;\n\tvar stat = getState(cm);\n\tvar options = editor.options;\n\tvar url = \"http://\";\n\tif(options.promptURLs) {\n\t\turl = prompt(options.promptTexts.image);\n\t\tif(!url) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t_replaceSelection(cm, stat.image, options.insertTexts.image, url);\n}\n\n/**\n * Action for drawing a table.\n */\nfunction drawTable(editor) {\n\tvar cm = editor.codemirror;\n\tvar stat = getState(cm);\n\tvar options = editor.options;\n\t_replaceSelection(cm, stat.table, options.insertTexts.table);\n}\n\n/**\n * Action for drawing a horizontal rule.\n */\nfunction drawHorizontalRule(editor) {\n\tvar cm = editor.codemirror;\n\tvar stat = getState(cm);\n\tvar options = editor.options;\n\t_replaceSelection(cm, stat.image, options.insertTexts.horizontalRule);\n}\n\n\n/**\n * Undo action.\n */\nfunction undo(editor) {\n\tvar cm = editor.codemirror;\n\tcm.undo();\n\tcm.focus();\n}\n\n\n/**\n * Redo action.\n */\nfunction redo(editor) {\n\tvar cm = editor.codemirror;\n\tcm.redo();\n\tcm.focus();\n}\n\n\n/**\n * Toggle side by side preview\n */\nfunction toggleSideBySide(editor) {\n\tvar cm = editor.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\tvar preview = wrapper.nextSibling;\n\tvar toolbarButton = editor.toolbarElements[\"side-by-side\"];\n\tvar useSideBySideListener = false;\n\tif(/editor-preview-active-side/.test(preview.className)) {\n\t\tpreview.className = preview.className.replace(\n\t\t\t/\\s*editor-preview-active-side\\s*/g, \"\"\n\t\t);\n\t\ttoolbarButton.className = toolbarButton.className.replace(/\\s*active\\s*/g, \"\");\n\t\twrapper.className = wrapper.className.replace(/\\s*CodeMirror-sided\\s*/g, \" \");\n\t} else {\n\t\t// When the preview button is clicked for the first time,\n\t\t// give some time for the transition from editor.css to fire and the view to slide from right to left,\n\t\t// instead of just appearing.\n\t\tsetTimeout(function() {\n\t\t\tif(!cm.getOption(\"fullScreen\"))\n\t\t\t\ttoggleFullScreen(editor);\n\t\t\tpreview.className += \" editor-preview-active-side\";\n\t\t}, 1);\n\t\ttoolbarButton.className += \" active\";\n\t\twrapper.className += \" CodeMirror-sided\";\n\t\tuseSideBySideListener = true;\n\t}\n\n\t// Hide normal preview if active\n\tvar previewNormal = wrapper.lastChild;\n\tif(/editor-preview-active/.test(previewNormal.className)) {\n\t\tpreviewNormal.className = previewNormal.className.replace(\n\t\t\t/\\s*editor-preview-active\\s*/g, \"\"\n\t\t);\n\t\tvar toolbar = editor.toolbarElements.preview;\n\t\tvar toolbar_div = wrapper.previousSibling;\n\t\ttoolbar.className = toolbar.className.replace(/\\s*active\\s*/g, \"\");\n\t\ttoolbar_div.className = toolbar_div.className.replace(/\\s*disabled-for-preview*/g, \"\");\n\t}\n\n\tvar sideBySideRenderingFunction = function() {\n\t\tpreview.innerHTML = editor.options.previewRender(editor.value(), preview);\n\t};\n\n\tif(!cm.sideBySideRenderingFunction) {\n\t\tcm.sideBySideRenderingFunction = sideBySideRenderingFunction;\n\t}\n\n\tif(useSideBySideListener) {\n\t\tpreview.innerHTML = editor.options.previewRender(editor.value(), preview);\n\t\tcm.on(\"update\", cm.sideBySideRenderingFunction);\n\t} else {\n\t\tcm.off(\"update\", cm.sideBySideRenderingFunction);\n\t}\n\n\t// Refresh to fix selection being off (#309)\n\tcm.refresh();\n}\n\n\n/**\n * Preview action.\n */\nfunction togglePreview(editor) {\n\tvar cm = editor.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\tvar toolbar_div = wrapper.previousSibling;\n\tvar toolbar = editor.options.toolbar ? editor.toolbarElements.preview : false;\n\tvar preview = wrapper.lastChild;\n\tif(!preview || !/editor-preview/.test(preview.className)) {\n\t\tpreview = document.createElement(\"div\");\n\t\tpreview.className = \"editor-preview\";\n\t\twrapper.appendChild(preview);\n\t}\n\tif(/editor-preview-active/.test(preview.className)) {\n\t\tpreview.className = preview.className.replace(\n\t\t\t/\\s*editor-preview-active\\s*/g, \"\"\n\t\t);\n\t\tif(toolbar) {\n\t\t\ttoolbar.className = toolbar.className.replace(/\\s*active\\s*/g, \"\");\n\t\t\ttoolbar_div.className = toolbar_div.className.replace(/\\s*disabled-for-preview*/g, \"\");\n\t\t}\n\t} else {\n\t\t// When the preview button is clicked for the first time,\n\t\t// give some time for the transition from editor.css to fire and the view to slide from right to left,\n\t\t// instead of just appearing.\n\t\tsetTimeout(function() {\n\t\t\tpreview.className += \" editor-preview-active\";\n\t\t}, 1);\n\t\tif(toolbar) {\n\t\t\ttoolbar.className += \" active\";\n\t\t\ttoolbar_div.className += \" disabled-for-preview\";\n\t\t}\n\t}\n\tpreview.innerHTML = editor.options.previewRender(editor.value(), preview);\n\n\t// Turn off side by side if needed\n\tvar sidebyside = cm.getWrapperElement().nextSibling;\n\tif(/editor-preview-active-side/.test(sidebyside.className))\n\t\ttoggleSideBySide(editor);\n}\n\nfunction _replaceSelection(cm, active, startEnd, url) {\n\tif(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))\n\t\treturn;\n\n\tvar text;\n\tvar start = startEnd[0];\n\tvar end = startEnd[1];\n\tvar startPoint = cm.getCursor(\"start\");\n\tvar endPoint = cm.getCursor(\"end\");\n\tif(url) {\n\t\tend = end.replace(\"#url#\", url);\n\t}\n\tif(active) {\n\t\ttext = cm.getLine(startPoint.line);\n\t\tstart = text.slice(0, startPoint.ch);\n\t\tend = text.slice(startPoint.ch);\n\t\tcm.replaceRange(start + end, {\n\t\t\tline: startPoint.line,\n\t\t\tch: 0\n\t\t});\n\t} else {\n\t\ttext = cm.getSelection();\n\t\tcm.replaceSelection(start + text + end);\n\n\t\tstartPoint.ch += start.length;\n\t\tif(startPoint !== endPoint) {\n\t\t\tendPoint.ch += start.length;\n\t\t}\n\t}\n\tcm.setSelection(startPoint, endPoint);\n\tcm.focus();\n}\n\n\nfunction _toggleHeading(cm, direction, size) {\n\tif(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))\n\t\treturn;\n\n\tvar startPoint = cm.getCursor(\"start\");\n\tvar endPoint = cm.getCursor(\"end\");\n\tfor(var i = startPoint.line; i <= endPoint.line; i++) {\n\t\t(function(i) {\n\t\t\tvar text = cm.getLine(i);\n\t\t\tvar currHeadingLevel = text.search(/[^#]/);\n\n\t\t\tif(direction !== undefined) {\n\t\t\t\tif(currHeadingLevel <= 0) {\n\t\t\t\t\tif(direction == \"bigger\") {\n\t\t\t\t\t\ttext = \"###### \" + text;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = \"# \" + text;\n\t\t\t\t\t}\n\t\t\t\t} else if(currHeadingLevel == 6 && direction == \"smaller\") {\n\t\t\t\t\ttext = text.substr(7);\n\t\t\t\t} else if(currHeadingLevel == 1 && direction == \"bigger\") {\n\t\t\t\t\ttext = text.substr(2);\n\t\t\t\t} else {\n\t\t\t\t\tif(direction == \"bigger\") {\n\t\t\t\t\t\ttext = text.substr(1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = \"#\" + text;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(size == 1) {\n\t\t\t\t\tif(currHeadingLevel <= 0) {\n\t\t\t\t\t\ttext = \"# \" + text;\n\t\t\t\t\t} else if(currHeadingLevel == size) {\n\t\t\t\t\t\ttext = text.substr(currHeadingLevel + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = \"# \" + text.substr(currHeadingLevel + 1);\n\t\t\t\t\t}\n\t\t\t\t} else if(size == 2) {\n\t\t\t\t\tif(currHeadingLevel <= 0) {\n\t\t\t\t\t\ttext = \"## \" + text;\n\t\t\t\t\t} else if(currHeadingLevel == size) {\n\t\t\t\t\t\ttext = text.substr(currHeadingLevel + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = \"## \" + text.substr(currHeadingLevel + 1);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif(currHeadingLevel <= 0) {\n\t\t\t\t\t\ttext = \"### \" + text;\n\t\t\t\t\t} else if(currHeadingLevel == size) {\n\t\t\t\t\t\ttext = text.substr(currHeadingLevel + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = \"### \" + text.substr(currHeadingLevel + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcm.replaceRange(text, {\n\t\t\t\tline: i,\n\t\t\t\tch: 0\n\t\t\t}, {\n\t\t\t\tline: i,\n\t\t\t\tch: 99999999999999\n\t\t\t});\n\t\t})(i);\n\t}\n\tcm.focus();\n}\n\n\nfunction _toggleLine(cm, name) {\n\tif(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))\n\t\treturn;\n\n\tvar stat = getState(cm);\n\tvar startPoint = cm.getCursor(\"start\");\n\tvar endPoint = cm.getCursor(\"end\");\n\tvar repl = {\n\t\t\"quote\": /^(\\s*)\\>\\s+/,\n\t\t\"unordered-list\": /^(\\s*)(\\*|\\-|\\+)\\s+/,\n\t\t\"ordered-list\": /^(\\s*)\\d+\\.\\s+/\n\t};\n\tvar map = {\n\t\t\"quote\": \"> \",\n\t\t\"unordered-list\": \"* \",\n\t\t\"ordered-list\": \"1. \"\n\t};\n\tfor(var i = startPoint.line; i <= endPoint.line; i++) {\n\t\t(function(i) {\n\t\t\tvar text = cm.getLine(i);\n\t\t\tif(stat[name]) {\n\t\t\t\ttext = text.replace(repl[name], \"$1\");\n\t\t\t} else {\n\t\t\t\ttext = map[name] + text;\n\t\t\t}\n\t\t\tcm.replaceRange(text, {\n\t\t\t\tline: i,\n\t\t\t\tch: 0\n\t\t\t}, {\n\t\t\t\tline: i,\n\t\t\t\tch: 99999999999999\n\t\t\t});\n\t\t})(i);\n\t}\n\tcm.focus();\n}\n\nfunction _toggleBlock(editor, type, start_chars, end_chars) {\n\tif(/editor-preview-active/.test(editor.codemirror.getWrapperElement().lastChild.className))\n\t\treturn;\n\n\tend_chars = (typeof end_chars === \"undefined\") ? start_chars : end_chars;\n\tvar cm = editor.codemirror;\n\tvar stat = getState(cm);\n\n\tvar text;\n\tvar start = start_chars;\n\tvar end = end_chars;\n\n\tvar startPoint = cm.getCursor(\"start\");\n\tvar endPoint = cm.getCursor(\"end\");\n\n\tif(stat[type]) {\n\t\ttext = cm.getLine(startPoint.line);\n\t\tstart = text.slice(0, startPoint.ch);\n\t\tend = text.slice(startPoint.ch);\n\t\tif(type == \"bold\") {\n\t\t\tstart = start.replace(/(\\*\\*|__)(?![\\s\\S]*(\\*\\*|__))/, \"\");\n\t\t\tend = end.replace(/(\\*\\*|__)/, \"\");\n\t\t} else if(type == \"italic\") {\n\t\t\tstart = start.replace(/(\\*|_)(?![\\s\\S]*(\\*|_))/, \"\");\n\t\t\tend = end.replace(/(\\*|_)/, \"\");\n\t\t} else if(type == \"strikethrough\") {\n\t\t\tstart = start.replace(/(\\*\\*|~~)(?![\\s\\S]*(\\*\\*|~~))/, \"\");\n\t\t\tend = end.replace(/(\\*\\*|~~)/, \"\");\n\t\t}\n\t\tcm.replaceRange(start + end, {\n\t\t\tline: startPoint.line,\n\t\t\tch: 0\n\t\t}, {\n\t\t\tline: startPoint.line,\n\t\t\tch: 99999999999999\n\t\t});\n\n\t\tif(type == \"bold\" || type == \"strikethrough\") {\n\t\t\tstartPoint.ch -= 2;\n\t\t\tif(startPoint !== endPoint) {\n\t\t\t\tendPoint.ch -= 2;\n\t\t\t}\n\t\t} else if(type == \"italic\") {\n\t\t\tstartPoint.ch -= 1;\n\t\t\tif(startPoint !== endPoint) {\n\t\t\t\tendPoint.ch -= 1;\n\t\t\t}\n\t\t}\n\t} else {\n\t\ttext = cm.getSelection();\n\t\tif(type == \"bold\") {\n\t\t\ttext = text.split(\"**\").join(\"\");\n\t\t\ttext = text.split(\"__\").join(\"\");\n\t\t} else if(type == \"italic\") {\n\t\t\ttext = text.split(\"*\").join(\"\");\n\t\t\ttext = text.split(\"_\").join(\"\");\n\t\t} else if(type == \"strikethrough\") {\n\t\t\ttext = text.split(\"~~\").join(\"\");\n\t\t}\n\t\tcm.replaceSelection(start + text + end);\n\n\t\tstartPoint.ch += start_chars.length;\n\t\tendPoint.ch = startPoint.ch + text.length;\n\t}\n\n\tcm.setSelection(startPoint, endPoint);\n\tcm.focus();\n}\n\nfunction _cleanBlock(cm) {\n\tif(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))\n\t\treturn;\n\n\tvar startPoint = cm.getCursor(\"start\");\n\tvar endPoint = cm.getCursor(\"end\");\n\tvar text;\n\n\tfor(var line = startPoint.line; line <= endPoint.line; line++) {\n\t\ttext = cm.getLine(line);\n\t\ttext = text.replace(/^[ ]*([# ]+|\\*|\\-|[> ]+|[0-9]+(.|\\)))[ ]*/, \"\");\n\n\t\tcm.replaceRange(text, {\n\t\t\tline: line,\n\t\t\tch: 0\n\t\t}, {\n\t\t\tline: line,\n\t\t\tch: 99999999999999\n\t\t});\n\t}\n}\n\n// Merge the properties of one object into another.\nfunction _mergeProperties(target, source) {\n\tfor(var property in source) {\n\t\tif(source.hasOwnProperty(property)) {\n\t\t\tif(source[property] instanceof Array) {\n\t\t\t\ttarget[property] = source[property].concat(target[property] instanceof Array ? target[property] : []);\n\t\t\t} else if(\n\t\t\t\tsource[property] !== null &&\n\t\t\t\ttypeof source[property] === \"object\" &&\n\t\t\t\tsource[property].constructor === Object\n\t\t\t) {\n\t\t\t\ttarget[property] = _mergeProperties(target[property] || {}, source[property]);\n\t\t\t} else {\n\t\t\t\ttarget[property] = source[property];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn target;\n}\n\n// Merge an arbitrary number of objects into one.\nfunction extend(target) {\n\tfor(var i = 1; i < arguments.length; i++) {\n\t\ttarget = _mergeProperties(target, arguments[i]);\n\t}\n\n\treturn target;\n}\n\n/* The right word count in respect for CJK. */\nfunction wordCount(data) {\n\tvar pattern = /[a-zA-Z0-9_\\u0392-\\u03c9\\u0410-\\u04F9]+|[\\u4E00-\\u9FFF\\u3400-\\u4dbf\\uf900-\\ufaff\\u3040-\\u309f\\uac00-\\ud7af]+/g;\n\tvar m = data.match(pattern);\n\tvar count = 0;\n\tif(m === null) return count;\n\tfor(var i = 0; i < m.length; i++) {\n\t\tif(m[i].charCodeAt(0) >= 0x4E00) {\n\t\t\tcount += m[i].length;\n\t\t} else {\n\t\t\tcount += 1;\n\t\t}\n\t}\n\treturn count;\n}\n\nvar toolbarBuiltInButtons = {\n\t\"bold\": {\n\t\tname: \"bold\",\n\t\taction: toggleBold,\n\t\tclassName: \"fa fa-bold\",\n\t\ttitle: \"Bold\",\n\t\tdefault: true\n\t},\n\t\"italic\": {\n\t\tname: \"italic\",\n\t\taction: toggleItalic,\n\t\tclassName: \"fa fa-italic\",\n\t\ttitle: \"Italic\",\n\t\tdefault: true\n\t},\n\t\"strikethrough\": {\n\t\tname: \"strikethrough\",\n\t\taction: toggleStrikethrough,\n\t\tclassName: \"fa fa-strikethrough\",\n\t\ttitle: \"Strikethrough\"\n\t},\n\t\"heading\": {\n\t\tname: \"heading\",\n\t\taction: toggleHeadingSmaller,\n\t\tclassName: \"fa fa-header\",\n\t\ttitle: \"Heading\",\n\t\tdefault: true\n\t},\n\t\"heading-smaller\": {\n\t\tname: \"heading-smaller\",\n\t\taction: toggleHeadingSmaller,\n\t\tclassName: \"fa fa-header fa-header-x fa-header-smaller\",\n\t\ttitle: \"Smaller Heading\"\n\t},\n\t\"heading-bigger\": {\n\t\tname: \"heading-bigger\",\n\t\taction: toggleHeadingBigger,\n\t\tclassName: \"fa fa-header fa-header-x fa-header-bigger\",\n\t\ttitle: \"Bigger Heading\"\n\t},\n\t\"heading-1\": {\n\t\tname: \"heading-1\",\n\t\taction: toggleHeading1,\n\t\tclassName: \"fa fa-header fa-header-x fa-header-1\",\n\t\ttitle: \"Big Heading\"\n\t},\n\t\"heading-2\": {\n\t\tname: \"heading-2\",\n\t\taction: toggleHeading2,\n\t\tclassName: \"fa fa-header fa-header-x fa-header-2\",\n\t\ttitle: \"Medium Heading\"\n\t},\n\t\"heading-3\": {\n\t\tname: \"heading-3\",\n\t\taction: toggleHeading3,\n\t\tclassName: \"fa fa-header fa-header-x fa-header-3\",\n\t\ttitle: \"Small Heading\"\n\t},\n\t\"separator-1\": {\n\t\tname: \"separator-1\"\n\t},\n\t\"code\": {\n\t\tname: \"code\",\n\t\taction: toggleCodeBlock,\n\t\tclassName: \"fa fa-code\",\n\t\ttitle: \"Code\"\n\t},\n\t\"quote\": {\n\t\tname: \"quote\",\n\t\taction: toggleBlockquote,\n\t\tclassName: \"fa fa-quote-left\",\n\t\ttitle: \"Quote\",\n\t\tdefault: true\n\t},\n\t\"unordered-list\": {\n\t\tname: \"unordered-list\",\n\t\taction: toggleUnorderedList,\n\t\tclassName: \"fa fa-list-ul\",\n\t\ttitle: \"Generic List\",\n\t\tdefault: true\n\t},\n\t\"ordered-list\": {\n\t\tname: \"ordered-list\",\n\t\taction: toggleOrderedList,\n\t\tclassName: \"fa fa-list-ol\",\n\t\ttitle: \"Numbered List\",\n\t\tdefault: true\n\t},\n\t\"clean-block\": {\n\t\tname: \"clean-block\",\n\t\taction: cleanBlock,\n\t\tclassName: \"fa fa-eraser fa-clean-block\",\n\t\ttitle: \"Clean block\"\n\t},\n\t\"separator-2\": {\n\t\tname: \"separator-2\"\n\t},\n\t\"link\": {\n\t\tname: \"link\",\n\t\taction: drawLink,\n\t\tclassName: \"fa fa-link\",\n\t\ttitle: \"Create Link\",\n\t\tdefault: true\n\t},\n\t\"image\": {\n\t\tname: \"image\",\n\t\taction: drawImage,\n\t\tclassName: \"fa fa-picture-o\",\n\t\ttitle: \"Insert Image\",\n\t\tdefault: true\n\t},\n\t\"table\": {\n\t\tname: \"table\",\n\t\taction: drawTable,\n\t\tclassName: \"fa fa-table\",\n\t\ttitle: \"Insert Table\"\n\t},\n\t\"horizontal-rule\": {\n\t\tname: \"horizontal-rule\",\n\t\taction: drawHorizontalRule,\n\t\tclassName: \"fa fa-minus\",\n\t\ttitle: \"Insert Horizontal Line\"\n\t},\n\t\"separator-3\": {\n\t\tname: \"separator-3\"\n\t},\n\t\"preview\": {\n\t\tname: \"preview\",\n\t\taction: togglePreview,\n\t\tclassName: \"fa fa-eye no-disable\",\n\t\ttitle: \"Toggle Preview\",\n\t\tdefault: true\n\t},\n\t\"side-by-side\": {\n\t\tname: \"side-by-side\",\n\t\taction: toggleSideBySide,\n\t\tclassName: \"fa fa-columns no-disable no-mobile\",\n\t\ttitle: \"Toggle Side by Side\",\n\t\tdefault: true\n\t},\n\t\"fullscreen\": {\n\t\tname: \"fullscreen\",\n\t\taction: toggleFullScreen,\n\t\tclassName: \"fa fa-arrows-alt no-disable no-mobile\",\n\t\ttitle: \"Toggle Fullscreen\",\n\t\tdefault: true\n\t},\n\t\"separator-4\": {\n\t\tname: \"separator-4\"\n\t},\n\t\"guide\": {\n\t\tname: \"guide\",\n\t\taction: \"https://simplemde.com/markdown-guide\",\n\t\tclassName: \"fa fa-question-circle\",\n\t\ttitle: \"Markdown Guide\",\n\t\tdefault: true\n\t},\n\t\"separator-5\": {\n\t\tname: \"separator-5\"\n\t},\n\t\"undo\": {\n\t\tname: \"undo\",\n\t\taction: undo,\n\t\tclassName: \"fa fa-undo no-disable\",\n\t\ttitle: \"Undo\"\n\t},\n\t\"redo\": {\n\t\tname: \"redo\",\n\t\taction: redo,\n\t\tclassName: \"fa fa-repeat no-disable\",\n\t\ttitle: \"Redo\"\n\t}\n};\n\nvar insertTexts = {\n\tlink: [\"[\", \"](#url#)\"],\n\timage: [\"![](\", \"#url#)\"],\n\ttable: [\"\", \"\\n\\n| Column 1 | Column 2 | Column 3 |\\n| -------- | -------- | -------- |\\n| Text | Text | Text |\\n\\n\"],\n\thorizontalRule: [\"\", \"\\n\\n-----\\n\\n\"]\n};\n\nvar promptTexts = {\n\tlink: \"URL for the link:\",\n\timage: \"URL of the image:\"\n};\n\nvar blockStyles = {\n\t\"bold\": \"**\",\n\t\"code\": \"```\",\n\t\"italic\": \"*\"\n};\n\n/**\n * Interface of SimpleMDE.\n */\nfunction SimpleMDE(options) {\n\t// Handle options parameter\n\toptions = options || {};\n\n\n\t// Used later to refer to it\"s parent\n\toptions.parent = this;\n\n\n\t// Check if Font Awesome needs to be auto downloaded\n\tvar autoDownloadFA = true;\n\n\tif(options.autoDownloadFontAwesome === false) {\n\t\tautoDownloadFA = false;\n\t}\n\n\tif(options.autoDownloadFontAwesome !== true) {\n\t\tvar styleSheets = document.styleSheets;\n\t\tfor(var i = 0; i < styleSheets.length; i++) {\n\t\t\tif(!styleSheets[i].href)\n\t\t\t\tcontinue;\n\n\t\t\tif(styleSheets[i].href.indexOf(\"//maxcdn.bootstrapcdn.com/font-awesome/\") > -1) {\n\t\t\t\tautoDownloadFA = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tif(autoDownloadFA) {\n\t\tvar link = document.createElement(\"link\");\n\t\tlink.rel = \"stylesheet\";\n\t\tlink.href = \"https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css\";\n\t\tdocument.getElementsByTagName(\"head\")[0].appendChild(link);\n\t}\n\n\n\t// Find the textarea to use\n\tif(options.element) {\n\t\tthis.element = options.element;\n\t} else if(options.element === null) {\n\t\t// This means that the element option was specified, but no element was found\n\t\tconsole.log(\"SimpleMDE: Error. No element was found.\");\n\t\treturn;\n\t}\n\n\n\t// Handle toolbar\n\tif(options.toolbar === undefined) {\n\t\t// Initialize\n\t\toptions.toolbar = [];\n\n\n\t\t// Loop over the built in buttons, to get the preferred order\n\t\tfor(var key in toolbarBuiltInButtons) {\n\t\t\tif(toolbarBuiltInButtons.hasOwnProperty(key)) {\n\t\t\t\tif(key.indexOf(\"separator-\") != -1) {\n\t\t\t\t\toptions.toolbar.push(\"|\");\n\t\t\t\t}\n\n\t\t\t\tif(toolbarBuiltInButtons[key].default === true || (options.showIcons && options.showIcons.constructor === Array && options.showIcons.indexOf(key) != -1)) {\n\t\t\t\t\toptions.toolbar.push(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// Handle status bar\n\tif(!options.hasOwnProperty(\"status\")) {\n\t\toptions.status = [\"autosave\", \"lines\", \"words\", \"cursor\"];\n\t}\n\n\n\t// Add default preview rendering function\n\tif(!options.previewRender) {\n\t\toptions.previewRender = function(plainText) {\n\t\t\t// Note: \"this\" refers to the options object\n\t\t\treturn this.parent.markdown(plainText);\n\t\t};\n\t}\n\n\n\t// Set default options for parsing config\n\toptions.parsingConfig = extend({\n\t\thighlightFormatting: true // needed for toggleCodeBlock to detect types of code\n\t}, options.parsingConfig || {});\n\n\n\t// Merging the insertTexts, with the given options\n\toptions.insertTexts = extend({}, insertTexts, options.insertTexts || {});\n\n\n\t// Merging the promptTexts, with the given options\n\toptions.promptTexts = promptTexts;\n\n\n\t// Merging the blockStyles, with the given options\n\toptions.blockStyles = extend({}, blockStyles, options.blockStyles || {});\n\n\n\t// Merging the shortcuts, with the given options\n\toptions.shortcuts = extend({}, shortcuts, options.shortcuts || {});\n\n\n\t// Change unique_id to uniqueId for backwards compatibility\n\tif(options.autosave != undefined && options.autosave.unique_id != undefined && options.autosave.unique_id != \"\")\n\t\toptions.autosave.uniqueId = options.autosave.unique_id;\n\n\n\t// Update this options\n\tthis.options = options;\n\n\n\t// Auto render\n\tthis.render();\n\n\n\t// The codemirror component is only available after rendering\n\t// so, the setter for the initialValue can only run after\n\t// the element has been rendered\n\tif(options.initialValue && (!this.options.autosave || this.options.autosave.foundSavedValue !== true)) {\n\t\tthis.value(options.initialValue);\n\t}\n}\n\n/**\n * Default markdown render.\n */\nSimpleMDE.prototype.markdown = function(text) {\n\tif(marked) {\n\t\t// Initialize\n\t\tvar markedOptions = {};\n\n\n\t\t// Update options\n\t\tif(this.options && this.options.renderingConfig && this.options.renderingConfig.singleLineBreaks === false) {\n\t\t\tmarkedOptions.breaks = false;\n\t\t} else {\n\t\t\tmarkedOptions.breaks = true;\n\t\t}\n\n\t\tif(this.options && this.options.renderingConfig && this.options.renderingConfig.codeSyntaxHighlighting === true && window.hljs) {\n\t\t\tmarkedOptions.highlight = function(code) {\n\t\t\t\treturn window.hljs.highlightAuto(code).value;\n\t\t\t};\n\t\t}\n\n\n\t\t// Set options\n\t\tmarked.setOptions(markedOptions);\n\n\n\t\t// Return\n\t\treturn marked(text);\n\t}\n};\n\n/**\n * Render editor to the given element.\n */\nSimpleMDE.prototype.render = function(el) {\n\tif(!el) {\n\t\tel = this.element || document.getElementsByTagName(\"textarea\")[0];\n\t}\n\n\tif(this._rendered && this._rendered === el) {\n\t\t// Already rendered.\n\t\treturn;\n\t}\n\n\tthis.element = el;\n\tvar options = this.options;\n\n\tvar self = this;\n\tvar keyMaps = {};\n\n\tfor(var key in options.shortcuts) {\n\t\t// null stands for \"do not bind this command\"\n\t\tif(options.shortcuts[key] !== null && bindings[key] !== null) {\n\t\t\t(function(key) {\n\t\t\t\tkeyMaps[fixShortcut(options.shortcuts[key])] = function() {\n\t\t\t\t\tbindings[key](self);\n\t\t\t\t};\n\t\t\t})(key);\n\t\t}\n\t}\n\n\tkeyMaps[\"Enter\"] = \"newlineAndIndentContinueMarkdownList\";\n\tkeyMaps[\"Tab\"] = \"tabAndIndentMarkdownList\";\n\tkeyMaps[\"Shift-Tab\"] = \"shiftTabAndUnindentMarkdownList\";\n\tkeyMaps[\"Esc\"] = function(cm) {\n\t\tif(cm.getOption(\"fullScreen\")) toggleFullScreen(self);\n\t};\n\n\tdocument.addEventListener(\"keydown\", function(e) {\n\t\te = e || window.event;\n\n\t\tif(e.keyCode == 27) {\n\t\t\tif(self.codemirror.getOption(\"fullScreen\")) toggleFullScreen(self);\n\t\t}\n\t}, false);\n\n\tvar mode, backdrop;\n\tif(options.spellChecker !== false) {\n\t\tmode = \"spell-checker\";\n\t\tbackdrop = options.parsingConfig;\n\t\tbackdrop.name = \"gfm\";\n\t\tbackdrop.gitHubSpice = false;\n\n\t\tCodeMirrorSpellChecker({\n\t\t\tcodeMirrorInstance: CodeMirror\n\t\t});\n\t} else {\n\t\tmode = options.parsingConfig;\n\t\tmode.name = \"gfm\";\n\t\tmode.gitHubSpice = false;\n\t}\n\n\tthis.codemirror = CodeMirror.fromTextArea(el, {\n\t\tmode: mode,\n\t\tbackdrop: backdrop,\n\t\ttheme: \"paper\",\n\t\ttabSize: (options.tabSize != undefined) ? options.tabSize : 2,\n\t\tindentUnit: (options.tabSize != undefined) ? options.tabSize : 2,\n\t\tindentWithTabs: (options.indentWithTabs === false) ? false : true,\n\t\tlineNumbers: false,\n\t\tautofocus: (options.autofocus === true) ? true : false,\n\t\textraKeys: keyMaps,\n\t\tlineWrapping: (options.lineWrapping === false) ? false : true,\n\t\tallowDropFileTypes: [\"text/plain\"],\n\t\tplaceholder: options.placeholder || el.getAttribute(\"placeholder\") || \"\",\n\t\tstyleSelectedText: (options.styleSelectedText != undefined) ? options.styleSelectedText : true\n\t});\n\n\tif(options.forceSync === true) {\n\t\tvar cm = this.codemirror;\n\t\tcm.on(\"change\", function() {\n\t\t\tcm.save();\n\t\t});\n\t}\n\n\tthis.gui = {};\n\n\tif(options.toolbar !== false) {\n\t\tthis.gui.toolbar = this.createToolbar();\n\t}\n\tif(options.status !== false) {\n\t\tthis.gui.statusbar = this.createStatusbar();\n\t}\n\tif(options.autosave != undefined && options.autosave.enabled === true) {\n\t\tthis.autosave();\n\t}\n\n\tthis.gui.sideBySide = this.createSideBySide();\n\n\tthis._rendered = this.element;\n\n\n\t// Fixes CodeMirror bug (#344)\n\tvar temp_cm = this.codemirror;\n\tsetTimeout(function() {\n\t\ttemp_cm.refresh();\n\t}.bind(temp_cm), 0);\n};\n\n// Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem throw QuotaExceededError. We're going to detect this and set a variable accordingly.\nfunction isLocalStorageAvailable() {\n\tif(typeof localStorage === \"object\") {\n\t\ttry {\n\t\t\tlocalStorage.setItem(\"smde_localStorage\", 1);\n\t\t\tlocalStorage.removeItem(\"smde_localStorage\");\n\t\t} catch(e) {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nSimpleMDE.prototype.autosave = function() {\n\tif(isLocalStorageAvailable()) {\n\t\tvar simplemde = this;\n\n\t\tif(this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == \"\") {\n\t\t\tconsole.log(\"SimpleMDE: You must set a uniqueId to use the autosave feature\");\n\t\t\treturn;\n\t\t}\n\n\t\tif(simplemde.element.form != null && simplemde.element.form != undefined) {\n\t\t\tsimplemde.element.form.addEventListener(\"submit\", function() {\n\t\t\t\tlocalStorage.removeItem(\"smde_\" + simplemde.options.autosave.uniqueId);\n\t\t\t});\n\t\t}\n\n\t\tif(this.options.autosave.loaded !== true) {\n\t\t\tif(typeof localStorage.getItem(\"smde_\" + this.options.autosave.uniqueId) == \"string\" && localStorage.getItem(\"smde_\" + this.options.autosave.uniqueId) != \"\") {\n\t\t\t\tthis.codemirror.setValue(localStorage.getItem(\"smde_\" + this.options.autosave.uniqueId));\n\t\t\t\tthis.options.autosave.foundSavedValue = true;\n\t\t\t}\n\n\t\t\tthis.options.autosave.loaded = true;\n\t\t}\n\n\t\tlocalStorage.setItem(\"smde_\" + this.options.autosave.uniqueId, simplemde.value());\n\n\t\tvar el = document.getElementById(\"autosaved\");\n\t\tif(el != null && el != undefined && el != \"\") {\n\t\t\tvar d = new Date();\n\t\t\tvar hh = d.getHours();\n\t\t\tvar m = d.getMinutes();\n\t\t\tvar dd = \"am\";\n\t\t\tvar h = hh;\n\t\t\tif(h >= 12) {\n\t\t\t\th = hh - 12;\n\t\t\t\tdd = \"pm\";\n\t\t\t}\n\t\t\tif(h == 0) {\n\t\t\t\th = 12;\n\t\t\t}\n\t\t\tm = m < 10 ? \"0\" + m : m;\n\n\t\t\tel.innerHTML = \"Autosaved: \" + h + \":\" + m + \" \" + dd;\n\t\t}\n\n\t\tthis.autosaveTimeoutId = setTimeout(function() {\n\t\t\tsimplemde.autosave();\n\t\t}, this.options.autosave.delay || 10000);\n\t} else {\n\t\tconsole.log(\"SimpleMDE: localStorage not available, cannot autosave\");\n\t}\n};\n\nSimpleMDE.prototype.clearAutosavedValue = function() {\n\tif(isLocalStorageAvailable()) {\n\t\tif(this.options.autosave == undefined || this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == \"\") {\n\t\t\tconsole.log(\"SimpleMDE: You must set a uniqueId to clear the autosave value\");\n\t\t\treturn;\n\t\t}\n\n\t\tlocalStorage.removeItem(\"smde_\" + this.options.autosave.uniqueId);\n\t} else {\n\t\tconsole.log(\"SimpleMDE: localStorage not available, cannot autosave\");\n\t}\n};\n\nSimpleMDE.prototype.createSideBySide = function() {\n\tvar cm = this.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\tvar preview = wrapper.nextSibling;\n\n\tif(!preview || !/editor-preview-side/.test(preview.className)) {\n\t\tpreview = document.createElement(\"div\");\n\t\tpreview.className = \"editor-preview-side\";\n\t\twrapper.parentNode.insertBefore(preview, wrapper.nextSibling);\n\t}\n\n\t// Syncs scroll editor -> preview\n\tvar cScroll = false;\n\tvar pScroll = false;\n\tcm.on(\"scroll\", function(v) {\n\t\tif(cScroll) {\n\t\t\tcScroll = false;\n\t\t\treturn;\n\t\t}\n\t\tpScroll = true;\n\t\tvar height = v.getScrollInfo().height - v.getScrollInfo().clientHeight;\n\t\tvar ratio = parseFloat(v.getScrollInfo().top) / height;\n\t\tvar move = (preview.scrollHeight - preview.clientHeight) * ratio;\n\t\tpreview.scrollTop = move;\n\t});\n\n\t// Syncs scroll preview -> editor\n\tpreview.onscroll = function() {\n\t\tif(pScroll) {\n\t\t\tpScroll = false;\n\t\t\treturn;\n\t\t}\n\t\tcScroll = true;\n\t\tvar height = preview.scrollHeight - preview.clientHeight;\n\t\tvar ratio = parseFloat(preview.scrollTop) / height;\n\t\tvar move = (cm.getScrollInfo().height - cm.getScrollInfo().clientHeight) * ratio;\n\t\tcm.scrollTo(0, move);\n\t};\n\treturn preview;\n};\n\nSimpleMDE.prototype.createToolbar = function(items) {\n\titems = items || this.options.toolbar;\n\n\tif(!items || items.length === 0) {\n\t\treturn;\n\t}\n\tvar i;\n\tfor(i = 0; i < items.length; i++) {\n\t\tif(toolbarBuiltInButtons[items[i]] != undefined) {\n\t\t\titems[i] = toolbarBuiltInButtons[items[i]];\n\t\t}\n\t}\n\n\tvar bar = document.createElement(\"div\");\n\tbar.className = \"editor-toolbar\";\n\n\tvar self = this;\n\n\tvar toolbarData = {};\n\tself.toolbar = items;\n\n\tfor(i = 0; i < items.length; i++) {\n\t\tif(items[i].name == \"guide\" && self.options.toolbarGuideIcon === false)\n\t\t\tcontinue;\n\n\t\tif(self.options.hideIcons && self.options.hideIcons.indexOf(items[i].name) != -1)\n\t\t\tcontinue;\n\n\t\t// Fullscreen does not work well on mobile devices (even tablets)\n\t\t// In the future, hopefully this can be resolved\n\t\tif((items[i].name == \"fullscreen\" || items[i].name == \"side-by-side\") && isMobile())\n\t\t\tcontinue;\n\n\n\t\t// Don't include trailing separators\n\t\tif(items[i] === \"|\") {\n\t\t\tvar nonSeparatorIconsFollow = false;\n\n\t\t\tfor(var x = (i + 1); x < items.length; x++) {\n\t\t\t\tif(items[x] !== \"|\" && (!self.options.hideIcons || self.options.hideIcons.indexOf(items[x].name) == -1)) {\n\t\t\t\t\tnonSeparatorIconsFollow = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!nonSeparatorIconsFollow)\n\t\t\t\tcontinue;\n\t\t}\n\n\n\t\t// Create the icon and append to the toolbar\n\t\t(function(item) {\n\t\t\tvar el;\n\t\t\tif(item === \"|\") {\n\t\t\t\tel = createSep();\n\t\t\t} else {\n\t\t\t\tel = createIcon(item, self.options.toolbarTips, self.options.shortcuts);\n\t\t\t}\n\n\t\t\t// bind events, special for info\n\t\t\tif(item.action) {\n\t\t\t\tif(typeof item.action === \"function\") {\n\t\t\t\t\tel.onclick = function(e) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\titem.action(self);\n\t\t\t\t\t};\n\t\t\t\t} else if(typeof item.action === \"string\") {\n\t\t\t\t\tel.href = item.action;\n\t\t\t\t\tel.target = \"_blank\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttoolbarData[item.name || item] = el;\n\t\t\tbar.appendChild(el);\n\t\t})(items[i]);\n\t}\n\n\tself.toolbarElements = toolbarData;\n\n\tvar cm = this.codemirror;\n\tcm.on(\"cursorActivity\", function() {\n\t\tvar stat = getState(cm);\n\n\t\tfor(var key in toolbarData) {\n\t\t\t(function(key) {\n\t\t\t\tvar el = toolbarData[key];\n\t\t\t\tif(stat[key]) {\n\t\t\t\t\tel.className += \" active\";\n\t\t\t\t} else if(key != \"fullscreen\" && key != \"side-by-side\") {\n\t\t\t\t\tel.className = el.className.replace(/\\s*active\\s*/g, \"\");\n\t\t\t\t}\n\t\t\t})(key);\n\t\t}\n\t});\n\n\tvar cmWrapper = cm.getWrapperElement();\n\tcmWrapper.parentNode.insertBefore(bar, cmWrapper);\n\treturn bar;\n};\n\nSimpleMDE.prototype.createStatusbar = function(status) {\n\t// Initialize\n\tstatus = status || this.options.status;\n\tvar options = this.options;\n\tvar cm = this.codemirror;\n\n\n\t// Make sure the status variable is valid\n\tif(!status || status.length === 0)\n\t\treturn;\n\n\n\t// Set up the built-in items\n\tvar items = [];\n\tvar i, onUpdate, defaultValue;\n\n\tfor(i = 0; i < status.length; i++) {\n\t\t// Reset some values\n\t\tonUpdate = undefined;\n\t\tdefaultValue = undefined;\n\n\n\t\t// Handle if custom or not\n\t\tif(typeof status[i] === \"object\") {\n\t\t\titems.push({\n\t\t\t\tclassName: status[i].className,\n\t\t\t\tdefaultValue: status[i].defaultValue,\n\t\t\t\tonUpdate: status[i].onUpdate\n\t\t\t});\n\t\t} else {\n\t\t\tvar name = status[i];\n\n\t\t\tif(name === \"words\") {\n\t\t\t\tdefaultValue = function(el) {\n\t\t\t\t\tel.innerHTML = wordCount(cm.getValue());\n\t\t\t\t};\n\t\t\t\tonUpdate = function(el) {\n\t\t\t\t\tel.innerHTML = wordCount(cm.getValue());\n\t\t\t\t};\n\t\t\t} else if(name === \"lines\") {\n\t\t\t\tdefaultValue = function(el) {\n\t\t\t\t\tel.innerHTML = cm.lineCount();\n\t\t\t\t};\n\t\t\t\tonUpdate = function(el) {\n\t\t\t\t\tel.innerHTML = cm.lineCount();\n\t\t\t\t};\n\t\t\t} else if(name === \"cursor\") {\n\t\t\t\tdefaultValue = function(el) {\n\t\t\t\t\tel.innerHTML = \"0:0\";\n\t\t\t\t};\n\t\t\t\tonUpdate = function(el) {\n\t\t\t\t\tvar pos = cm.getCursor();\n\t\t\t\t\tel.innerHTML = pos.line + \":\" + pos.ch;\n\t\t\t\t};\n\t\t\t} else if(name === \"autosave\") {\n\t\t\t\tdefaultValue = function(el) {\n\t\t\t\t\tif(options.autosave != undefined && options.autosave.enabled === true) {\n\t\t\t\t\t\tel.setAttribute(\"id\", \"autosaved\");\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\titems.push({\n\t\t\t\tclassName: name,\n\t\t\t\tdefaultValue: defaultValue,\n\t\t\t\tonUpdate: onUpdate\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// Create element for the status bar\n\tvar bar = document.createElement(\"div\");\n\tbar.className = \"editor-statusbar\";\n\n\n\t// Create a new span for each item\n\tfor(i = 0; i < items.length; i++) {\n\t\t// Store in temporary variable\n\t\tvar item = items[i];\n\n\n\t\t// Create span element\n\t\tvar el = document.createElement(\"span\");\n\t\tel.className = item.className;\n\n\n\t\t// Ensure the defaultValue is a function\n\t\tif(typeof item.defaultValue === \"function\") {\n\t\t\titem.defaultValue(el);\n\t\t}\n\n\n\t\t// Ensure the onUpdate is a function\n\t\tif(typeof item.onUpdate === \"function\") {\n\t\t\t// Create a closure around the span of the current action, then execute the onUpdate handler\n\t\t\tthis.codemirror.on(\"update\", (function(el, item) {\n\t\t\t\treturn function() {\n\t\t\t\t\titem.onUpdate(el);\n\t\t\t\t};\n\t\t\t}(el, item)));\n\t\t}\n\n\n\t\t// Append the item to the status bar\n\t\tbar.appendChild(el);\n\t}\n\n\n\t// Insert the status bar into the DOM\n\tvar cmWrapper = this.codemirror.getWrapperElement();\n\tcmWrapper.parentNode.insertBefore(bar, cmWrapper.nextSibling);\n\treturn bar;\n};\n\n/**\n * Get or set the text content.\n */\nSimpleMDE.prototype.value = function(val) {\n\tif(val === undefined) {\n\t\treturn this.codemirror.getValue();\n\t} else {\n\t\tthis.codemirror.getDoc().setValue(val);\n\t\treturn this;\n\t}\n};\n\n\n/**\n * Bind static methods for exports.\n */\nSimpleMDE.toggleBold = toggleBold;\nSimpleMDE.toggleItalic = toggleItalic;\nSimpleMDE.toggleStrikethrough = toggleStrikethrough;\nSimpleMDE.toggleBlockquote = toggleBlockquote;\nSimpleMDE.toggleHeadingSmaller = toggleHeadingSmaller;\nSimpleMDE.toggleHeadingBigger = toggleHeadingBigger;\nSimpleMDE.toggleHeading1 = toggleHeading1;\nSimpleMDE.toggleHeading2 = toggleHeading2;\nSimpleMDE.toggleHeading3 = toggleHeading3;\nSimpleMDE.toggleCodeBlock = toggleCodeBlock;\nSimpleMDE.toggleUnorderedList = toggleUnorderedList;\nSimpleMDE.toggleOrderedList = toggleOrderedList;\nSimpleMDE.cleanBlock = cleanBlock;\nSimpleMDE.drawLink = drawLink;\nSimpleMDE.drawImage = drawImage;\nSimpleMDE.drawTable = drawTable;\nSimpleMDE.drawHorizontalRule = drawHorizontalRule;\nSimpleMDE.undo = undo;\nSimpleMDE.redo = redo;\nSimpleMDE.togglePreview = togglePreview;\nSimpleMDE.toggleSideBySide = toggleSideBySide;\nSimpleMDE.toggleFullScreen = toggleFullScreen;\n\n/**\n * Bind instance methods for exports.\n */\nSimpleMDE.prototype.toggleBold = function() {\n\ttoggleBold(this);\n};\nSimpleMDE.prototype.toggleItalic = function() {\n\ttoggleItalic(this);\n};\nSimpleMDE.prototype.toggleStrikethrough = function() {\n\ttoggleStrikethrough(this);\n};\nSimpleMDE.prototype.toggleBlockquote = function() {\n\ttoggleBlockquote(this);\n};\nSimpleMDE.prototype.toggleHeadingSmaller = function() {\n\ttoggleHeadingSmaller(this);\n};\nSimpleMDE.prototype.toggleHeadingBigger = function() {\n\ttoggleHeadingBigger(this);\n};\nSimpleMDE.prototype.toggleHeading1 = function() {\n\ttoggleHeading1(this);\n};\nSimpleMDE.prototype.toggleHeading2 = function() {\n\ttoggleHeading2(this);\n};\nSimpleMDE.prototype.toggleHeading3 = function() {\n\ttoggleHeading3(this);\n};\nSimpleMDE.prototype.toggleCodeBlock = function() {\n\ttoggleCodeBlock(this);\n};\nSimpleMDE.prototype.toggleUnorderedList = function() {\n\ttoggleUnorderedList(this);\n};\nSimpleMDE.prototype.toggleOrderedList = function() {\n\ttoggleOrderedList(this);\n};\nSimpleMDE.prototype.cleanBlock = function() {\n\tcleanBlock(this);\n};\nSimpleMDE.prototype.drawLink = function() {\n\tdrawLink(this);\n};\nSimpleMDE.prototype.drawImage = function() {\n\tdrawImage(this);\n};\nSimpleMDE.prototype.drawTable = function() {\n\tdrawTable(this);\n};\nSimpleMDE.prototype.drawHorizontalRule = function() {\n\tdrawHorizontalRule(this);\n};\nSimpleMDE.prototype.undo = function() {\n\tundo(this);\n};\nSimpleMDE.prototype.redo = function() {\n\tredo(this);\n};\nSimpleMDE.prototype.togglePreview = function() {\n\ttogglePreview(this);\n};\nSimpleMDE.prototype.toggleSideBySide = function() {\n\ttoggleSideBySide(this);\n};\nSimpleMDE.prototype.toggleFullScreen = function() {\n\ttoggleFullScreen(this);\n};\n\nSimpleMDE.prototype.isPreviewActive = function() {\n\tvar cm = this.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\tvar preview = wrapper.lastChild;\n\n\treturn /editor-preview-active/.test(preview.className);\n};\n\nSimpleMDE.prototype.isSideBySideActive = function() {\n\tvar cm = this.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\tvar preview = wrapper.nextSibling;\n\n\treturn /editor-preview-active-side/.test(preview.className);\n};\n\nSimpleMDE.prototype.isFullscreenActive = function() {\n\tvar cm = this.codemirror;\n\n\treturn cm.getOption(\"fullScreen\");\n};\n\nSimpleMDE.prototype.getState = function() {\n\tvar cm = this.codemirror;\n\n\treturn getState(cm);\n};\n\nSimpleMDE.prototype.toTextArea = function() {\n\tvar cm = this.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\n\tif(wrapper.parentNode) {\n\t\tif(this.gui.toolbar) {\n\t\t\twrapper.parentNode.removeChild(this.gui.toolbar);\n\t\t}\n\t\tif(this.gui.statusbar) {\n\t\t\twrapper.parentNode.removeChild(this.gui.statusbar);\n\t\t}\n\t\tif(this.gui.sideBySide) {\n\t\t\twrapper.parentNode.removeChild(this.gui.sideBySide);\n\t\t}\n\t}\n\n\tcm.toTextArea();\n\n\tif(this.autosaveTimeoutId) {\n\t\tclearTimeout(this.autosaveTimeoutId);\n\t\tthis.autosaveTimeoutId = undefined;\n\t\tthis.clearAutosavedValue();\n\t}\n};\n\nmodule.exports = SimpleMDE;","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Dropzone\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"Dropzone\"] = factory(root[\"react\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \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\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 65eb4442d565fc2a5c80","/* eslint prefer-template: 0 */\nimport React from 'react';\nimport accepts from 'attr-accept';\nimport getDataTransferItems from './getDataTransferItems';\n\nconst supportMultiple = (typeof document !== 'undefined' && document && document.createElement) ?\n 'multiple' in document.createElement('input') :\n true;\n\nclass Dropzone extends React.Component {\n static renderChildren(children, isDragActive, isDragReject) {\n if (typeof children === 'function') {\n return children({ isDragActive, isDragReject });\n }\n return children;\n }\n\n constructor(props, context) {\n super(props, context);\n this.onClick = this.onClick.bind(this);\n this.onDragStart = this.onDragStart.bind(this);\n this.onDragEnter = this.onDragEnter.bind(this);\n this.onDragLeave = this.onDragLeave.bind(this);\n this.onDragOver = this.onDragOver.bind(this);\n this.onDrop = this.onDrop.bind(this);\n this.onFileDialogCancel = this.onFileDialogCancel.bind(this);\n this.fileAccepted = this.fileAccepted.bind(this);\n this.isFileDialogActive = false;\n this.state = {\n isDragActive: false\n };\n }\n\n componentDidMount() {\n this.enterCounter = 0;\n // Tried implementing addEventListener, but didn't work out\n document.body.onfocus = this.onFileDialogCancel;\n }\n\n componentWillUnmount() {\n // Can be replaced with removeEventListener, if addEventListener works\n document.body.onfocus = null;\n }\n\n onDragStart(e) {\n if (this.props.onDragStart) {\n this.props.onDragStart.call(this, e);\n }\n }\n\n onDragEnter(e) {\n e.preventDefault();\n\n // Count the dropzone and any children that are entered.\n ++this.enterCounter;\n\n const allFilesAccepted = this.allFilesAccepted(getDataTransferItems(e, this.props.multiple));\n\n this.setState({\n isDragActive: allFilesAccepted,\n isDragReject: !allFilesAccepted\n });\n\n if (this.props.onDragEnter) {\n this.props.onDragEnter.call(this, e);\n }\n }\n\n onDragOver(e) { // eslint-disable-line class-methods-use-this\n e.preventDefault();\n e.stopPropagation();\n try {\n e.dataTransfer.dropEffect = 'copy'; // eslint-disable-line no-param-reassign\n } catch (err) {\n // continue regardless of error\n }\n\n if (this.props.onDragOver) {\n this.props.onDragOver.call(this, e);\n }\n return false;\n }\n\n onDragLeave(e) {\n e.preventDefault();\n\n // Only deactivate once the dropzone and all children was left.\n if (--this.enterCounter > 0) {\n return;\n }\n\n this.setState({\n isDragActive: false,\n isDragReject: false\n });\n\n if (this.props.onDragLeave) {\n this.props.onDragLeave.call(this, e);\n }\n }\n\n onDrop(e) {\n const { onDrop, onDropAccepted, onDropRejected, multiple, disablePreview } = this.props;\n const fileList = getDataTransferItems(e, multiple);\n const acceptedFiles = [];\n const rejectedFiles = [];\n\n // Stop default browser behavior\n e.preventDefault();\n\n // Reset the counter along with the drag on a drop.\n this.enterCounter = 0;\n this.isFileDialogActive = false;\n\n fileList.forEach((file) => {\n if (!disablePreview) {\n file.preview = window.URL.createObjectURL(file); // eslint-disable-line no-param-reassign\n }\n\n if (this.fileAccepted(file) && this.fileMatchSize(file)) {\n acceptedFiles.push(file);\n } else {\n rejectedFiles.push(file);\n }\n });\n\n if (onDrop) {\n onDrop.call(this, acceptedFiles, rejectedFiles, e);\n }\n\n if (rejectedFiles.length > 0 && onDropRejected) {\n onDropRejected.call(this, rejectedFiles, e);\n }\n\n if (acceptedFiles.length > 0 && onDropAccepted) {\n onDropAccepted.call(this, acceptedFiles, e);\n }\n\n // Reset drag state\n this.setState({\n isDragActive: false,\n isDragReject: false\n });\n }\n\n onClick(e) {\n const { onClick, disableClick } = this.props;\n if (!disableClick) {\n e.stopPropagation();\n this.open();\n if (onClick) {\n onClick.call(this, e);\n }\n }\n }\n\n onFileDialogCancel() {\n // timeout will not recognize context of this method\n const { onFileDialogCancel } = this.props;\n const { fileInputEl } = this;\n let { isFileDialogActive } = this;\n // execute the timeout only if the onFileDialogCancel is defined and FileDialog\n // is opened in the browser\n if (onFileDialogCancel && isFileDialogActive) {\n setTimeout(() => {\n // Returns an object as FileList\n const FileList = fileInputEl.files;\n if (!FileList.length) {\n isFileDialogActive = false;\n onFileDialogCancel();\n }\n }, 300);\n }\n }\n\n fileAccepted(file) {\n return accepts(file, this.props.accept);\n }\n\n fileMatchSize(file) {\n return file.size <= this.props.maxSize && file.size >= this.props.minSize;\n }\n\n allFilesAccepted(files) {\n return files.every(this.fileAccepted);\n }\n\n open() {\n this.isFileDialogActive = true;\n this.fileInputEl.value = null;\n this.fileInputEl.click();\n }\n\n render() {\n const {\n accept,\n activeClassName,\n inputProps,\n multiple,\n name,\n rejectClassName,\n children,\n ...rest\n } = this.props;\n\n let {\n activeStyle,\n className,\n rejectStyle,\n style,\n ...props // eslint-disable-line prefer-const\n } = rest;\n\n const { isDragActive, isDragReject } = this.state;\n\n className = className || '';\n\n if (isDragActive && activeClassName) {\n className += ' ' + activeClassName;\n }\n if (isDragReject && rejectClassName) {\n className += ' ' + rejectClassName;\n }\n\n if (!className && !style && !activeStyle && !rejectStyle) {\n style = {\n width: 200,\n height: 200,\n borderWidth: 2,\n borderColor: '#666',\n borderStyle: 'dashed',\n borderRadius: 5\n };\n activeStyle = {\n borderStyle: 'solid',\n backgroundColor: '#eee'\n };\n rejectStyle = {\n borderStyle: 'solid',\n backgroundColor: '#ffdddd'\n };\n }\n\n let appliedStyle;\n if (activeStyle && isDragActive) {\n appliedStyle = {\n ...style,\n ...activeStyle\n };\n } else if (rejectStyle && isDragReject) {\n appliedStyle = {\n ...style,\n ...rejectStyle\n };\n } else {\n appliedStyle = {\n ...style\n };\n }\n\n const inputAttributes = {\n accept,\n type: 'file',\n style: { display: 'none' },\n multiple: supportMultiple && multiple,\n ref: el => this.fileInputEl = el, // eslint-disable-line\n onChange: this.onDrop\n };\n\n if (name && name.length) {\n inputAttributes.name = name;\n }\n\n // Remove custom properties before passing them to the wrapper div element\n const customProps = [\n 'acceptedFiles',\n 'disablePreview',\n 'disableClick',\n 'onDropAccepted',\n 'onDropRejected',\n 'onFileDialogCancel',\n 'maxSize',\n 'minSize'\n ];\n const divProps = { ...props };\n customProps.forEach(prop => delete divProps[prop]);\n\n return (\n <div\n className={className}\n style={appliedStyle}\n {...divProps/* expand user provided props first so event handlers are never overridden */}\n onClick={this.onClick}\n onDragStart={this.onDragStart}\n onDragEnter={this.onDragEnter}\n onDragOver={this.onDragOver}\n onDragLeave={this.onDragLeave}\n onDrop={this.onDrop}\n >\n {Dropzone.renderChildren(children, isDragActive, isDragReject)}\n <input\n {...inputProps/* expand user provided inputProps first so inputAttributes override them */}\n {...inputAttributes}\n />\n </div>\n );\n }\n}\n\nDropzone.defaultProps = {\n disablePreview: false,\n disableClick: false,\n multiple: true,\n maxSize: Infinity,\n minSize: 0\n};\n\nDropzone.propTypes = {\n onClick: React.PropTypes.func,\n onDrop: React.PropTypes.func,\n onDropAccepted: React.PropTypes.func,\n onDropRejected: React.PropTypes.func,\n onDragStart: React.PropTypes.func,\n onDragEnter: React.PropTypes.func,\n onDragOver: React.PropTypes.func,\n onDragLeave: React.PropTypes.func,\n\n children: React.PropTypes.oneOfType([\n React.PropTypes.node,\n React.PropTypes.func\n ]), // Contents of the dropzone\n style: React.PropTypes.object, // CSS styles to apply\n activeStyle: React.PropTypes.object, // CSS styles to apply when drop will be accepted\n rejectStyle: React.PropTypes.object, // CSS styles to apply when drop will be rejected\n className: React.PropTypes.string, // Optional className\n activeClassName: React.PropTypes.string, // className for accepted state\n rejectClassName: React.PropTypes.string, // className for rejected state\n\n disablePreview: React.PropTypes.bool, // Enable/disable preview generation\n disableClick: React.PropTypes.bool, // Disallow clicking on the dropzone container to open file dialog\n onFileDialogCancel: React.PropTypes.func, // Provide a callback on clicking the cancel button of the file dialog\n\n inputProps: React.PropTypes.object, // Pass additional attributes to the <input type=\"file\"/> tag\n multiple: React.PropTypes.bool, // Allow dropping multiple files\n accept: React.PropTypes.string, // Allow specific types of files. See https://github.com/okonet/attr-accept for more information\n name: React.PropTypes.string, // name attribute for the input tag\n maxSize: React.PropTypes.number,\n minSize: React.PropTypes.number\n};\n\nexport default Dropzone;\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react\"\n// module id = 1\n// module chunks = 0","module.exports=function(t){function n(e){if(r[e])return r[e].exports;var o=r[e]={exports:{},id:e,loaded:!1};return t[e].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=t,n.c=r,n.p=\"\",n(0)}([function(t,n,r){\"use strict\";n.__esModule=!0,r(8),r(9),n[\"default\"]=function(t,n){if(t&&n){var r=function(){var r=Array.isArray(n)?n:n.split(\",\"),e=t.name||\"\",o=t.type||\"\",i=o.replace(/\\/.*$/,\"\");return{v:r.some(function(t){var n=t.trim();return\".\"===n.charAt(0)?e.toLowerCase().endsWith(n.toLowerCase()):/\\/\\*$/.test(n)?i===n.replace(/\\/.*$/,\"\"):o===n})}}();if(\"object\"==typeof r)return r.v}return!0},t.exports=n[\"default\"]},function(t,n){var r=t.exports={version:\"1.2.2\"};\"number\"==typeof __e&&(__e=r)},function(t,n){var r=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=r)},function(t,n,r){var e=r(2),o=r(1),i=r(4),u=r(19),c=\"prototype\",f=function(t,n){return function(){return t.apply(n,arguments)}},s=function(t,n,r){var a,p,l,y,d=t&s.G,h=t&s.P,v=d?e:t&s.S?e[n]||(e[n]={}):(e[n]||{})[c],x=d?o:o[n]||(o[n]={});d&&(r=n);for(a in r)p=!(t&s.F)&&v&&a in v,l=(p?v:r)[a],y=t&s.B&&p?f(l,e):h&&\"function\"==typeof l?f(Function.call,l):l,v&&!p&&u(v,a,l),x[a]!=l&&i(x,a,y),h&&((x[c]||(x[c]={}))[a]=l)};e.core=o,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,t.exports=s},function(t,n,r){var e=r(5),o=r(18);t.exports=r(22)?function(t,n,r){return e.setDesc(t,n,o(1,r))}:function(t,n,r){return t[n]=r,t}},function(t,n){var r=Object;t.exports={create:r.create,getProto:r.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:r.getOwnPropertyDescriptor,setDesc:r.defineProperty,setDescs:r.defineProperties,getKeys:r.keys,getNames:r.getOwnPropertyNames,getSymbols:r.getOwnPropertySymbols,each:[].forEach}},function(t,n){var r=0,e=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++r+e).toString(36))}},function(t,n,r){var e=r(20)(\"wks\"),o=r(2).Symbol;t.exports=function(t){return e[t]||(e[t]=o&&o[t]||(o||r(6))(\"Symbol.\"+t))}},function(t,n,r){r(26),t.exports=r(1).Array.some},function(t,n,r){r(25),t.exports=r(1).String.endsWith},function(t,n){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},function(t,n){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,n,r){var e=r(10);t.exports=function(t,n,r){if(e(t),void 0===n)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,o){return t.call(n,r,e,o)}}return function(){return t.apply(n,arguments)}}},function(t,n){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on \"+t);return t}},function(t,n,r){t.exports=function(t){var n=/./;try{\"/./\"[t](n)}catch(e){try{return n[r(7)(\"match\")]=!1,!\"/./\"[t](n)}catch(o){}}return!0}},function(t,n){t.exports=function(t){try{return!!t()}catch(n){return!0}}},function(t,n){t.exports=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t}},function(t,n,r){var e=r(16),o=r(11),i=r(7)(\"match\");t.exports=function(t){var n;return e(t)&&(void 0!==(n=t[i])?!!n:\"RegExp\"==o(t))}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n,r){var e=r(2),o=r(4),i=r(6)(\"src\"),u=\"toString\",c=Function[u],f=(\"\"+c).split(u);r(1).inspectSource=function(t){return c.call(t)},(t.exports=function(t,n,r,u){\"function\"==typeof r&&(o(r,i,t[n]?\"\"+t[n]:f.join(String(n))),\"name\"in r||(r.name=n)),t===e?t[n]=r:(u||delete t[n],o(t,n,r))})(Function.prototype,u,function(){return\"function\"==typeof this&&this[i]||c.call(this)})},function(t,n,r){var e=r(2),o=\"__core-js_shared__\",i=e[o]||(e[o]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,n,r){var e=r(17),o=r(13);t.exports=function(t,n,r){if(e(n))throw TypeError(\"String#\"+r+\" doesn't accept regex!\");return String(o(t))}},function(t,n,r){t.exports=!r(15)(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a})},function(t,n){var r=Math.ceil,e=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?e:r)(t)}},function(t,n,r){var e=r(23),o=Math.min;t.exports=function(t){return t>0?o(e(t),9007199254740991):0}},function(t,n,r){\"use strict\";var e=r(3),o=r(24),i=r(21),u=\"endsWith\",c=\"\"[u];e(e.P+e.F*r(14)(u),\"String\",{endsWith:function(t){var n=i(this,t,u),r=arguments,e=r.length>1?r[1]:void 0,f=o(n.length),s=void 0===e?f:Math.min(o(e),f),a=String(t);return c?c.call(n,a,s):n.slice(s-a.length,s)===a}})},function(t,n,r){var e=r(5),o=r(3),i=r(1).Array||Array,u={},c=function(t,n){e.each.call(t.split(\",\"),function(t){void 0==n&&t in i?u[t]=i[t]:t in[]&&(u[t]=r(12)(Function.call,[][t],n))})};c(\"pop,reverse,shift,keys,values,entries\",1),c(\"indexOf,every,some,forEach,map,filter,find,findIndex,includes\",3),c(\"join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\"),o(o.S,\"Array\",u)}]);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/attr-accept/dist/index.js\n// module id = 2\n// module chunks = 0","export default function getDataTransferFiles(event, isMultipleAllowed = true) {\n let dataTransferItemsList = [];\n if (event.dataTransfer) {\n const dt = event.dataTransfer;\n if (dt.files && dt.files.length) {\n dataTransferItemsList = dt.files;\n } else if (dt.items && dt.items.length) {\n // During the drag even the dataTransfer.files is null\n // but Chrome implements some drag store, which is accesible via dataTransfer.items\n dataTransferItemsList = dt.items;\n }\n } else if (event.target && event.target.files) {\n dataTransferItemsList = event.target.files;\n }\n\n if (dataTransferItemsList.length > 0) {\n dataTransferItemsList = isMultipleAllowed ? dataTransferItemsList : [dataTransferItemsList[0]];\n }\n\n // Convert from DataTransferItemsList to the native Array\n return Array.prototype.slice.call(dataTransferItemsList);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/getDataTransferItems.js","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports['default'] = immutableStateInvariantMiddleware;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _jsonStringifySafe = require('json-stringify-safe');\n\nvar _jsonStringifySafe2 = _interopRequireDefault(_jsonStringifySafe);\n\nvar _isImmutable = require('./isImmutable');\n\nvar _isImmutable2 = _interopRequireDefault(_isImmutable);\n\nvar _trackForMutations = require('./trackForMutations');\n\nvar _trackForMutations2 = _interopRequireDefault(_trackForMutations);\n\nvar BETWEEN_DISPATCHES_MESSAGE = ['A state mutation was detected between dispatches, in the path `%s`.', 'This may cause incorrect behavior.', '(http://redux.js.org/docs/Troubleshooting.html#never-mutate-reducer-arguments)'].join(' ');\n\nvar INSIDE_DISPATCH_MESSAGE = ['A state mutation was detected inside a dispatch, in the path: `%s`.', 'Take a look at the reducer(s) handling the action %s.', '(http://redux.js.org/docs/Troubleshooting.html#never-mutate-reducer-arguments)'].join(' ');\n\nfunction immutableStateInvariantMiddleware() {\n var isImmutable = arguments.length <= 0 || arguments[0] === undefined ? _isImmutable2['default'] : arguments[0];\n\n var track = _trackForMutations2['default'].bind(null, isImmutable);\n\n return function (_ref) {\n var getState = _ref.getState;\n\n var state = getState();\n var tracker = track(state);\n\n var result = undefined;\n return function (next) {\n return function (action) {\n state = getState();\n\n result = tracker.detectMutations();\n // Track before potentially not meeting the invariant\n tracker = track(state);\n\n (0, _invariant2['default'])(!result.wasMutated, BETWEEN_DISPATCHES_MESSAGE, (result.path || []).join('.'));\n\n var dispatchedAction = next(action);\n state = getState();\n\n result = tracker.detectMutations();\n // Track before potentially not meeting the invariant\n tracker = track(state);\n\n (0, _invariant2['default'])(!result.wasMutated, INSIDE_DISPATCH_MESSAGE, (result.path || []).join('.'), (0, _jsonStringifySafe2['default'])(action));\n\n return dispatchedAction;\n };\n };\n };\n}\n\nmodule.exports = exports['default'];","\"use strict\";\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _typeof(obj) { return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; }\n\nvar repeat = function repeat(str, times) {\n return new Array(times + 1).join(str);\n};\nvar pad = function pad(num, maxLength) {\n return repeat(\"0\", maxLength - num.toString().length) + num;\n};\nvar formatTime = function formatTime(time) {\n return \"@ \" + pad(time.getHours(), 2) + \":\" + pad(time.getMinutes(), 2) + \":\" + pad(time.getSeconds(), 2) + \".\" + pad(time.getMilliseconds(), 3);\n};\n\n// Use the new performance api to get better precision if available\nvar timer = typeof performance !== \"undefined\" && typeof performance.now === \"function\" ? performance : Date;\n\n/**\n * parse the level option of createLogger\n *\n * @property {string | function | object} level - console[level]\n * @property {object} action\n * @property {array} payload\n * @property {string} type\n */\n\nfunction getLogLevel(level, action, payload, type) {\n switch (typeof level === \"undefined\" ? \"undefined\" : _typeof(level)) {\n case \"object\":\n return typeof level[type] === \"function\" ? level[type].apply(level, _toConsumableArray(payload)) : level[type];\n case \"function\":\n return level(action);\n default:\n return level;\n }\n}\n\n/**\n * Creates logger with followed options\n *\n * @namespace\n * @property {object} options - options for logger\n * @property {string | function | object} options.level - console[level]\n * @property {boolean} options.duration - print duration of each action?\n * @property {boolean} options.timestamp - print timestamp with each action?\n * @property {object} options.colors - custom colors\n * @property {object} options.logger - implementation of the `console` API\n * @property {boolean} options.logErrors - should errors in action execution be caught, logged, and re-thrown?\n * @property {boolean} options.collapsed - is group collapsed?\n * @property {boolean} options.predicate - condition which resolves logger behavior\n * @property {function} options.stateTransformer - transform state before print\n * @property {function} options.actionTransformer - transform action before print\n * @property {function} options.errorTransformer - transform error before print\n */\n\nfunction createLogger() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n var _options$level = options.level;\n var level = _options$level === undefined ? \"log\" : _options$level;\n var _options$logger = options.logger;\n var logger = _options$logger === undefined ? console : _options$logger;\n var _options$logErrors = options.logErrors;\n var logErrors = _options$logErrors === undefined ? true : _options$logErrors;\n var collapsed = options.collapsed;\n var predicate = options.predicate;\n var _options$duration = options.duration;\n var duration = _options$duration === undefined ? false : _options$duration;\n var _options$timestamp = options.timestamp;\n var timestamp = _options$timestamp === undefined ? true : _options$timestamp;\n var transformer = options.transformer;\n var _options$stateTransfo = options.stateTransformer;\n var // deprecated\n stateTransformer = _options$stateTransfo === undefined ? function (state) {\n return state;\n } : _options$stateTransfo;\n var _options$actionTransf = options.actionTransformer;\n var actionTransformer = _options$actionTransf === undefined ? function (actn) {\n return actn;\n } : _options$actionTransf;\n var _options$errorTransfo = options.errorTransformer;\n var errorTransformer = _options$errorTransfo === undefined ? function (error) {\n return error;\n } : _options$errorTransfo;\n var _options$colors = options.colors;\n var colors = _options$colors === undefined ? {\n title: function title() {\n return \"#000000\";\n },\n prevState: function prevState() {\n return \"#9E9E9E\";\n },\n action: function action() {\n return \"#03A9F4\";\n },\n nextState: function nextState() {\n return \"#4CAF50\";\n },\n error: function error() {\n return \"#F20404\";\n }\n } : _options$colors;\n\n // exit if console undefined\n\n if (typeof logger === \"undefined\") {\n return function () {\n return function (next) {\n return function (action) {\n return next(action);\n };\n };\n };\n }\n\n if (transformer) {\n console.error(\"Option 'transformer' is deprecated, use stateTransformer instead\");\n }\n\n var logBuffer = [];\n function printBuffer() {\n logBuffer.forEach(function (logEntry, key) {\n var started = logEntry.started;\n var startedTime = logEntry.startedTime;\n var action = logEntry.action;\n var prevState = logEntry.prevState;\n var error = logEntry.error;\n var took = logEntry.took;\n var nextState = logEntry.nextState;\n\n var nextEntry = logBuffer[key + 1];\n if (nextEntry) {\n nextState = nextEntry.prevState;\n took = nextEntry.started - started;\n }\n // message\n var formattedAction = actionTransformer(action);\n var isCollapsed = typeof collapsed === \"function\" ? collapsed(function () {\n return nextState;\n }, action) : collapsed;\n\n var formattedTime = formatTime(startedTime);\n var titleCSS = colors.title ? \"color: \" + colors.title(formattedAction) + \";\" : null;\n var title = \"action \" + (timestamp ? formattedTime : \"\") + \" \" + formattedAction.type + \" \" + (duration ? \"(in \" + took.toFixed(2) + \" ms)\" : \"\");\n\n // render\n try {\n if (isCollapsed) {\n if (colors.title) logger.groupCollapsed(\"%c \" + title, titleCSS);else logger.groupCollapsed(title);\n } else {\n if (colors.title) logger.group(\"%c \" + title, titleCSS);else logger.group(title);\n }\n } catch (e) {\n logger.log(title);\n }\n\n var prevStateLevel = getLogLevel(level, formattedAction, [prevState], \"prevState\");\n var actionLevel = getLogLevel(level, formattedAction, [formattedAction], \"action\");\n var errorLevel = getLogLevel(level, formattedAction, [error, prevState], \"error\");\n var nextStateLevel = getLogLevel(level, formattedAction, [nextState], \"nextState\");\n\n if (prevStateLevel) {\n if (colors.prevState) logger[prevStateLevel](\"%c prev state\", \"color: \" + colors.prevState(prevState) + \"; font-weight: bold\", prevState);else logger[prevStateLevel](\"prev state\", prevState);\n }\n\n if (actionLevel) {\n if (colors.action) logger[actionLevel](\"%c action\", \"color: \" + colors.action(formattedAction) + \"; font-weight: bold\", formattedAction);else logger[actionLevel](\"action\", formattedAction);\n }\n\n if (error && errorLevel) {\n if (colors.error) logger[errorLevel](\"%c error\", \"color: \" + colors.error(error, prevState) + \"; font-weight: bold\", error);else logger[errorLevel](\"error\", error);\n }\n\n if (nextStateLevel) {\n if (colors.nextState) logger[nextStateLevel](\"%c next state\", \"color: \" + colors.nextState(nextState) + \"; font-weight: bold\", nextState);else logger[nextStateLevel](\"next state\", nextState);\n }\n\n try {\n logger.groupEnd();\n } catch (e) {\n logger.log(\"—— log end ——\");\n }\n });\n logBuffer.length = 0;\n }\n\n return function (_ref) {\n var getState = _ref.getState;\n return function (next) {\n return function (action) {\n // exit early if predicate function returns false\n if (typeof predicate === \"function\" && !predicate(getState, action)) {\n return next(action);\n }\n\n var logEntry = {};\n logBuffer.push(logEntry);\n\n logEntry.started = timer.now();\n logEntry.startedTime = new Date();\n logEntry.prevState = stateTransformer(getState());\n logEntry.action = action;\n\n var returnedValue = undefined;\n if (logErrors) {\n try {\n returnedValue = next(action);\n } catch (e) {\n logEntry.error = errorTransformer(e);\n }\n } else {\n returnedValue = next(action);\n }\n\n logEntry.took = timer.now() - logEntry.started;\n logEntry.nextState = stateTransformer(getState());\n\n printBuffer();\n\n if (logEntry.error) throw logEntry.error;\n return returnedValue;\n };\n };\n };\n}\n\nmodule.exports = createLogger;","import setPrototypeOf from \"./setPrototypeOf\";\n\nfunction isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf\";\nimport setPrototypeOf from \"./setPrototypeOf\";\nimport isNativeFunction from \"./isNativeFunction\";\nimport construct from \"./construct\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","export default function _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\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 * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\nvar ReactElement = require('./ReactElement');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar traverseAllChildren = require('./traverseAllChildren');\n\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nvar fourArgumentPooler = PooledClass.fourArgumentPooler;\n\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * traversal. Allows avoiding binding callbacks.\n *\n * @constructor ForEachBookKeeping\n * @param {!function} forEachFunction Function to perform traversal with.\n * @param {?*} forEachContext Context to perform context with.\n */\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\n this.func = forEachFunction;\n this.context = forEachContext;\n this.count = 0;\n}\nForEachBookKeeping.prototype.destructor = function () {\n this.func = null;\n this.context = null;\n this.count = 0;\n};\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n var func = bookKeeping.func,\n context = bookKeeping.context;\n\n func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.foreach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n if (children == null) {\n return children;\n }\n var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\n traverseAllChildren(children, forEachSingleChild, traverseContext);\n ForEachBookKeeping.release(traverseContext);\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * mapping. Allows avoiding binding callbacks.\n *\n * @constructor MapBookKeeping\n * @param {!*} mapResult Object containing the ordered map of results.\n * @param {!function} mapFunction Function to perform mapping with.\n * @param {?*} mapContext Context to perform mapping with.\n */\nfunction MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {\n this.result = mapResult;\n this.keyPrefix = keyPrefix;\n this.func = mapFunction;\n this.context = mapContext;\n this.count = 0;\n}\nMapBookKeeping.prototype.destructor = function () {\n this.result = null;\n this.keyPrefix = null;\n this.func = null;\n this.context = null;\n this.count = 0;\n};\nPooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n var result = bookKeeping.result,\n keyPrefix = bookKeeping.keyPrefix,\n func = bookKeeping.func,\n context = bookKeeping.context;\n\n\n var mappedChild = func.call(context, child, bookKeeping.count++);\n if (Array.isArray(mappedChild)) {\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\n } else if (mappedChild != null) {\n if (ReactElement.isValidElement(mappedChild)) {\n mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,\n // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n }\n result.push(mappedChild);\n }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n var escapedPrefix = '';\n if (prefix != null) {\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n }\n var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n MapBookKeeping.release(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.map\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n return result;\n}\n\nfunction forEachSingleChildDummy(traverseContext, child, name) {\n return null;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.count\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children, context) {\n return traverseAllChildren(children, forEachSingleChildDummy, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.toarray\n */\nfunction toArray(children) {\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\n return result;\n}\n\nvar ReactChildren = {\n forEach: forEachChildren,\n map: mapChildren,\n mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,\n count: countChildren,\n toArray: toArray\n};\n\nmodule.exports = ReactChildren;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Static poolers. Several custom versions for each potential number of\n * arguments. A completely generic pooler is easy to implement, but would\n * require accessing the `arguments` object. In each of these, `this` refers to\n * the Class itself, not an instance. If any others are needed, simply add them\n * here, or in their own files.\n */\nvar oneArgumentPooler = function (copyFieldsFrom) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, copyFieldsFrom);\n return instance;\n } else {\n return new Klass(copyFieldsFrom);\n }\n};\n\nvar twoArgumentPooler = function (a1, a2) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2);\n return instance;\n } else {\n return new Klass(a1, a2);\n }\n};\n\nvar threeArgumentPooler = function (a1, a2, a3) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3);\n return instance;\n } else {\n return new Klass(a1, a2, a3);\n }\n};\n\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3, a4);\n return instance;\n } else {\n return new Klass(a1, a2, a3, a4);\n }\n};\n\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3, a4, a5);\n return instance;\n } else {\n return new Klass(a1, a2, a3, a4, a5);\n }\n};\n\nvar standardReleaser = function (instance) {\n var Klass = this;\n !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;\n instance.destructor();\n if (Klass.instancePool.length < Klass.poolSize) {\n Klass.instancePool.push(instance);\n }\n};\n\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = oneArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances.\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function (CopyConstructor, pooler) {\n // Casting as any so that flow ignores the actual implementation and trusts\n // it to match the type we declared\n var NewKlass = CopyConstructor;\n NewKlass.instancePool = [];\n NewKlass.getPooled = pooler || DEFAULT_POOLER;\n if (!NewKlass.poolSize) {\n NewKlass.poolSize = DEFAULT_POOL_SIZE;\n }\n NewKlass.release = standardReleaser;\n return NewKlass;\n};\n\nvar PooledClass = {\n addPoolingTo: addPoolingTo,\n oneArgumentPooler: oneArgumentPooler,\n twoArgumentPooler: twoArgumentPooler,\n threeArgumentPooler: threeArgumentPooler,\n fourArgumentPooler: fourArgumentPooler,\n fiveArgumentPooler: fiveArgumentPooler\n};\n\nmodule.exports = PooledClass;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar REACT_ELEMENT_TYPE = require('./ReactElementSymbol');\n\nvar getIteratorFn = require('./getIteratorFn');\nvar invariant = require('fbjs/lib/invariant');\nvar KeyEscapeUtils = require('./KeyEscapeUtils');\nvar warning = require('fbjs/lib/warning');\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n\n/**\n * This is inlined from ReactElement since this file is shared between\n * isomorphic and renderers. We could extract this to a\n *\n */\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar didWarnAboutMaps = false;\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (component && typeof component === 'object' && component.key != null) {\n // Explicit key\n return KeyEscapeUtils.escape(component.key);\n }\n // Implicit key determined by the index in the set\n return index.toString(36);\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n if (children === null || type === 'string' || type === 'number' ||\n // The following is inlined from ReactElement. This means we can optimize\n // some checks. React Fiber also inlines this logic for similar purposes.\n type === 'object' && children.$$typeof === REACT_ELEMENT_TYPE) {\n callback(traverseContext, children,\n // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n if (iteratorFn) {\n var iterator = iteratorFn.call(children);\n var step;\n if (iteratorFn !== children.entries) {\n var ii = 0;\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n if (process.env.NODE_ENV !== 'production') {\n var mapsAsChildrenAddendum = '';\n if (ReactCurrentOwner.current) {\n var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();\n if (mapsAsChildrenOwnerName) {\n mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';\n }\n }\n process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;\n didWarnAboutMaps = true;\n }\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n child = entry[1];\n nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n }\n }\n } else if (type === 'object') {\n var addendum = '';\n if (process.env.NODE_ENV !== 'production') {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\n if (children._isReactElement) {\n addendum = ' It looks like you\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\n }\n if (ReactCurrentOwner.current) {\n var name = ReactCurrentOwner.current.getName();\n if (name) {\n addendum += ' Check the render method of `' + name + '`.';\n }\n }\n }\n var childrenString = String(children);\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;\n }\n }\n\n return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\nmodule.exports = traverseAllChildren;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n\n return '$' + escapedString;\n}\n\n/**\n * Unescape and unwrap key for human-readable display\n *\n * @param {string} key to unescape.\n * @return {string} the unescaped key.\n */\nfunction unescape(key) {\n var unescapeRegex = /(=0|=2)/g;\n var unescaperLookup = {\n '=0': '=',\n '=2': ':'\n };\n var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);\n\n return ('' + keySubstring).replace(unescapeRegex, function (match) {\n return unescaperLookup[match];\n });\n}\n\nvar KeyEscapeUtils = {\n escape: escape,\n unescape: unescape\n};\n\nmodule.exports = KeyEscapeUtils;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar ReactComponent = require('./ReactComponent');\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactPureComponent(props, context, updater) {\n // Duplicated from ReactComponent.\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nfunction ComponentDummy() {}\nComponentDummy.prototype = ReactComponent.prototype;\nReactPureComponent.prototype = new ComponentDummy();\nReactPureComponent.prototype.constructor = ReactPureComponent;\n// Avoid an extra prototype jump for these methods.\n_assign(ReactPureComponent.prototype, ReactComponent.prototype);\nReactPureComponent.prototype.isPureReactComponent = true;\n\nmodule.exports = ReactPureComponent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar ReactComponent = require('./ReactComponent');\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar MIXINS_KEY = 'mixins';\n\n// Helper function to allow the creation of anonymous functions which do not\n// have .name set to the name of the variable being assigned to.\nfunction identity(fn) {\n return fn;\n}\n\n/**\n * Policies that describe methods in `ReactClassInterface`.\n */\n\n\nvar injectedMixins = [];\n\n/**\n * Composite components are higher-level components that compose other composite\n * or host components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return <div>Hello World</div>;\n * }\n * });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\nvar ReactClassInterface = {\n\n /**\n * An array of Mixin objects to include when defining your component.\n *\n * @type {array}\n * @optional\n */\n mixins: 'DEFINE_MANY',\n\n /**\n * An object containing properties and methods that should be defined on\n * the component's constructor instead of its prototype (static methods).\n *\n * @type {object}\n * @optional\n */\n statics: 'DEFINE_MANY',\n\n /**\n * Definition of prop types for this component.\n *\n * @type {object}\n * @optional\n */\n propTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types for this component.\n *\n * @type {object}\n * @optional\n */\n contextTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types this component sets for its children.\n *\n * @type {object}\n * @optional\n */\n childContextTypes: 'DEFINE_MANY',\n\n // ==== Definition methods ====\n\n /**\n * Invoked when the component is mounted. Values in the mapping will be set on\n * `this.props` if that prop is not specified (i.e. using an `in` check).\n *\n * This method is invoked before `getInitialState` and therefore cannot rely\n * on `this.state` or use `this.setState`.\n *\n * @return {object}\n * @optional\n */\n getDefaultProps: 'DEFINE_MANY_MERGED',\n\n /**\n * Invoked once before the component is mounted. The return value will be used\n * as the initial value of `this.state`.\n *\n * getInitialState: function() {\n * return {\n * isOn: false,\n * fooBaz: new BazFoo()\n * }\n * }\n *\n * @return {object}\n * @optional\n */\n getInitialState: 'DEFINE_MANY_MERGED',\n\n /**\n * @return {object}\n * @optional\n */\n getChildContext: 'DEFINE_MANY_MERGED',\n\n /**\n * Uses props from `this.props` and state from `this.state` to render the\n * structure of the component.\n *\n * No guarantees are made about when or how often this method is invoked, so\n * it must not have side effects.\n *\n * render: function() {\n * var name = this.props.name;\n * return <div>Hello, {name}!</div>;\n * }\n *\n * @return {ReactComponent}\n * @nosideeffects\n * @required\n */\n render: 'DEFINE_ONCE',\n\n // ==== Delegate methods ====\n\n /**\n * Invoked when the component is initially created and about to be mounted.\n * This may have side effects, but any external subscriptions or data created\n * by this method must be cleaned up in `componentWillUnmount`.\n *\n * @optional\n */\n componentWillMount: 'DEFINE_MANY',\n\n /**\n * Invoked when the component has been mounted and has a DOM representation.\n * However, there is no guarantee that the DOM node is in the document.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been mounted (initialized and rendered) for the first time.\n *\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidMount: 'DEFINE_MANY',\n\n /**\n * Invoked before the component receives new props.\n *\n * Use this as an opportunity to react to a prop transition by updating the\n * state using `this.setState`. Current props are accessed via `this.props`.\n *\n * componentWillReceiveProps: function(nextProps, nextContext) {\n * this.setState({\n * likesIncreasing: nextProps.likeCount > this.props.likeCount\n * });\n * }\n *\n * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n * transition may cause a state change, but the opposite is not true. If you\n * need it, you are probably looking for `componentWillUpdate`.\n *\n * @param {object} nextProps\n * @optional\n */\n componentWillReceiveProps: 'DEFINE_MANY',\n\n /**\n * Invoked while deciding if the component should be updated as a result of\n * receiving new props, state and/or context.\n *\n * Use this as an opportunity to `return false` when you're certain that the\n * transition to the new props/state/context will not require a component\n * update.\n *\n * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n * return !equal(nextProps, this.props) ||\n * !equal(nextState, this.state) ||\n * !equal(nextContext, this.context);\n * }\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @return {boolean} True if the component should update.\n * @optional\n */\n shouldComponentUpdate: 'DEFINE_ONCE',\n\n /**\n * Invoked when the component is about to update due to a transition from\n * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n * and `nextContext`.\n *\n * Use this as an opportunity to perform preparation before an update occurs.\n *\n * NOTE: You **cannot** use `this.setState()` in this method.\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @param {ReactReconcileTransaction} transaction\n * @optional\n */\n componentWillUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component's DOM representation has been updated.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been updated.\n *\n * @param {object} prevProps\n * @param {?object} prevState\n * @param {?object} prevContext\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component is about to be removed from its parent and have\n * its DOM representation destroyed.\n *\n * Use this as an opportunity to deallocate any external resources.\n *\n * NOTE: There is no `componentDidUnmount` since your component will have been\n * destroyed by that point.\n *\n * @optional\n */\n componentWillUnmount: 'DEFINE_MANY',\n\n // ==== Advanced methods ====\n\n /**\n * Updates the component's currently mounted DOM representation.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n * @overridable\n */\n updateComponent: 'OVERRIDE_BASE'\n\n};\n\n/**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\nvar RESERVED_SPEC_KEYS = {\n displayName: function (Constructor, displayName) {\n Constructor.displayName = displayName;\n },\n mixins: function (Constructor, mixins) {\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n mixSpecIntoComponent(Constructor, mixins[i]);\n }\n }\n },\n childContextTypes: function (Constructor, childContextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, childContextTypes, 'childContext');\n }\n Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);\n },\n contextTypes: function (Constructor, contextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, contextTypes, 'context');\n }\n Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);\n },\n /**\n * Special case getDefaultProps which should move into statics but requires\n * automatic merging.\n */\n getDefaultProps: function (Constructor, getDefaultProps) {\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\n } else {\n Constructor.getDefaultProps = getDefaultProps;\n }\n },\n propTypes: function (Constructor, propTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, propTypes, 'prop');\n }\n Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n },\n statics: function (Constructor, statics) {\n mixStaticSpecIntoComponent(Constructor, statics);\n },\n autobind: function () {} };\n\nfunction validateTypeDef(Constructor, typeDef, location) {\n for (var propName in typeDef) {\n if (typeDef.hasOwnProperty(propName)) {\n // use a warning instead of an invariant so components\n // don't show up in prod but only in __DEV__\n process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;\n }\n }\n}\n\nfunction validateMethodOverride(isAlreadyDefined, name) {\n var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\n\n // Disallow overriding of base class methods unless explicitly allowed.\n if (ReactClassMixin.hasOwnProperty(name)) {\n !(specPolicy === 'OVERRIDE_BASE') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;\n }\n\n // Disallow defining methods more than once unless explicitly allowed.\n if (isAlreadyDefined) {\n !(specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;\n }\n}\n\n/**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classes.\n */\nfunction mixSpecIntoComponent(Constructor, spec) {\n if (!spec) {\n if (process.env.NODE_ENV !== 'production') {\n var typeofSpec = typeof spec;\n var isMixinValid = typeofSpec === 'object' && spec !== null;\n\n process.env.NODE_ENV !== 'production' ? warning(isMixinValid, '%s: You\\'re attempting to include a mixin that is either null ' + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec) : void 0;\n }\n\n return;\n }\n\n !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;\n !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;\n\n var proto = Constructor.prototype;\n var autoBindPairs = proto.__reactAutoBindPairs;\n\n // By handling mixins before any other properties, we ensure the same\n // chaining order is applied to methods with DEFINE_MANY policy, whether\n // mixins are listed before or after these methods in the spec.\n if (spec.hasOwnProperty(MIXINS_KEY)) {\n RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n }\n\n for (var name in spec) {\n if (!spec.hasOwnProperty(name)) {\n continue;\n }\n\n if (name === MIXINS_KEY) {\n // We have already handled mixins in a special case above.\n continue;\n }\n\n var property = spec[name];\n var isAlreadyDefined = proto.hasOwnProperty(name);\n validateMethodOverride(isAlreadyDefined, name);\n\n if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n RESERVED_SPEC_KEYS[name](Constructor, property);\n } else {\n // Setup methods on prototype:\n // The following member methods should not be automatically bound:\n // 1. Expected ReactClass methods (in the \"interface\").\n // 2. Overridden methods (that were mixed in).\n var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n var isFunction = typeof property === 'function';\n var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\n\n if (shouldAutoBind) {\n autoBindPairs.push(name, property);\n proto[name] = property;\n } else {\n if (isAlreadyDefined) {\n var specPolicy = ReactClassInterface[name];\n\n // These cases should already be caught by validateMethodOverride.\n !(isReactClassMethod && (specPolicy === 'DEFINE_MANY_MERGED' || specPolicy === 'DEFINE_MANY')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;\n\n // For methods which are defined more than once, call the existing\n // methods before calling the new property, merging if appropriate.\n if (specPolicy === 'DEFINE_MANY_MERGED') {\n proto[name] = createMergedResultFunction(proto[name], property);\n } else if (specPolicy === 'DEFINE_MANY') {\n proto[name] = createChainedFunction(proto[name], property);\n }\n } else {\n proto[name] = property;\n if (process.env.NODE_ENV !== 'production') {\n // Add verbose displayName to the function, which helps when looking\n // at profiling tools.\n if (typeof property === 'function' && spec.displayName) {\n proto[name].displayName = spec.displayName + '_' + name;\n }\n }\n }\n }\n }\n }\n}\n\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\n if (!statics) {\n return;\n }\n for (var name in statics) {\n var property = statics[name];\n if (!statics.hasOwnProperty(name)) {\n continue;\n }\n\n var isReserved = name in RESERVED_SPEC_KEYS;\n !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;\n\n var isInherited = name in Constructor;\n !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;\n Constructor[name] = property;\n }\n}\n\n/**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\n !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;\n\n for (var key in two) {\n if (two.hasOwnProperty(key)) {\n !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;\n one[key] = two[key];\n }\n }\n return one;\n}\n\n/**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createMergedResultFunction(one, two) {\n return function mergedResult() {\n var a = one.apply(this, arguments);\n var b = two.apply(this, arguments);\n if (a == null) {\n return b;\n } else if (b == null) {\n return a;\n }\n var c = {};\n mergeIntoWithNoDuplicateKeys(c, a);\n mergeIntoWithNoDuplicateKeys(c, b);\n return c;\n };\n}\n\n/**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createChainedFunction(one, two) {\n return function chainedFunction() {\n one.apply(this, arguments);\n two.apply(this, arguments);\n };\n}\n\n/**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\nfunction bindAutoBindMethod(component, method) {\n var boundMethod = method.bind(component);\n if (process.env.NODE_ENV !== 'production') {\n boundMethod.__reactBoundContext = component;\n boundMethod.__reactBoundMethod = method;\n boundMethod.__reactBoundArguments = null;\n var componentName = component.constructor.displayName;\n var _bind = boundMethod.bind;\n boundMethod.bind = function (newThis) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n // User is trying to bind() an autobound method; we effectively will\n // ignore the value of \"this\" that the user is trying to use, so\n // let's warn.\n if (newThis !== component && newThis !== null) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;\n } else if (!args.length) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;\n return boundMethod;\n }\n var reboundMethod = _bind.apply(boundMethod, arguments);\n reboundMethod.__reactBoundContext = component;\n reboundMethod.__reactBoundMethod = method;\n reboundMethod.__reactBoundArguments = args;\n return reboundMethod;\n };\n }\n return boundMethod;\n}\n\n/**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\nfunction bindAutoBindMethods(component) {\n var pairs = component.__reactAutoBindPairs;\n for (var i = 0; i < pairs.length; i += 2) {\n var autoBindKey = pairs[i];\n var method = pairs[i + 1];\n component[autoBindKey] = bindAutoBindMethod(component, method);\n }\n}\n\n/**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\nvar ReactClassMixin = {\n\n /**\n * TODO: This will be deprecated because state should always keep a consistent\n * type signature and the only use case for this, is to avoid that.\n */\n replaceState: function (newState, callback) {\n this.updater.enqueueReplaceState(this, newState);\n if (callback) {\n this.updater.enqueueCallback(this, callback, 'replaceState');\n }\n },\n\n /**\n * Checks whether or not this composite component is mounted.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function () {\n return this.updater.isMounted(this);\n }\n};\n\nvar ReactClassComponent = function () {};\n_assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\n\n/**\n * Module for creating composite components.\n *\n * @class ReactClass\n */\nvar ReactClass = {\n\n /**\n * Creates a composite component class given a class specification.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n *\n * @param {object} spec Class specification (which must define `render`).\n * @return {function} Component constructor function.\n * @public\n */\n createClass: function (spec) {\n // To keep our warnings more understandable, we'll use a little hack here to\n // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\n // unnecessarily identify a class without displayName as 'Constructor'.\n var Constructor = identity(function (props, context, updater) {\n // This constructor gets overridden by mocks. The argument is used\n // by mocks to assert on what gets mounted.\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;\n }\n\n // Wire up auto-binding\n if (this.__reactAutoBindPairs.length) {\n bindAutoBindMethods(this);\n }\n\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n\n this.state = null;\n\n // ReactClasses doesn't have constructors. Instead, they use the\n // getInitialState and componentWillMount methods for initialization.\n\n var initialState = this.getInitialState ? this.getInitialState() : null;\n if (process.env.NODE_ENV !== 'production') {\n // We allow auto-mocks to proceed as if they're returning null.\n if (initialState === undefined && this.getInitialState._isMockFunction) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n initialState = null;\n }\n }\n !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;\n\n this.state = initialState;\n });\n Constructor.prototype = new ReactClassComponent();\n Constructor.prototype.constructor = Constructor;\n Constructor.prototype.__reactAutoBindPairs = [];\n\n injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n mixSpecIntoComponent(Constructor, spec);\n\n // Initialize the defaultProps property after all mixins have been merged.\n if (Constructor.getDefaultProps) {\n Constructor.defaultProps = Constructor.getDefaultProps();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This is a tag to indicate that the use of these method names is ok,\n // since it's used with createClass. If it's not, then it's likely a\n // mistake so we'll warn you to use the static property, property\n // initializer or constructor respectively.\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps.isReactClassApproved = {};\n }\n if (Constructor.prototype.getInitialState) {\n Constructor.prototype.getInitialState.isReactClassApproved = {};\n }\n }\n\n !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;\n }\n\n // Reduce time spent doing lookups by setting these on the prototype.\n for (var methodName in ReactClassInterface) {\n if (!Constructor.prototype[methodName]) {\n Constructor.prototype[methodName] = null;\n }\n }\n\n return Constructor;\n },\n\n injection: {\n injectMixin: function (mixin) {\n injectedMixins.push(mixin);\n }\n }\n\n};\n\nmodule.exports = ReactClass;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\n\n/**\n * Create a factory that creates HTML tag elements.\n *\n * @private\n */\nvar createDOMFactory = ReactElement.createFactory;\nif (process.env.NODE_ENV !== 'production') {\n var ReactElementValidator = require('./ReactElementValidator');\n createDOMFactory = ReactElementValidator.createFactory;\n}\n\n/**\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\n * This is also accessible via `React.DOM`.\n *\n * @public\n */\nvar ReactDOMFactories = {\n a: createDOMFactory('a'),\n abbr: createDOMFactory('abbr'),\n address: createDOMFactory('address'),\n area: createDOMFactory('area'),\n article: createDOMFactory('article'),\n aside: createDOMFactory('aside'),\n audio: createDOMFactory('audio'),\n b: createDOMFactory('b'),\n base: createDOMFactory('base'),\n bdi: createDOMFactory('bdi'),\n bdo: createDOMFactory('bdo'),\n big: createDOMFactory('big'),\n blockquote: createDOMFactory('blockquote'),\n body: createDOMFactory('body'),\n br: createDOMFactory('br'),\n button: createDOMFactory('button'),\n canvas: createDOMFactory('canvas'),\n caption: createDOMFactory('caption'),\n cite: createDOMFactory('cite'),\n code: createDOMFactory('code'),\n col: createDOMFactory('col'),\n colgroup: createDOMFactory('colgroup'),\n data: createDOMFactory('data'),\n datalist: createDOMFactory('datalist'),\n dd: createDOMFactory('dd'),\n del: createDOMFactory('del'),\n details: createDOMFactory('details'),\n dfn: createDOMFactory('dfn'),\n dialog: createDOMFactory('dialog'),\n div: createDOMFactory('div'),\n dl: createDOMFactory('dl'),\n dt: createDOMFactory('dt'),\n em: createDOMFactory('em'),\n embed: createDOMFactory('embed'),\n fieldset: createDOMFactory('fieldset'),\n figcaption: createDOMFactory('figcaption'),\n figure: createDOMFactory('figure'),\n footer: createDOMFactory('footer'),\n form: createDOMFactory('form'),\n h1: createDOMFactory('h1'),\n h2: createDOMFactory('h2'),\n h3: createDOMFactory('h3'),\n h4: createDOMFactory('h4'),\n h5: createDOMFactory('h5'),\n h6: createDOMFactory('h6'),\n head: createDOMFactory('head'),\n header: createDOMFactory('header'),\n hgroup: createDOMFactory('hgroup'),\n hr: createDOMFactory('hr'),\n html: createDOMFactory('html'),\n i: createDOMFactory('i'),\n iframe: createDOMFactory('iframe'),\n img: createDOMFactory('img'),\n input: createDOMFactory('input'),\n ins: createDOMFactory('ins'),\n kbd: createDOMFactory('kbd'),\n keygen: createDOMFactory('keygen'),\n label: createDOMFactory('label'),\n legend: createDOMFactory('legend'),\n li: createDOMFactory('li'),\n link: createDOMFactory('link'),\n main: createDOMFactory('main'),\n map: createDOMFactory('map'),\n mark: createDOMFactory('mark'),\n menu: createDOMFactory('menu'),\n menuitem: createDOMFactory('menuitem'),\n meta: createDOMFactory('meta'),\n meter: createDOMFactory('meter'),\n nav: createDOMFactory('nav'),\n noscript: createDOMFactory('noscript'),\n object: createDOMFactory('object'),\n ol: createDOMFactory('ol'),\n optgroup: createDOMFactory('optgroup'),\n option: createDOMFactory('option'),\n output: createDOMFactory('output'),\n p: createDOMFactory('p'),\n param: createDOMFactory('param'),\n picture: createDOMFactory('picture'),\n pre: createDOMFactory('pre'),\n progress: createDOMFactory('progress'),\n q: createDOMFactory('q'),\n rp: createDOMFactory('rp'),\n rt: createDOMFactory('rt'),\n ruby: createDOMFactory('ruby'),\n s: createDOMFactory('s'),\n samp: createDOMFactory('samp'),\n script: createDOMFactory('script'),\n section: createDOMFactory('section'),\n select: createDOMFactory('select'),\n small: createDOMFactory('small'),\n source: createDOMFactory('source'),\n span: createDOMFactory('span'),\n strong: createDOMFactory('strong'),\n style: createDOMFactory('style'),\n sub: createDOMFactory('sub'),\n summary: createDOMFactory('summary'),\n sup: createDOMFactory('sup'),\n table: createDOMFactory('table'),\n tbody: createDOMFactory('tbody'),\n td: createDOMFactory('td'),\n textarea: createDOMFactory('textarea'),\n tfoot: createDOMFactory('tfoot'),\n th: createDOMFactory('th'),\n thead: createDOMFactory('thead'),\n time: createDOMFactory('time'),\n title: createDOMFactory('title'),\n tr: createDOMFactory('tr'),\n track: createDOMFactory('track'),\n u: createDOMFactory('u'),\n ul: createDOMFactory('ul'),\n 'var': createDOMFactory('var'),\n video: createDOMFactory('video'),\n wbr: createDOMFactory('wbr'),\n\n // SVG\n circle: createDOMFactory('circle'),\n clipPath: createDOMFactory('clipPath'),\n defs: createDOMFactory('defs'),\n ellipse: createDOMFactory('ellipse'),\n g: createDOMFactory('g'),\n image: createDOMFactory('image'),\n line: createDOMFactory('line'),\n linearGradient: createDOMFactory('linearGradient'),\n mask: createDOMFactory('mask'),\n path: createDOMFactory('path'),\n pattern: createDOMFactory('pattern'),\n polygon: createDOMFactory('polygon'),\n polyline: createDOMFactory('polyline'),\n radialGradient: createDOMFactory('radialGradient'),\n rect: createDOMFactory('rect'),\n stop: createDOMFactory('stop'),\n svg: createDOMFactory('svg'),\n text: createDOMFactory('text'),\n tspan: createDOMFactory('tspan')\n};\n\nmodule.exports = ReactDOMFactories;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactPropTypesSecret = require('./ReactPropTypesSecret');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getIteratorFn = require('./getIteratorFn');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\nvar ANONYMOUS = '<<anonymous>>';\n\nvar ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker\n};\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n/*eslint-disable no-self-compare*/\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n/*eslint-enable no-self-compare*/\n\n/**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\nfunction PropTypeError(message) {\n this.message = message;\n this.stack = '';\n}\n// Make `instanceof Error` still work for returned errors.\nPropTypeError.prototype = Error.prototype;\n\nfunction createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n if (process.env.NODE_ENV !== 'production') {\n if (secret !== ReactPropTypesSecret && typeof console !== 'undefined') {\n var cacheKey = componentName + ':' + propName;\n if (!manualPropTypeCallCache[cacheKey]) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will not work in production with the next major version. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.', propFullName, componentName) : void 0;\n manualPropTypeCallCache[cacheKey] = true;\n }\n }\n }\n if (props[propName] == null) {\n var locationName = ReactPropTypeLocationNames[location];\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + locationName + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + locationName + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n}\n\nfunction createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n var locationName = ReactPropTypeLocationNames[location];\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunction.thatReturns(null));\n}\n\nfunction createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var locationName = ReactPropTypeLocationNames[location];\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactElement.isValidElement(propValue)) {\n var locationName = ReactPropTypeLocationNames[location];\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var locationName = ReactPropTypeLocationNames[location];\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;\n return emptyFunction.thatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var locationName = ReactPropTypeLocationNames[location];\n var valuesString = JSON.stringify(expectedValues);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (propValue.hasOwnProperty(key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunction.thatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n return null;\n }\n }\n\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (!checker) {\n continue;\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || ReactElement.isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n}\n\nfunction isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n}\n\n// Equivalent of `typeof` but with special handling for array and regexp.\nfunction getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// See `createPrimitiveTypeChecker`.\nfunction getPreciseType(propValue) {\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n}\n\n// Returns class name of the object, if any.\nfunction getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n}\n\nmodule.exports = ReactPropTypes;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nmodule.exports = '15.4.1';","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactElement = require('./ReactElement');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.only\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React.Children.only expected to receive a single React element child.') : _prodInvariant('143') : void 0;\n return children;\n}\n\nmodule.exports = onlyChild;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports['default'] = syncHistoryWithStore;\n\nvar _reducer = require('./reducer');\n\nvar defaultSelectLocationState = function defaultSelectLocationState(state) {\n return state.routing;\n};\n\n/**\n * This function synchronizes your history state with the Redux store.\n * Location changes flow from history to the store. An enhanced history is\n * returned with a listen method that responds to store updates for location.\n *\n * When this history is provided to the router, this means the location data\n * will flow like this:\n * history.push -> store.dispatch -> enhancedHistory.listen -> router\n * This ensures that when the store state changes due to a replay or other\n * event, the router will be updated appropriately and can transition to the\n * correct router state.\n */\nfunction syncHistoryWithStore(history, store) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$selectLocationSt = _ref.selectLocationState,\n selectLocationState = _ref$selectLocationSt === undefined ? defaultSelectLocationState : _ref$selectLocationSt,\n _ref$adjustUrlOnRepla = _ref.adjustUrlOnReplay,\n adjustUrlOnReplay = _ref$adjustUrlOnRepla === undefined ? true : _ref$adjustUrlOnRepla;\n\n // Ensure that the reducer is mounted on the store and functioning properly.\n if (typeof selectLocationState(store.getState()) === 'undefined') {\n throw new Error('Expected the routing state to be available either as `state.routing` ' + 'or as the custom expression you can specify as `selectLocationState` ' + 'in the `syncHistoryWithStore()` options. ' + 'Ensure you have added the `routerReducer` to your store\\'s ' + 'reducers via `combineReducers` or whatever method you use to isolate ' + 'your reducers.');\n }\n\n var initialLocation = void 0;\n var isTimeTraveling = void 0;\n var unsubscribeFromStore = void 0;\n var unsubscribeFromHistory = void 0;\n var currentLocation = void 0;\n\n // What does the store say about current location?\n var getLocationInStore = function getLocationInStore(useInitialIfEmpty) {\n var locationState = selectLocationState(store.getState());\n return locationState.locationBeforeTransitions || (useInitialIfEmpty ? initialLocation : undefined);\n };\n\n // Init initialLocation with potential location in store\n initialLocation = getLocationInStore();\n\n // If the store is replayed, update the URL in the browser to match.\n if (adjustUrlOnReplay) {\n var handleStoreChange = function handleStoreChange() {\n var locationInStore = getLocationInStore(true);\n if (currentLocation === locationInStore || initialLocation === locationInStore) {\n return;\n }\n\n // Update address bar to reflect store state\n isTimeTraveling = true;\n currentLocation = locationInStore;\n history.transitionTo(_extends({}, locationInStore, {\n action: 'PUSH'\n }));\n isTimeTraveling = false;\n };\n\n unsubscribeFromStore = store.subscribe(handleStoreChange);\n handleStoreChange();\n }\n\n // Whenever location changes, dispatch an action to get it in the store\n var handleLocationChange = function handleLocationChange(location) {\n // ... unless we just caused that location change\n if (isTimeTraveling) {\n return;\n }\n\n // Remember where we are\n currentLocation = location;\n\n // Are we being called for the first time?\n if (!initialLocation) {\n // Remember as a fallback in case state is reset\n initialLocation = location;\n\n // Respect persisted location, if any\n if (getLocationInStore()) {\n return;\n }\n }\n\n // Tell the store to update by dispatching an action\n store.dispatch({\n type: _reducer.LOCATION_CHANGE,\n payload: location\n });\n };\n unsubscribeFromHistory = history.listen(handleLocationChange);\n\n // History 3.x doesn't call listen synchronously, so fire the initial location change ourselves\n if (history.getCurrentLocation) {\n handleLocationChange(history.getCurrentLocation());\n }\n\n // The enhanced history uses store as source of truth\n return _extends({}, history, {\n // The listeners are subscribed to the store instead of history\n listen: function listen(listener) {\n // Copy of last location.\n var lastPublishedLocation = getLocationInStore(true);\n\n // Keep track of whether we unsubscribed, as Redux store\n // only applies changes in subscriptions on next dispatch\n var unsubscribed = false;\n var unsubscribeFromStore = store.subscribe(function () {\n var currentLocation = getLocationInStore(true);\n if (currentLocation === lastPublishedLocation) {\n return;\n }\n lastPublishedLocation = currentLocation;\n if (!unsubscribed) {\n listener(lastPublishedLocation);\n }\n });\n\n // History 2.x listeners expect a synchronous call. Make the first call to the\n // listener after subscribing to the store, in case the listener causes a\n // location change (e.g. when it redirects)\n if (!history.getCurrentLocation) {\n listener(lastPublishedLocation);\n }\n\n // Let user unsubscribe later\n return function () {\n unsubscribed = true;\n unsubscribeFromStore();\n };\n },\n\n\n // It also provides a way to destroy internal listeners\n unsubscribe: function unsubscribe() {\n if (adjustUrlOnReplay) {\n unsubscribeFromStore();\n }\n unsubscribeFromHistory();\n }\n });\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = routerMiddleware;\n\nvar _actions = require('./actions');\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n/**\n * This middleware captures CALL_HISTORY_METHOD actions to redirect to the\n * provided history object. This will prevent these actions from reaching your\n * reducer or any middleware that comes after this one.\n */\nfunction routerMiddleware(history) {\n return function () {\n return function (next) {\n return function (action) {\n if (action.type !== _actions.CALL_HISTORY_METHOD) {\n return next(action);\n }\n\n var _action$payload = action.payload,\n method = _action$payload.method,\n args = _action$payload.args;\n\n history[method].apply(history, _toConsumableArray(args));\n };\n };\n };\n}","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/\n\n'use strict';\n\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDefaultInjection = require('./ReactDefaultInjection');\nvar ReactMount = require('./ReactMount');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdates = require('./ReactUpdates');\nvar ReactVersion = require('./ReactVersion');\n\nvar findDOMNode = require('./findDOMNode');\nvar getHostComponentFromComposite = require('./getHostComponentFromComposite');\nvar renderSubtreeIntoContainer = require('./renderSubtreeIntoContainer');\nvar warning = require('fbjs/lib/warning');\n\nReactDefaultInjection.inject();\n\nvar ReactDOM = {\n findDOMNode: findDOMNode,\n render: ReactMount.render,\n unmountComponentAtNode: ReactMount.unmountComponentAtNode,\n version: ReactVersion,\n\n /* eslint-disable camelcase */\n unstable_batchedUpdates: ReactUpdates.batchedUpdates,\n unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer\n};\n\n// Inject the runtime into a devtools global hook regardless of browser.\n// Allows for debugging when the hook is injected on the page.\nif (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\n ComponentTree: {\n getClosestInstanceFromNode: ReactDOMComponentTree.getClosestInstanceFromNode,\n getNodeFromInstance: function (inst) {\n // inst is an internal instance (but could be a composite)\n if (inst._renderedComponent) {\n inst = getHostComponentFromComposite(inst);\n }\n if (inst) {\n return ReactDOMComponentTree.getNodeFromInstance(inst);\n } else {\n return null;\n }\n }\n },\n Mount: ReactMount,\n Reconciler: ReactReconciler\n });\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\n\n // First check if devtools is not installed\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n // If we're in Chrome or Firefox, provide a download link if not installed.\n if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n // Firefox does not have the issue with devtools loaded over file://\n var showFileUrlMessage = window.location.protocol.indexOf('http') === -1 && navigator.userAgent.indexOf('Firefox') === -1;\n console.debug('Download the React DevTools ' + (showFileUrlMessage ? 'and use an HTTP server (instead of a file: URL) ' : '') + 'for a better development experience: ' + 'https://fb.me/react-devtools');\n }\n }\n\n var testFunc = function testFn() {};\n process.env.NODE_ENV !== 'production' ? warning((testFunc.name || testFunc.toString()).indexOf('testFn') !== -1, 'It looks like you\\'re using a minified copy of the development build ' + 'of React. When deploying React apps to production, make sure to use ' + 'the production build which skips development warnings and is faster. ' + 'See https://fb.me/react-minification for more details.') : void 0;\n\n // If we're in IE8, check to see if we are in compatibility mode and provide\n // information on preventing compatibility mode\n var ieCompatibilityMode = document.documentMode && document.documentMode < 8;\n\n process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />') : void 0;\n\n var expectedFeatures = [\n // shims\n Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.trim];\n\n for (var i = 0; i < expectedFeatures.length; i++) {\n if (!expectedFeatures[i]) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'One or more ES5 shims expected by React are not available: ' + 'https://fb.me/react-warning-polyfills') : void 0;\n break;\n }\n }\n }\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactInstrumentation = require('./ReactInstrumentation');\n var ReactDOMUnknownPropertyHook = require('./ReactDOMUnknownPropertyHook');\n var ReactDOMNullInputValuePropHook = require('./ReactDOMNullInputValuePropHook');\n var ReactDOMInvalidARIAHook = require('./ReactDOMInvalidARIAHook');\n\n ReactInstrumentation.debugTool.addHook(ReactDOMUnknownPropertyHook);\n ReactInstrumentation.debugTool.addHook(ReactDOMNullInputValuePropHook);\n ReactInstrumentation.debugTool.addHook(ReactDOMInvalidARIAHook);\n}\n\nmodule.exports = ReactDOM;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ARIADOMPropertyConfig = require('./ARIADOMPropertyConfig');\nvar BeforeInputEventPlugin = require('./BeforeInputEventPlugin');\nvar ChangeEventPlugin = require('./ChangeEventPlugin');\nvar DefaultEventPluginOrder = require('./DefaultEventPluginOrder');\nvar EnterLeaveEventPlugin = require('./EnterLeaveEventPlugin');\nvar HTMLDOMPropertyConfig = require('./HTMLDOMPropertyConfig');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactDOMComponent = require('./ReactDOMComponent');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDOMEmptyComponent = require('./ReactDOMEmptyComponent');\nvar ReactDOMTreeTraversal = require('./ReactDOMTreeTraversal');\nvar ReactDOMTextComponent = require('./ReactDOMTextComponent');\nvar ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');\nvar ReactEventListener = require('./ReactEventListener');\nvar ReactInjection = require('./ReactInjection');\nvar ReactReconcileTransaction = require('./ReactReconcileTransaction');\nvar SVGDOMPropertyConfig = require('./SVGDOMPropertyConfig');\nvar SelectEventPlugin = require('./SelectEventPlugin');\nvar SimpleEventPlugin = require('./SimpleEventPlugin');\n\nvar alreadyInjected = false;\n\nfunction inject() {\n if (alreadyInjected) {\n // TODO: This is currently true because these injections are shared between\n // the client and the server package. They should be built independently\n // and not share any injection state. Then this problem will be solved.\n return;\n }\n alreadyInjected = true;\n\n ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);\n\n /**\n * Inject modules for resolving DOM hierarchy and plugin ordering.\n */\n ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);\n ReactInjection.EventPluginUtils.injectComponentTree(ReactDOMComponentTree);\n ReactInjection.EventPluginUtils.injectTreeTraversal(ReactDOMTreeTraversal);\n\n /**\n * Some important event plugins included by default (without having to require\n * them).\n */\n ReactInjection.EventPluginHub.injectEventPluginsByName({\n SimpleEventPlugin: SimpleEventPlugin,\n EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n ChangeEventPlugin: ChangeEventPlugin,\n SelectEventPlugin: SelectEventPlugin,\n BeforeInputEventPlugin: BeforeInputEventPlugin\n });\n\n ReactInjection.HostComponent.injectGenericComponentClass(ReactDOMComponent);\n\n ReactInjection.HostComponent.injectTextComponentClass(ReactDOMTextComponent);\n\n ReactInjection.DOMProperty.injectDOMPropertyConfig(ARIADOMPropertyConfig);\n ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\n ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);\n\n ReactInjection.EmptyComponent.injectEmptyComponentFactory(function (instantiate) {\n return new ReactDOMEmptyComponent(instantiate);\n });\n\n ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);\n ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n\n ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);\n}\n\nmodule.exports = {\n inject: inject\n};","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ARIADOMPropertyConfig = {\n Properties: {\n // Global States and Properties\n 'aria-current': 0, // state\n 'aria-details': 0,\n 'aria-disabled': 0, // state\n 'aria-hidden': 0, // state\n 'aria-invalid': 0, // state\n 'aria-keyshortcuts': 0,\n 'aria-label': 0,\n 'aria-roledescription': 0,\n // Widget Attributes\n 'aria-autocomplete': 0,\n 'aria-checked': 0,\n 'aria-expanded': 0,\n 'aria-haspopup': 0,\n 'aria-level': 0,\n 'aria-modal': 0,\n 'aria-multiline': 0,\n 'aria-multiselectable': 0,\n 'aria-orientation': 0,\n 'aria-placeholder': 0,\n 'aria-pressed': 0,\n 'aria-readonly': 0,\n 'aria-required': 0,\n 'aria-selected': 0,\n 'aria-sort': 0,\n 'aria-valuemax': 0,\n 'aria-valuemin': 0,\n 'aria-valuenow': 0,\n 'aria-valuetext': 0,\n // Live Region Attributes\n 'aria-atomic': 0,\n 'aria-busy': 0,\n 'aria-live': 0,\n 'aria-relevant': 0,\n // Drag-and-Drop Attributes\n 'aria-dropeffect': 0,\n 'aria-grabbed': 0,\n // Relationship Attributes\n 'aria-activedescendant': 0,\n 'aria-colcount': 0,\n 'aria-colindex': 0,\n 'aria-colspan': 0,\n 'aria-controls': 0,\n 'aria-describedby': 0,\n 'aria-errormessage': 0,\n 'aria-flowto': 0,\n 'aria-labelledby': 0,\n 'aria-owns': 0,\n 'aria-posinset': 0,\n 'aria-rowcount': 0,\n 'aria-rowindex': 0,\n 'aria-rowspan': 0,\n 'aria-setsize': 0\n },\n DOMAttributeNames: {},\n DOMPropertyNames: {}\n};\n\nmodule.exports = ARIADOMPropertyConfig;","/**\n * Copyright 2013-present Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar FallbackCompositionState = require('./FallbackCompositionState');\nvar SyntheticCompositionEvent = require('./SyntheticCompositionEvent');\nvar SyntheticInputEvent = require('./SyntheticInputEvent');\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\nvar START_KEYCODE = 229;\n\nvar canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;\n\nvar documentMode = null;\nif (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {\n documentMode = document.documentMode;\n}\n\n// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nvar canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();\n\n// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nvar useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\n\n/**\n * Opera <= 12 includes TextEvent in window, but does not fire\n * text input events. Rely on keypress instead.\n */\nfunction isPresto() {\n var opera = window.opera;\n return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;\n}\n\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\n// Events and their corresponding property names.\nvar eventTypes = {\n beforeInput: {\n phasedRegistrationNames: {\n bubbled: 'onBeforeInput',\n captured: 'onBeforeInputCapture'\n },\n dependencies: ['topCompositionEnd', 'topKeyPress', 'topTextInput', 'topPaste']\n },\n compositionEnd: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionEnd',\n captured: 'onCompositionEndCapture'\n },\n dependencies: ['topBlur', 'topCompositionEnd', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown']\n },\n compositionStart: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionStart',\n captured: 'onCompositionStartCapture'\n },\n dependencies: ['topBlur', 'topCompositionStart', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown']\n },\n compositionUpdate: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionUpdate',\n captured: 'onCompositionUpdateCapture'\n },\n dependencies: ['topBlur', 'topCompositionUpdate', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown']\n }\n};\n\n// Track whether we've ever handled a keypress on the space key.\nvar hasSpaceKeypress = false;\n\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\nfunction isKeypressCommand(nativeEvent) {\n return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\n // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\nfunction getCompositionEventType(topLevelType) {\n switch (topLevelType) {\n case 'topCompositionStart':\n return eventTypes.compositionStart;\n case 'topCompositionEnd':\n return eventTypes.compositionEnd;\n case 'topCompositionUpdate':\n return eventTypes.compositionUpdate;\n }\n}\n\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n return topLevelType === 'topKeyDown' && nativeEvent.keyCode === START_KEYCODE;\n}\n\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case 'topKeyUp':\n // Command keys insert or clear IME input.\n return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n case 'topKeyDown':\n // Expect IME keyCode on each keydown. If we get any other\n // code we must have exited earlier.\n return nativeEvent.keyCode !== START_KEYCODE;\n case 'topKeyPress':\n case 'topMouseDown':\n case 'topBlur':\n // Events are not possible without cancelling IME.\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\nfunction getDataFromCustomEvent(nativeEvent) {\n var detail = nativeEvent.detail;\n if (typeof detail === 'object' && 'data' in detail) {\n return detail.data;\n }\n return null;\n}\n\n// Track the current IME composition fallback object, if any.\nvar currentComposition = null;\n\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\nfunction extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var eventType;\n var fallbackData;\n\n if (canUseCompositionEvent) {\n eventType = getCompositionEventType(topLevelType);\n } else if (!currentComposition) {\n if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionStart;\n }\n } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionEnd;\n }\n\n if (!eventType) {\n return null;\n }\n\n if (useFallbackCompositionData) {\n // The current composition is stored statically and must not be\n // overwritten while composition continues.\n if (!currentComposition && eventType === eventTypes.compositionStart) {\n currentComposition = FallbackCompositionState.getPooled(nativeEventTarget);\n } else if (eventType === eventTypes.compositionEnd) {\n if (currentComposition) {\n fallbackData = currentComposition.getData();\n }\n }\n }\n\n var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);\n\n if (fallbackData) {\n // Inject data generated from fallback path into the synthetic event.\n // This matches the property of native CompositionEventInterface.\n event.data = fallbackData;\n } else {\n var customData = getDataFromCustomEvent(nativeEvent);\n if (customData !== null) {\n event.data = customData;\n }\n }\n\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case 'topCompositionEnd':\n return getDataFromCustomEvent(nativeEvent);\n case 'topKeyPress':\n /**\n * If native `textInput` events are available, our goal is to make\n * use of them. However, there is a special case: the spacebar key.\n * In Webkit, preventing default on a spacebar `textInput` event\n * cancels character insertion, but it *also* causes the browser\n * to fall back to its default spacebar behavior of scrolling the\n * page.\n *\n * Tracking at:\n * https://code.google.com/p/chromium/issues/detail?id=355103\n *\n * To avoid this issue, use the keypress event as if no `textInput`\n * event is available.\n */\n var which = nativeEvent.which;\n if (which !== SPACEBAR_CODE) {\n return null;\n }\n\n hasSpaceKeypress = true;\n return SPACEBAR_CHAR;\n\n case 'topTextInput':\n // Record the characters to be added to the DOM.\n var chars = nativeEvent.data;\n\n // If it's a spacebar character, assume that we have already handled\n // it at the keypress level and bail immediately. Android Chrome\n // doesn't give us keycodes, so we need to blacklist it.\n if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n return null;\n }\n\n return chars;\n\n default:\n // For other native event types, do nothing.\n return null;\n }\n}\n\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n // If we are currently composing (IME) and using a fallback to do so,\n // try to extract the composed characters from the fallback object.\n // If composition event is available, we extract a string only at\n // compositionevent, otherwise extract it at fallback events.\n if (currentComposition) {\n if (topLevelType === 'topCompositionEnd' || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n var chars = currentComposition.getData();\n FallbackCompositionState.release(currentComposition);\n currentComposition = null;\n return chars;\n }\n return null;\n }\n\n switch (topLevelType) {\n case 'topPaste':\n // If a paste event occurs after a keypress, throw out the input\n // chars. Paste events should not lead to BeforeInput events.\n return null;\n case 'topKeyPress':\n /**\n * As of v27, Firefox may fire keypress events even when no character\n * will be inserted. A few possibilities:\n *\n * - `which` is `0`. Arrow keys, Esc key, etc.\n *\n * - `which` is the pressed key code, but no char is available.\n * Ex: 'AltGr + d` in Polish. There is no modified character for\n * this key combination and no character is inserted into the\n * document, but FF fires the keypress for char code `100` anyway.\n * No `input` event will occur.\n *\n * - `which` is the pressed key code, but a command combination is\n * being used. Ex: `Cmd+C`. No character is inserted, and no\n * `input` event will occur.\n */\n if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {\n return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case 'topCompositionEnd':\n return useFallbackCompositionData ? null : nativeEvent.data;\n default:\n return null;\n }\n}\n\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\nfunction extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var chars;\n\n if (canUseTextInputEvent) {\n chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n } else {\n chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n }\n\n // If no characters are being inserted, no BeforeInput event should\n // be fired.\n if (!chars) {\n return null;\n }\n\n var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);\n\n event.data = chars;\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\nvar BeforeInputEventPlugin = {\n\n eventTypes: eventTypes,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n return [extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget)];\n }\n};\n\nmodule.exports = BeforeInputEventPlugin;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\n\nvar getTextContentAccessor = require('./getTextContentAccessor');\n\n/**\n * This helper class stores information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n * @param {DOMEventTarget} root\n */\nfunction FallbackCompositionState(root) {\n this._root = root;\n this._startText = this.getText();\n this._fallbackText = null;\n}\n\n_assign(FallbackCompositionState.prototype, {\n destructor: function () {\n this._root = null;\n this._startText = null;\n this._fallbackText = null;\n },\n\n /**\n * Get current text of input.\n *\n * @return {string}\n */\n getText: function () {\n if ('value' in this._root) {\n return this._root.value;\n }\n return this._root[getTextContentAccessor()];\n },\n\n /**\n * Determine the differing substring between the initially stored\n * text content and the current content.\n *\n * @return {string}\n */\n getData: function () {\n if (this._fallbackText) {\n return this._fallbackText;\n }\n\n var start;\n var startValue = this._startText;\n var startLength = startValue.length;\n var end;\n var endValue = this.getText();\n var endLength = endValue.length;\n\n for (start = 0; start < startLength; start++) {\n if (startValue[start] !== endValue[start]) {\n break;\n }\n }\n\n var minEnd = startLength - start;\n for (end = 1; end <= minEnd; end++) {\n if (startValue[startLength - end] !== endValue[endLength - end]) {\n break;\n }\n }\n\n var sliceTail = end > 1 ? 1 - end : undefined;\n this._fallbackText = endValue.slice(start, sliceTail);\n return this._fallbackText;\n }\n});\n\nPooledClass.addPoolingTo(FallbackCompositionState);\n\nmodule.exports = FallbackCompositionState;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\nvar CompositionEventInterface = {\n data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);\n\nmodule.exports = SyntheticCompositionEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n * /#events-inputevents\n */\nvar InputEventInterface = {\n data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);\n\nmodule.exports = SyntheticInputEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\nvar isEventSupported = require('./isEventSupported');\nvar isTextInputElement = require('./isTextInputElement');\n\nvar eventTypes = {\n change: {\n phasedRegistrationNames: {\n bubbled: 'onChange',\n captured: 'onChangeCapture'\n },\n dependencies: ['topBlur', 'topChange', 'topClick', 'topFocus', 'topInput', 'topKeyDown', 'topKeyUp', 'topSelectionChange']\n }\n};\n\n/**\n * For IE shims\n */\nvar activeElement = null;\nvar activeElementInst = null;\nvar activeElementValue = null;\nvar activeElementValueProp = null;\n\n/**\n * SECTION: handle `change` event\n */\nfunction shouldUseChangeEvent(elem) {\n var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nvar doesChangeEventBubble = false;\nif (ExecutionEnvironment.canUseDOM) {\n // See `handleChange` comment below\n doesChangeEventBubble = isEventSupported('change') && (!document.documentMode || document.documentMode > 8);\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n var event = SyntheticEvent.getPooled(eventTypes.change, activeElementInst, nativeEvent, getEventTarget(nativeEvent));\n EventPropagators.accumulateTwoPhaseDispatches(event);\n\n // If change and propertychange bubbled, we'd just bind to it like all the\n // other events and have it go through ReactBrowserEventEmitter. Since it\n // doesn't, we manually listen for the events and so we have to enqueue and\n // process the abstract event manually.\n //\n // Batching is necessary here in order to ensure that all event handlers run\n // before the next rerender (including event handlers attached to ancestor\n // elements instead of directly on the input). Without this, controlled\n // components don't work properly in conjunction with event bubbling because\n // the component is rerendered and the value reverted before all the event\n // handlers can run. See https://github.com/facebook/react/issues/708.\n ReactUpdates.batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n EventPluginHub.enqueueEvents(event);\n EventPluginHub.processEventQueue(false);\n}\n\nfunction startWatchingForChangeEventIE8(target, targetInst) {\n activeElement = target;\n activeElementInst = targetInst;\n activeElement.attachEvent('onchange', manualDispatchChangeEvent);\n}\n\nfunction stopWatchingForChangeEventIE8() {\n if (!activeElement) {\n return;\n }\n activeElement.detachEvent('onchange', manualDispatchChangeEvent);\n activeElement = null;\n activeElementInst = null;\n}\n\nfunction getTargetInstForChangeEvent(topLevelType, targetInst) {\n if (topLevelType === 'topChange') {\n return targetInst;\n }\n}\nfunction handleEventsForChangeEventIE8(topLevelType, target, targetInst) {\n if (topLevelType === 'topFocus') {\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForChangeEventIE8();\n startWatchingForChangeEventIE8(target, targetInst);\n } else if (topLevelType === 'topBlur') {\n stopWatchingForChangeEventIE8();\n }\n}\n\n/**\n * SECTION: handle `input` event\n */\nvar isInputEventSupported = false;\nif (ExecutionEnvironment.canUseDOM) {\n // IE9 claims to support the input event but fails to trigger it when\n // deleting text, so we ignore its input events.\n // IE10+ fire input events to often, such when a placeholder\n // changes or when an input with a placeholder is focused.\n isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 11);\n}\n\n/**\n * (For IE <=11) Replacement getter/setter for the `value` property that gets\n * set on the active element.\n */\nvar newValueProp = {\n get: function () {\n return activeElementValueProp.get.call(this);\n },\n set: function (val) {\n // Cast to a string so we can do equality checks.\n activeElementValue = '' + val;\n activeElementValueProp.set.call(this, val);\n }\n};\n\n/**\n * (For IE <=11) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\nfunction startWatchingForValueChange(target, targetInst) {\n activeElement = target;\n activeElementInst = targetInst;\n activeElementValue = target.value;\n activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');\n\n // Not guarded in a canDefineProperty check: IE8 supports defineProperty only\n // on DOM elements\n Object.defineProperty(activeElement, 'value', newValueProp);\n if (activeElement.attachEvent) {\n activeElement.attachEvent('onpropertychange', handlePropertyChange);\n } else {\n activeElement.addEventListener('propertychange', handlePropertyChange, false);\n }\n}\n\n/**\n * (For IE <=11) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\nfunction stopWatchingForValueChange() {\n if (!activeElement) {\n return;\n }\n\n // delete restores the original property definition\n delete activeElement.value;\n\n if (activeElement.detachEvent) {\n activeElement.detachEvent('onpropertychange', handlePropertyChange);\n } else {\n activeElement.removeEventListener('propertychange', handlePropertyChange, false);\n }\n\n activeElement = null;\n activeElementInst = null;\n activeElementValue = null;\n activeElementValueProp = null;\n}\n\n/**\n * (For IE <=11) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\nfunction handlePropertyChange(nativeEvent) {\n if (nativeEvent.propertyName !== 'value') {\n return;\n }\n var value = nativeEvent.srcElement.value;\n if (value === activeElementValue) {\n return;\n }\n activeElementValue = value;\n\n manualDispatchChangeEvent(nativeEvent);\n}\n\n/**\n * If a `change` event should be fired, returns the target's ID.\n */\nfunction getTargetInstForInputEvent(topLevelType, targetInst) {\n if (topLevelType === 'topInput') {\n // In modern browsers (i.e., not IE8 or IE9), the input event is exactly\n // what we want so fall through here and trigger an abstract event\n return targetInst;\n }\n}\n\nfunction handleEventsForInputEventIE(topLevelType, target, targetInst) {\n if (topLevelType === 'topFocus') {\n // In IE8, we can capture almost all .value changes by adding a\n // propertychange handler and looking for events with propertyName\n // equal to 'value'\n // In IE9-11, propertychange fires for most input events but is buggy and\n // doesn't fire when text is deleted, but conveniently, selectionchange\n // appears to fire in all of the remaining cases so we catch those and\n // forward the event if the value has changed\n // In either case, we don't want to call the event handler if the value\n // is changed from JS so we redefine a setter for `.value` that updates\n // our activeElementValue variable, allowing us to ignore those changes\n //\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForValueChange();\n startWatchingForValueChange(target, targetInst);\n } else if (topLevelType === 'topBlur') {\n stopWatchingForValueChange();\n }\n}\n\n// For IE8 and IE9.\nfunction getTargetInstForInputEventIE(topLevelType, targetInst) {\n if (topLevelType === 'topSelectionChange' || topLevelType === 'topKeyUp' || topLevelType === 'topKeyDown') {\n // On the selectionchange event, the target is just document which isn't\n // helpful for us so just check activeElement instead.\n //\n // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n // propertychange on the first input event after setting `value` from a\n // script and fires only keydown, keypress, keyup. Catching keyup usually\n // gets it and catching keydown lets us fire an event for the first\n // keystroke if user does a key repeat (it'll be a little delayed: right\n // before the second keystroke). Other input methods (e.g., paste) seem to\n // fire selectionchange normally.\n if (activeElement && activeElement.value !== activeElementValue) {\n activeElementValue = activeElement.value;\n return activeElementInst;\n }\n }\n}\n\n/**\n * SECTION: handle `click` event\n */\nfunction shouldUseClickEvent(elem) {\n // Use the `click` event to detect changes to checkbox and radio inputs.\n // This approach works across all browsers, whereas `change` does not fire\n // until `blur` in IE8.\n return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(topLevelType, targetInst) {\n if (topLevelType === 'topClick') {\n return targetInst;\n }\n}\n\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\nvar ChangeEventPlugin = {\n\n eventTypes: eventTypes,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;\n\n var getTargetInstFunc, handleEventFunc;\n if (shouldUseChangeEvent(targetNode)) {\n if (doesChangeEventBubble) {\n getTargetInstFunc = getTargetInstForChangeEvent;\n } else {\n handleEventFunc = handleEventsForChangeEventIE8;\n }\n } else if (isTextInputElement(targetNode)) {\n if (isInputEventSupported) {\n getTargetInstFunc = getTargetInstForInputEvent;\n } else {\n getTargetInstFunc = getTargetInstForInputEventIE;\n handleEventFunc = handleEventsForInputEventIE;\n }\n } else if (shouldUseClickEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForClickEvent;\n }\n\n if (getTargetInstFunc) {\n var inst = getTargetInstFunc(topLevelType, targetInst);\n if (inst) {\n var event = SyntheticEvent.getPooled(eventTypes.change, inst, nativeEvent, nativeEventTarget);\n event.type = 'change';\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n }\n }\n\n if (handleEventFunc) {\n handleEventFunc(topLevelType, targetNode, targetInst);\n }\n }\n\n};\n\nmodule.exports = ChangeEventPlugin;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar ReactOwner = require('./ReactOwner');\n\nvar ReactRef = {};\n\nfunction attachRef(ref, component, owner) {\n if (typeof ref === 'function') {\n ref(component.getPublicInstance());\n } else {\n // Legacy ref\n ReactOwner.addComponentAsRefTo(component, ref, owner);\n }\n}\n\nfunction detachRef(ref, component, owner) {\n if (typeof ref === 'function') {\n ref(null);\n } else {\n // Legacy ref\n ReactOwner.removeComponentAsRefFrom(component, ref, owner);\n }\n}\n\nReactRef.attachRefs = function (instance, element) {\n if (element === null || typeof element !== 'object') {\n return;\n }\n var ref = element.ref;\n if (ref != null) {\n attachRef(ref, instance, element._owner);\n }\n};\n\nReactRef.shouldUpdateRefs = function (prevElement, nextElement) {\n // If either the owner or a `ref` has changed, make sure the newest owner\n // has stored a reference to `this`, and the previous owner (if different)\n // has forgotten the reference to `this`. We use the element instead\n // of the public this.props because the post processing cannot determine\n // a ref. The ref conceptually lives on the element.\n\n // TODO: Should this even be possible? The owner cannot change because\n // it's forbidden by shouldUpdateReactComponent. The ref can change\n // if you swap the keys of but not the refs. Reconsider where this check\n // is made. It probably belongs where the key checking and\n // instantiateReactComponent is done.\n\n var prevRef = null;\n var prevOwner = null;\n if (prevElement !== null && typeof prevElement === 'object') {\n prevRef = prevElement.ref;\n prevOwner = prevElement._owner;\n }\n\n var nextRef = null;\n var nextOwner = null;\n if (nextElement !== null && typeof nextElement === 'object') {\n nextRef = nextElement.ref;\n nextOwner = nextElement._owner;\n }\n\n return prevRef !== nextRef ||\n // If owner changes but we have an unchanged function ref, don't update refs\n typeof nextRef === 'string' && nextOwner !== prevOwner;\n};\n\nReactRef.detachRefs = function (instance, element) {\n if (element === null || typeof element !== 'object') {\n return;\n }\n var ref = element.ref;\n if (ref != null) {\n detachRef(ref, instance, element._owner);\n }\n};\n\nmodule.exports = ReactRef;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * @param {?object} object\n * @return {boolean} True if `object` is a valid owner.\n * @final\n */\nfunction isValidOwner(object) {\n return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');\n}\n\n/**\n * ReactOwners are capable of storing references to owned components.\n *\n * All components are capable of //being// referenced by owner components, but\n * only ReactOwner components are capable of //referencing// owned components.\n * The named reference is known as a \"ref\".\n *\n * Refs are available when mounted and updated during reconciliation.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return (\n * <div onClick={this.handleClick}>\n * <CustomComponent ref=\"custom\" />\n * </div>\n * );\n * },\n * handleClick: function() {\n * this.refs.custom.handleClick();\n * },\n * componentDidMount: function() {\n * this.refs.custom.initialize();\n * }\n * });\n *\n * Refs should rarely be used. When refs are used, they should only be done to\n * control data that is not handled by React's data flow.\n *\n * @class ReactOwner\n */\nvar ReactOwner = {\n /**\n * Adds a component by ref to an owner component.\n *\n * @param {ReactComponent} component Component to reference.\n * @param {string} ref Name by which to refer to the component.\n * @param {ReactOwner} owner Component on which to record the ref.\n * @final\n * @internal\n */\n addComponentAsRefTo: function (component, ref, owner) {\n !isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component\\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('119') : void 0;\n owner.attachRef(ref, component);\n },\n\n /**\n * Removes a component by ref from an owner component.\n *\n * @param {ReactComponent} component Component to dereference.\n * @param {string} ref Name of the ref to remove.\n * @param {ReactOwner} owner Component on which the ref is recorded.\n * @final\n * @internal\n */\n removeComponentAsRefFrom: function (component, ref, owner) {\n !isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might be removing a ref to a component that was not created inside a component\\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('120') : void 0;\n var ownerPublicInstance = owner.getPublicInstance();\n // Check that `component`'s owner is still alive and that `component` is still the current ref\n // because we do not want to detach the ref if another component stole it.\n if (ownerPublicInstance && ownerPublicInstance.refs[ref] === component.getPublicInstance()) {\n owner.detachRef(ref);\n }\n }\n\n};\n\nmodule.exports = ReactOwner;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * Module that is injectable into `EventPluginHub`, that specifies a\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\n * plugins, without having to package every one of them. This is better than\n * having plugins be ordered in the same order that they are injected because\n * that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\n\nvar DefaultEventPluginOrder = ['ResponderEventPlugin', 'SimpleEventPlugin', 'TapEventPlugin', 'EnterLeaveEventPlugin', 'ChangeEventPlugin', 'SelectEventPlugin', 'BeforeInputEventPlugin'];\n\nmodule.exports = DefaultEventPluginOrder;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar EventPropagators = require('./EventPropagators');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\nvar eventTypes = {\n mouseEnter: {\n registrationName: 'onMouseEnter',\n dependencies: ['topMouseOut', 'topMouseOver']\n },\n mouseLeave: {\n registrationName: 'onMouseLeave',\n dependencies: ['topMouseOut', 'topMouseOver']\n }\n};\n\nvar EnterLeaveEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n */\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n if (topLevelType === 'topMouseOver' && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n return null;\n }\n if (topLevelType !== 'topMouseOut' && topLevelType !== 'topMouseOver') {\n // Must not be a mouse in or mouse out - ignoring.\n return null;\n }\n\n var win;\n if (nativeEventTarget.window === nativeEventTarget) {\n // `nativeEventTarget` is probably a window object.\n win = nativeEventTarget;\n } else {\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n var doc = nativeEventTarget.ownerDocument;\n if (doc) {\n win = doc.defaultView || doc.parentWindow;\n } else {\n win = window;\n }\n }\n\n var from;\n var to;\n if (topLevelType === 'topMouseOut') {\n from = targetInst;\n var related = nativeEvent.relatedTarget || nativeEvent.toElement;\n to = related ? ReactDOMComponentTree.getClosestInstanceFromNode(related) : null;\n } else {\n // Moving to a node from outside the window.\n from = null;\n to = targetInst;\n }\n\n if (from === to) {\n // Nothing pertains to our managed components.\n return null;\n }\n\n var fromNode = from == null ? win : ReactDOMComponentTree.getNodeFromInstance(from);\n var toNode = to == null ? win : ReactDOMComponentTree.getNodeFromInstance(to);\n\n var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, from, nativeEvent, nativeEventTarget);\n leave.type = 'mouseleave';\n leave.target = fromNode;\n leave.relatedTarget = toNode;\n\n var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, to, nativeEvent, nativeEventTarget);\n enter.type = 'mouseenter';\n enter.target = toNode;\n enter.relatedTarget = fromNode;\n\n EventPropagators.accumulateEnterLeaveDispatches(leave, enter, from, to);\n\n return [leave, enter];\n }\n\n};\n\nmodule.exports = EnterLeaveEventPlugin;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\n\nvar MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;\nvar HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;\nvar HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;\nvar HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;\nvar HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;\n\nvar HTMLDOMPropertyConfig = {\n isCustomAttribute: RegExp.prototype.test.bind(new RegExp('^(data|aria)-[' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$')),\n Properties: {\n /**\n * Standard Properties\n */\n accept: 0,\n acceptCharset: 0,\n accessKey: 0,\n action: 0,\n allowFullScreen: HAS_BOOLEAN_VALUE,\n allowTransparency: 0,\n alt: 0,\n // specifies target context for links with `preload` type\n as: 0,\n async: HAS_BOOLEAN_VALUE,\n autoComplete: 0,\n // autoFocus is polyfilled/normalized by AutoFocusUtils\n // autoFocus: HAS_BOOLEAN_VALUE,\n autoPlay: HAS_BOOLEAN_VALUE,\n capture: HAS_BOOLEAN_VALUE,\n cellPadding: 0,\n cellSpacing: 0,\n charSet: 0,\n challenge: 0,\n checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n cite: 0,\n classID: 0,\n className: 0,\n cols: HAS_POSITIVE_NUMERIC_VALUE,\n colSpan: 0,\n content: 0,\n contentEditable: 0,\n contextMenu: 0,\n controls: HAS_BOOLEAN_VALUE,\n coords: 0,\n crossOrigin: 0,\n data: 0, // For `<object />` acts as `src`.\n dateTime: 0,\n 'default': HAS_BOOLEAN_VALUE,\n defer: HAS_BOOLEAN_VALUE,\n dir: 0,\n disabled: HAS_BOOLEAN_VALUE,\n download: HAS_OVERLOADED_BOOLEAN_VALUE,\n draggable: 0,\n encType: 0,\n form: 0,\n formAction: 0,\n formEncType: 0,\n formMethod: 0,\n formNoValidate: HAS_BOOLEAN_VALUE,\n formTarget: 0,\n frameBorder: 0,\n headers: 0,\n height: 0,\n hidden: HAS_BOOLEAN_VALUE,\n high: 0,\n href: 0,\n hrefLang: 0,\n htmlFor: 0,\n httpEquiv: 0,\n icon: 0,\n id: 0,\n inputMode: 0,\n integrity: 0,\n is: 0,\n keyParams: 0,\n keyType: 0,\n kind: 0,\n label: 0,\n lang: 0,\n list: 0,\n loop: HAS_BOOLEAN_VALUE,\n low: 0,\n manifest: 0,\n marginHeight: 0,\n marginWidth: 0,\n max: 0,\n maxLength: 0,\n media: 0,\n mediaGroup: 0,\n method: 0,\n min: 0,\n minLength: 0,\n // Caution; `option.selected` is not updated if `select.multiple` is\n // disabled with `removeAttribute`.\n multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n name: 0,\n nonce: 0,\n noValidate: HAS_BOOLEAN_VALUE,\n open: HAS_BOOLEAN_VALUE,\n optimum: 0,\n pattern: 0,\n placeholder: 0,\n playsInline: HAS_BOOLEAN_VALUE,\n poster: 0,\n preload: 0,\n profile: 0,\n radioGroup: 0,\n readOnly: HAS_BOOLEAN_VALUE,\n referrerPolicy: 0,\n rel: 0,\n required: HAS_BOOLEAN_VALUE,\n reversed: HAS_BOOLEAN_VALUE,\n role: 0,\n rows: HAS_POSITIVE_NUMERIC_VALUE,\n rowSpan: HAS_NUMERIC_VALUE,\n sandbox: 0,\n scope: 0,\n scoped: HAS_BOOLEAN_VALUE,\n scrolling: 0,\n seamless: HAS_BOOLEAN_VALUE,\n selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n shape: 0,\n size: HAS_POSITIVE_NUMERIC_VALUE,\n sizes: 0,\n span: HAS_POSITIVE_NUMERIC_VALUE,\n spellCheck: 0,\n src: 0,\n srcDoc: 0,\n srcLang: 0,\n srcSet: 0,\n start: HAS_NUMERIC_VALUE,\n step: 0,\n style: 0,\n summary: 0,\n tabIndex: 0,\n target: 0,\n title: 0,\n // Setting .type throws on non-<input> tags\n type: 0,\n useMap: 0,\n value: 0,\n width: 0,\n wmode: 0,\n wrap: 0,\n\n /**\n * RDFa Properties\n */\n about: 0,\n datatype: 0,\n inlist: 0,\n prefix: 0,\n // property is also supported for OpenGraph in meta tags.\n property: 0,\n resource: 0,\n 'typeof': 0,\n vocab: 0,\n\n /**\n * Non-standard Properties\n */\n // autoCapitalize and autoCorrect are supported in Mobile Safari for\n // keyboard hints.\n autoCapitalize: 0,\n autoCorrect: 0,\n // autoSave allows WebKit/Blink to persist values of input fields on page reloads\n autoSave: 0,\n // color is for Safari mask-icon link\n color: 0,\n // itemProp, itemScope, itemType are for\n // Microdata support. See http://schema.org/docs/gs.html\n itemProp: 0,\n itemScope: HAS_BOOLEAN_VALUE,\n itemType: 0,\n // itemID and itemRef are for Microdata support as well but\n // only specified in the WHATWG spec document. See\n // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api\n itemID: 0,\n itemRef: 0,\n // results show looking glass icon and recent searches on input\n // search fields in WebKit/Blink\n results: 0,\n // IE-only attribute that specifies security restrictions on an iframe\n // as an alternative to the sandbox attribute on IE<10\n security: 0,\n // IE-only attribute that controls focus behavior\n unselectable: 0\n },\n DOMAttributeNames: {\n acceptCharset: 'accept-charset',\n className: 'class',\n htmlFor: 'for',\n httpEquiv: 'http-equiv'\n },\n DOMPropertyNames: {}\n};\n\nmodule.exports = HTMLDOMPropertyConfig;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\n\n/**\n * Abstracts away all functionality of the reconciler that requires knowledge of\n * the browser context. TODO: These callers should be refactored to avoid the\n * need for this injection.\n */\nvar ReactComponentBrowserEnvironment = {\n\n processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,\n\n replaceNodeWithMarkup: DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup\n\n};\n\nmodule.exports = ReactComponentBrowserEnvironment;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar createNodesFromMarkup = require('fbjs/lib/createNodesFromMarkup');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar invariant = require('fbjs/lib/invariant');\n\nvar Danger = {\n\n /**\n * Replaces a node with a string of markup at its current position within its\n * parent. The markup must render into a single root node.\n *\n * @param {DOMElement} oldChild Child node to replace.\n * @param {string} markup Markup to render in place of the child node.\n * @internal\n */\n dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {\n !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('56') : void 0;\n !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : _prodInvariant('57') : void 0;\n !(oldChild.nodeName !== 'HTML') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the <html> node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See ReactDOMServer.renderToString().') : _prodInvariant('58') : void 0;\n\n if (typeof markup === 'string') {\n var newChild = createNodesFromMarkup(markup, emptyFunction)[0];\n oldChild.parentNode.replaceChild(newChild, oldChild);\n } else {\n DOMLazyTree.replaceChildWithTree(oldChild, markup);\n }\n }\n\n};\n\nmodule.exports = Danger;","'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\n/*eslint-disable fb-www/unsafe-html*/\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar createArrayFromMixed = require('./createArrayFromMixed');\nvar getMarkupWrap = require('./getMarkupWrap');\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to render all markup.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Pattern used by `getNodeName`.\n */\nvar nodeNamePattern = /^\\s*<(\\w+)/;\n\n/**\n * Extracts the `nodeName` of the first element in a string of markup.\n *\n * @param {string} markup String of markup.\n * @return {?string} Node name of the supplied markup.\n */\nfunction getNodeName(markup) {\n var nodeNameMatch = markup.match(nodeNamePattern);\n return nodeNameMatch && nodeNameMatch[1].toLowerCase();\n}\n\n/**\n * Creates an array containing the nodes rendered from the supplied markup. The\n * optionally supplied `handleScript` function will be invoked once for each\n * <script> element that is rendered. If no `handleScript` function is supplied,\n * an exception is thrown if any <script> elements are rendered.\n *\n * @param {string} markup A string of valid HTML markup.\n * @param {?function} handleScript Invoked once for each rendered <script>.\n * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.\n */\nfunction createNodesFromMarkup(markup, handleScript) {\n var node = dummyNode;\n !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : void 0;\n var nodeName = getNodeName(markup);\n\n var wrap = nodeName && getMarkupWrap(nodeName);\n if (wrap) {\n node.innerHTML = wrap[1] + markup + wrap[2];\n\n var wrapDepth = wrap[0];\n while (wrapDepth--) {\n node = node.lastChild;\n }\n } else {\n node.innerHTML = markup;\n }\n\n var scripts = node.getElementsByTagName('script');\n if (scripts.length) {\n !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : void 0;\n createArrayFromMixed(scripts).forEach(handleScript);\n }\n\n var nodes = Array.from(node.childNodes);\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n return nodes;\n}\n\nmodule.exports = createNodesFromMarkup;","'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 invariant = require('./invariant');\n\n/**\n * Convert array-like objects to arrays.\n *\n * This API assumes the caller knows the contents of the data type. For less\n * well defined inputs use createArrayFromMixed.\n *\n * @param {object|function|filelist} obj\n * @return {array}\n */\nfunction toArray(obj) {\n var length = obj.length;\n\n // Some browsers builtin objects can report typeof 'function' (e.g. NodeList\n // in old versions of Safari).\n !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : void 0;\n\n !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : void 0;\n\n !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : void 0;\n\n !(typeof obj.callee !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object can\\'t be `arguments`. Use rest params ' + '(function(...args) {}) or Array.from() instead.') : invariant(false) : void 0;\n\n // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\n // without method will throw during the slice call and skip straight to the\n // fallback.\n if (obj.hasOwnProperty) {\n try {\n return Array.prototype.slice.call(obj);\n } catch (e) {\n // IE < 9 does not support Array#slice on collections objects\n }\n }\n\n // Fall back to copying key by key. This assumes all keys have a value,\n // so will not preserve sparsely populated inputs.\n var ret = Array(length);\n for (var ii = 0; ii < length; ii++) {\n ret[ii] = obj[ii];\n }\n return ret;\n}\n\n/**\n * Perform a heuristic test to determine if an object is \"array-like\".\n *\n * A monk asked Joshu, a Zen master, \"Has a dog Buddha nature?\"\n * Joshu replied: \"Mu.\"\n *\n * This function determines if its argument has \"array nature\": it returns\n * true if the argument is an actual array, an `arguments' object, or an\n * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\n *\n * It will return false for other array-like objects like Filelist.\n *\n * @param {*} obj\n * @return {boolean}\n */\nfunction hasArrayNature(obj) {\n return (\n // not null/false\n !!obj && (\n // arrays are objects, NodeLists are functions in Safari\n typeof obj == 'object' || typeof obj == 'function') &&\n // quacks like an array\n 'length' in obj &&\n // not window\n !('setInterval' in obj) &&\n // no DOM node should be considered an array-like\n // a 'select' element has 'length' and 'item' properties on IE8\n typeof obj.nodeType != 'number' && (\n // a real array\n Array.isArray(obj) ||\n // arguments\n 'callee' in obj ||\n // HTMLCollection/NodeList\n 'item' in obj)\n );\n}\n\n/**\n * Ensure that the argument is an array by wrapping it in an array if it is not.\n * Creates a copy of the argument if it is already an array.\n *\n * This is mostly useful idiomatically:\n *\n * var createArrayFromMixed = require('createArrayFromMixed');\n *\n * function takesOneOrMoreThings(things) {\n * things = createArrayFromMixed(things);\n * ...\n * }\n *\n * This allows you to treat `things' as an array, but accept scalars in the API.\n *\n * If you need to convert an array-like object, like `arguments`, into an array\n * use toArray instead.\n *\n * @param {*} obj\n * @return {array}\n */\nfunction createArrayFromMixed(obj) {\n if (!hasArrayNature(obj)) {\n return [obj];\n } else if (Array.isArray(obj)) {\n return obj.slice();\n } else {\n return toArray(obj);\n }\n}\n\nmodule.exports = createArrayFromMixed;","'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 */\n\n/*eslint-disable fb-www/unsafe-html */\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to detect which wraps are necessary.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Some browsers cannot use `innerHTML` to render certain elements standalone,\n * so we wrap them, render the wrapped nodes, then extract the desired node.\n *\n * In IE8, certain elements cannot render alone, so wrap all elements ('*').\n */\n\nvar shouldWrap = {};\n\nvar selectWrap = [1, '<select multiple=\"true\">', '</select>'];\nvar tableWrap = [1, '<table>', '</table>'];\nvar trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\nvar svgWrap = [1, '<svg xmlns=\"http://www.w3.org/2000/svg\">', '</svg>'];\n\nvar markupWrap = {\n '*': [1, '?<div>', '</div>'],\n\n 'area': [1, '<map>', '</map>'],\n 'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\n 'legend': [1, '<fieldset>', '</fieldset>'],\n 'param': [1, '<object>', '</object>'],\n 'tr': [2, '<table><tbody>', '</tbody></table>'],\n\n 'optgroup': selectWrap,\n 'option': selectWrap,\n\n 'caption': tableWrap,\n 'colgroup': tableWrap,\n 'tbody': tableWrap,\n 'tfoot': tableWrap,\n 'thead': tableWrap,\n\n 'td': trWrap,\n 'th': trWrap\n};\n\n// Initialize the SVG elements since we know they'll always need to be wrapped\n// consistently. If they are created inside a <div> they will be initialized in\n// the wrong namespace (and will not display).\nvar svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];\nsvgElements.forEach(function (nodeName) {\n markupWrap[nodeName] = svgWrap;\n shouldWrap[nodeName] = true;\n});\n\n/**\n * Gets the markup wrap configuration for the supplied `nodeName`.\n *\n * NOTE: This lazily detects which wraps are necessary for the current browser.\n *\n * @param {string} nodeName Lowercase `nodeName`.\n * @return {?array} Markup wrap configuration, if applicable.\n */\nfunction getMarkupWrap(nodeName) {\n !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : void 0;\n if (!markupWrap.hasOwnProperty(nodeName)) {\n nodeName = '*';\n }\n if (!shouldWrap.hasOwnProperty(nodeName)) {\n if (nodeName === '*') {\n dummyNode.innerHTML = '<link />';\n } else {\n dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';\n }\n shouldWrap[nodeName] = !dummyNode.firstChild;\n }\n return shouldWrap[nodeName] ? markupWrap[nodeName] : null;\n}\n\nmodule.exports = getMarkupWrap;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\n\n/**\n * Operations used to process updates to DOM nodes.\n */\nvar ReactDOMIDOperations = {\n\n /**\n * Updates a component's children by processing a series of updates.\n *\n * @param {array<object>} updates List of update configurations.\n * @internal\n */\n dangerouslyProcessChildrenUpdates: function (parentInst, updates) {\n var node = ReactDOMComponentTree.getNodeFromInstance(parentInst);\n DOMChildrenOperations.processUpdates(node, updates);\n }\n};\n\nmodule.exports = ReactDOMIDOperations;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/* global hasOwnProperty:true */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar AutoFocusUtils = require('./AutoFocusUtils');\nvar CSSPropertyOperations = require('./CSSPropertyOperations');\nvar DOMLazyTree = require('./DOMLazyTree');\nvar DOMNamespaces = require('./DOMNamespaces');\nvar DOMProperty = require('./DOMProperty');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactDOMComponentFlags = require('./ReactDOMComponentFlags');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDOMInput = require('./ReactDOMInput');\nvar ReactDOMOption = require('./ReactDOMOption');\nvar ReactDOMSelect = require('./ReactDOMSelect');\nvar ReactDOMTextarea = require('./ReactDOMTextarea');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactMultiChild = require('./ReactMultiChild');\nvar ReactServerRenderingTransaction = require('./ReactServerRenderingTransaction');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar invariant = require('fbjs/lib/invariant');\nvar isEventSupported = require('./isEventSupported');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\nvar validateDOMNesting = require('./validateDOMNesting');\nvar warning = require('fbjs/lib/warning');\n\nvar Flags = ReactDOMComponentFlags;\nvar deleteListener = EventPluginHub.deleteListener;\nvar getNode = ReactDOMComponentTree.getNodeFromInstance;\nvar listenTo = ReactBrowserEventEmitter.listenTo;\nvar registrationNameModules = EventPluginRegistry.registrationNameModules;\n\n// For quickly matching children type, to test if can be treated as content.\nvar CONTENT_TYPES = { 'string': true, 'number': true };\n\nvar STYLE = 'style';\nvar HTML = '__html';\nvar RESERVED_PROPS = {\n children: null,\n dangerouslySetInnerHTML: null,\n suppressContentEditableWarning: null\n};\n\n// Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).\nvar DOC_FRAGMENT_TYPE = 11;\n\nfunction getDeclarationErrorAddendum(internalInstance) {\n if (internalInstance) {\n var owner = internalInstance._currentElement._owner || null;\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' This DOM node was rendered by `' + name + '`.';\n }\n }\n }\n return '';\n}\n\nfunction friendlyStringify(obj) {\n if (typeof obj === 'object') {\n if (Array.isArray(obj)) {\n return '[' + obj.map(friendlyStringify).join(', ') + ']';\n } else {\n var pairs = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var keyEscaped = /^[a-z$_][\\w$_]*$/i.test(key) ? key : JSON.stringify(key);\n pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));\n }\n }\n return '{' + pairs.join(', ') + '}';\n }\n } else if (typeof obj === 'string') {\n return JSON.stringify(obj);\n } else if (typeof obj === 'function') {\n return '[function object]';\n }\n // Differs from JSON.stringify in that undefined because undefined and that\n // inf and nan don't become null\n return String(obj);\n}\n\nvar styleMutationWarning = {};\n\nfunction checkAndWarnForMutatedStyle(style1, style2, component) {\n if (style1 == null || style2 == null) {\n return;\n }\n if (shallowEqual(style1, style2)) {\n return;\n }\n\n var componentName = component._tag;\n var owner = component._currentElement._owner;\n var ownerName;\n if (owner) {\n ownerName = owner.getName();\n }\n\n var hash = ownerName + '|' + componentName;\n\n if (styleMutationWarning.hasOwnProperty(hash)) {\n return;\n }\n\n styleMutationWarning[hash] = true;\n\n process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : void 0;\n}\n\n/**\n * @param {object} component\n * @param {?object} props\n */\nfunction assertValidProps(component, props) {\n if (!props) {\n return;\n }\n // Note the use of `==` which checks for null or undefined.\n if (voidElementTags[component._tag]) {\n !(props.children == null && props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : _prodInvariant('137', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : void 0;\n }\n if (props.dangerouslySetInnerHTML != null) {\n !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : _prodInvariant('60') : void 0;\n !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.') : _prodInvariant('61') : void 0;\n }\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(props.suppressContentEditableWarning || !props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(props.onFocusIn == null && props.onFocusOut == null, 'React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.') : void 0;\n }\n !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + \\'em\\'}} when using JSX.%s', getDeclarationErrorAddendum(component)) : _prodInvariant('62', getDeclarationErrorAddendum(component)) : void 0;\n}\n\nfunction enqueuePutListener(inst, registrationName, listener, transaction) {\n if (transaction instanceof ReactServerRenderingTransaction) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // IE8 has no API for event capturing and the `onScroll` event doesn't\n // bubble.\n process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\\'t support the `onScroll` event') : void 0;\n }\n var containerInfo = inst._hostContainerInfo;\n var isDocumentFragment = containerInfo._node && containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;\n var doc = isDocumentFragment ? containerInfo._node : containerInfo._ownerDocument;\n listenTo(registrationName, doc);\n transaction.getReactMountReady().enqueue(putListener, {\n inst: inst,\n registrationName: registrationName,\n listener: listener\n });\n}\n\nfunction putListener() {\n var listenerToPut = this;\n EventPluginHub.putListener(listenerToPut.inst, listenerToPut.registrationName, listenerToPut.listener);\n}\n\nfunction inputPostMount() {\n var inst = this;\n ReactDOMInput.postMountWrapper(inst);\n}\n\nfunction textareaPostMount() {\n var inst = this;\n ReactDOMTextarea.postMountWrapper(inst);\n}\n\nfunction optionPostMount() {\n var inst = this;\n ReactDOMOption.postMountWrapper(inst);\n}\n\nvar setAndValidateContentChildDev = emptyFunction;\nif (process.env.NODE_ENV !== 'production') {\n setAndValidateContentChildDev = function (content) {\n var hasExistingContent = this._contentDebugID != null;\n var debugID = this._debugID;\n // This ID represents the inlined child that has no backing instance:\n var contentDebugID = -debugID;\n\n if (content == null) {\n if (hasExistingContent) {\n ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);\n }\n this._contentDebugID = null;\n return;\n }\n\n validateDOMNesting(null, String(content), this, this._ancestorInfo);\n this._contentDebugID = contentDebugID;\n if (hasExistingContent) {\n ReactInstrumentation.debugTool.onBeforeUpdateComponent(contentDebugID, content);\n ReactInstrumentation.debugTool.onUpdateComponent(contentDebugID);\n } else {\n ReactInstrumentation.debugTool.onBeforeMountComponent(contentDebugID, content, debugID);\n ReactInstrumentation.debugTool.onMountComponent(contentDebugID);\n ReactInstrumentation.debugTool.onSetChildren(debugID, [contentDebugID]);\n }\n };\n}\n\n// There are so many media events, it makes sense to just\n// maintain a list rather than create a `trapBubbledEvent` for each\nvar mediaEvents = {\n topAbort: 'abort',\n topCanPlay: 'canplay',\n topCanPlayThrough: 'canplaythrough',\n topDurationChange: 'durationchange',\n topEmptied: 'emptied',\n topEncrypted: 'encrypted',\n topEnded: 'ended',\n topError: 'error',\n topLoadedData: 'loadeddata',\n topLoadedMetadata: 'loadedmetadata',\n topLoadStart: 'loadstart',\n topPause: 'pause',\n topPlay: 'play',\n topPlaying: 'playing',\n topProgress: 'progress',\n topRateChange: 'ratechange',\n topSeeked: 'seeked',\n topSeeking: 'seeking',\n topStalled: 'stalled',\n topSuspend: 'suspend',\n topTimeUpdate: 'timeupdate',\n topVolumeChange: 'volumechange',\n topWaiting: 'waiting'\n};\n\nfunction trapBubbledEventsLocal() {\n var inst = this;\n // If a component renders to null or if another component fatals and causes\n // the state of the tree to be corrupted, `node` here can be null.\n !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : _prodInvariant('63') : void 0;\n var node = getNode(inst);\n !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : _prodInvariant('64') : void 0;\n\n switch (inst._tag) {\n case 'iframe':\n case 'object':\n inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent('topLoad', 'load', node)];\n break;\n case 'video':\n case 'audio':\n\n inst._wrapperState.listeners = [];\n // Create listener for each media event\n for (var event in mediaEvents) {\n if (mediaEvents.hasOwnProperty(event)) {\n inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(event, mediaEvents[event], node));\n }\n }\n break;\n case 'source':\n inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent('topError', 'error', node)];\n break;\n case 'img':\n inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent('topError', 'error', node), ReactBrowserEventEmitter.trapBubbledEvent('topLoad', 'load', node)];\n break;\n case 'form':\n inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent('topReset', 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent('topSubmit', 'submit', node)];\n break;\n case 'input':\n case 'select':\n case 'textarea':\n inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent('topInvalid', 'invalid', node)];\n break;\n }\n}\n\nfunction postUpdateSelectWrapper() {\n ReactDOMSelect.postUpdateWrapper(this);\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\n\nvar omittedCloseTags = {\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 'meta': true,\n 'param': true,\n 'source': true,\n 'track': true,\n 'wbr': true\n};\n\nvar newlineEatingTags = {\n 'listing': true,\n 'pre': true,\n 'textarea': true\n};\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = _assign({\n 'menuitem': true\n}, omittedCloseTags);\n\n// We accept any tag to be rendered but since this gets injected into arbitrary\n// HTML, we want to make sure that it's a safe tag.\n// http://www.w3.org/TR/REC-xml/#NT-Name\n\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/; // Simplified subset\nvar validatedTagCache = {};\nvar hasOwnProperty = {}.hasOwnProperty;\n\nfunction validateDangerousTag(tag) {\n if (!hasOwnProperty.call(validatedTagCache, tag)) {\n !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : _prodInvariant('65', tag) : void 0;\n validatedTagCache[tag] = true;\n }\n}\n\nfunction isCustomComponent(tagName, props) {\n return tagName.indexOf('-') >= 0 || props.is != null;\n}\n\nvar globalIdCounter = 1;\n\n/**\n * Creates a new React class that is idempotent and capable of containing other\n * React components. It accepts event listeners and DOM properties that are\n * valid according to `DOMProperty`.\n *\n * - Event listeners: `onClick`, `onMouseDown`, etc.\n * - DOM properties: `className`, `name`, `title`, etc.\n *\n * The `style` property functions differently from the DOM API. It accepts an\n * object mapping of style properties to values.\n *\n * @constructor ReactDOMComponent\n * @extends ReactMultiChild\n */\nfunction ReactDOMComponent(element) {\n var tag = element.type;\n validateDangerousTag(tag);\n this._currentElement = element;\n this._tag = tag.toLowerCase();\n this._namespaceURI = null;\n this._renderedChildren = null;\n this._previousStyle = null;\n this._previousStyleCopy = null;\n this._hostNode = null;\n this._hostParent = null;\n this._rootNodeID = 0;\n this._domID = 0;\n this._hostContainerInfo = null;\n this._wrapperState = null;\n this._topLevelWrapper = null;\n this._flags = 0;\n if (process.env.NODE_ENV !== 'production') {\n this._ancestorInfo = null;\n setAndValidateContentChildDev.call(this, null);\n }\n}\n\nReactDOMComponent.displayName = 'ReactDOMComponent';\n\nReactDOMComponent.Mixin = {\n\n /**\n * Generates root tag markup then recurses. This method has side effects and\n * is not idempotent.\n *\n * @internal\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {?ReactDOMComponent} the parent component instance\n * @param {?object} info about the host container\n * @param {object} context\n * @return {string} The computed markup.\n */\n mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\n this._rootNodeID = globalIdCounter++;\n this._domID = hostContainerInfo._idCounter++;\n this._hostParent = hostParent;\n this._hostContainerInfo = hostContainerInfo;\n\n var props = this._currentElement.props;\n\n switch (this._tag) {\n case 'audio':\n case 'form':\n case 'iframe':\n case 'img':\n case 'link':\n case 'object':\n case 'source':\n case 'video':\n this._wrapperState = {\n listeners: null\n };\n transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n break;\n case 'input':\n ReactDOMInput.mountWrapper(this, props, hostParent);\n props = ReactDOMInput.getHostProps(this, props);\n transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n break;\n case 'option':\n ReactDOMOption.mountWrapper(this, props, hostParent);\n props = ReactDOMOption.getHostProps(this, props);\n break;\n case 'select':\n ReactDOMSelect.mountWrapper(this, props, hostParent);\n props = ReactDOMSelect.getHostProps(this, props);\n transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n break;\n case 'textarea':\n ReactDOMTextarea.mountWrapper(this, props, hostParent);\n props = ReactDOMTextarea.getHostProps(this, props);\n transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n break;\n }\n\n assertValidProps(this, props);\n\n // We create tags in the namespace of their parent container, except HTML\n // tags get no namespace.\n var namespaceURI;\n var parentTag;\n if (hostParent != null) {\n namespaceURI = hostParent._namespaceURI;\n parentTag = hostParent._tag;\n } else if (hostContainerInfo._tag) {\n namespaceURI = hostContainerInfo._namespaceURI;\n parentTag = hostContainerInfo._tag;\n }\n if (namespaceURI == null || namespaceURI === DOMNamespaces.svg && parentTag === 'foreignobject') {\n namespaceURI = DOMNamespaces.html;\n }\n if (namespaceURI === DOMNamespaces.html) {\n if (this._tag === 'svg') {\n namespaceURI = DOMNamespaces.svg;\n } else if (this._tag === 'math') {\n namespaceURI = DOMNamespaces.mathml;\n }\n }\n this._namespaceURI = namespaceURI;\n\n if (process.env.NODE_ENV !== 'production') {\n var parentInfo;\n if (hostParent != null) {\n parentInfo = hostParent._ancestorInfo;\n } else if (hostContainerInfo._tag) {\n parentInfo = hostContainerInfo._ancestorInfo;\n }\n if (parentInfo) {\n // parentInfo should always be present except for the top-level\n // component when server rendering\n validateDOMNesting(this._tag, null, this, parentInfo);\n }\n this._ancestorInfo = validateDOMNesting.updatedAncestorInfo(parentInfo, this._tag, this);\n }\n\n var mountImage;\n if (transaction.useCreateElement) {\n var ownerDocument = hostContainerInfo._ownerDocument;\n var el;\n if (namespaceURI === DOMNamespaces.html) {\n if (this._tag === 'script') {\n // Create the script via .innerHTML so its \"parser-inserted\" flag is\n // set to true and it does not execute\n var div = ownerDocument.createElement('div');\n var type = this._currentElement.type;\n div.innerHTML = '<' + type + '></' + type + '>';\n el = div.removeChild(div.firstChild);\n } else if (props.is) {\n el = ownerDocument.createElement(this._currentElement.type, props.is);\n } else {\n // Separate else branch instead of using `props.is || undefined` above becuase of a Firefox bug.\n // See discussion in https://github.com/facebook/react/pull/6896\n // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\n el = ownerDocument.createElement(this._currentElement.type);\n }\n } else {\n el = ownerDocument.createElementNS(namespaceURI, this._currentElement.type);\n }\n ReactDOMComponentTree.precacheNode(this, el);\n this._flags |= Flags.hasCachedChildNodes;\n if (!this._hostParent) {\n DOMPropertyOperations.setAttributeForRoot(el);\n }\n this._updateDOMProperties(null, props, transaction);\n var lazyTree = DOMLazyTree(el);\n this._createInitialChildren(transaction, props, context, lazyTree);\n mountImage = lazyTree;\n } else {\n var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);\n var tagContent = this._createContentMarkup(transaction, props, context);\n if (!tagContent && omittedCloseTags[this._tag]) {\n mountImage = tagOpen + '/>';\n } else {\n mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';\n }\n }\n\n switch (this._tag) {\n case 'input':\n transaction.getReactMountReady().enqueue(inputPostMount, this);\n if (props.autoFocus) {\n transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n }\n break;\n case 'textarea':\n transaction.getReactMountReady().enqueue(textareaPostMount, this);\n if (props.autoFocus) {\n transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n }\n break;\n case 'select':\n if (props.autoFocus) {\n transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n }\n break;\n case 'button':\n if (props.autoFocus) {\n transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n }\n break;\n case 'option':\n transaction.getReactMountReady().enqueue(optionPostMount, this);\n break;\n }\n\n return mountImage;\n },\n\n /**\n * Creates markup for the open tag and all attributes.\n *\n * This method has side effects because events get registered.\n *\n * Iterating over object properties is faster than iterating over arrays.\n * @see http://jsperf.com/obj-vs-arr-iteration\n *\n * @private\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {object} props\n * @return {string} Markup of opening tag.\n */\n _createOpenTagMarkupAndPutListeners: function (transaction, props) {\n var ret = '<' + this._currentElement.type;\n\n for (var propKey in props) {\n if (!props.hasOwnProperty(propKey)) {\n continue;\n }\n var propValue = props[propKey];\n if (propValue == null) {\n continue;\n }\n if (registrationNameModules.hasOwnProperty(propKey)) {\n if (propValue) {\n enqueuePutListener(this, propKey, propValue, transaction);\n }\n } else {\n if (propKey === STYLE) {\n if (propValue) {\n if (process.env.NODE_ENV !== 'production') {\n // See `_updateDOMProperties`. style block\n this._previousStyle = propValue;\n }\n propValue = this._previousStyleCopy = _assign({}, props.style);\n }\n propValue = CSSPropertyOperations.createMarkupForStyles(propValue, this);\n }\n var markup = null;\n if (this._tag != null && isCustomComponent(this._tag, props)) {\n if (!RESERVED_PROPS.hasOwnProperty(propKey)) {\n markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);\n }\n } else {\n markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);\n }\n if (markup) {\n ret += ' ' + markup;\n }\n }\n }\n\n // For static pages, no need to put React ID and checksum. Saves lots of\n // bytes.\n if (transaction.renderToStaticMarkup) {\n return ret;\n }\n\n if (!this._hostParent) {\n ret += ' ' + DOMPropertyOperations.createMarkupForRoot();\n }\n ret += ' ' + DOMPropertyOperations.createMarkupForID(this._domID);\n return ret;\n },\n\n /**\n * Creates markup for the content between the tags.\n *\n * @private\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {object} props\n * @param {object} context\n * @return {string} Content markup.\n */\n _createContentMarkup: function (transaction, props, context) {\n var ret = '';\n\n // Intentional use of != to avoid catching zero/false.\n var innerHTML = props.dangerouslySetInnerHTML;\n if (innerHTML != null) {\n if (innerHTML.__html != null) {\n ret = innerHTML.__html;\n }\n } else {\n var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n var childrenToUse = contentToUse != null ? null : props.children;\n if (contentToUse != null) {\n // TODO: Validate that text is allowed as a child of this node\n ret = escapeTextContentForBrowser(contentToUse);\n if (process.env.NODE_ENV !== 'production') {\n setAndValidateContentChildDev.call(this, contentToUse);\n }\n } else if (childrenToUse != null) {\n var mountImages = this.mountChildren(childrenToUse, transaction, context);\n ret = mountImages.join('');\n }\n }\n if (newlineEatingTags[this._tag] && ret.charAt(0) === '\\n') {\n // text/html ignores the first character in these tags if it's a newline\n // Prefer to break application/xml over text/html (for now) by adding\n // a newline specifically to get eaten by the parser. (Alternately for\n // textareas, replacing \"^\\n\" with \"\\r\\n\" doesn't get eaten, and the first\n // \\r is normalized out by HTMLTextAreaElement#value.)\n // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\n // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\n // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\n // See: Parsing of \"textarea\" \"listing\" and \"pre\" elements\n // from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\n return '\\n' + ret;\n } else {\n return ret;\n }\n },\n\n _createInitialChildren: function (transaction, props, context, lazyTree) {\n // Intentional use of != to avoid catching zero/false.\n var innerHTML = props.dangerouslySetInnerHTML;\n if (innerHTML != null) {\n if (innerHTML.__html != null) {\n DOMLazyTree.queueHTML(lazyTree, innerHTML.__html);\n }\n } else {\n var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n var childrenToUse = contentToUse != null ? null : props.children;\n if (contentToUse != null) {\n // TODO: Validate that text is allowed as a child of this node\n if (process.env.NODE_ENV !== 'production') {\n setAndValidateContentChildDev.call(this, contentToUse);\n }\n DOMLazyTree.queueText(lazyTree, contentToUse);\n } else if (childrenToUse != null) {\n var mountImages = this.mountChildren(childrenToUse, transaction, context);\n for (var i = 0; i < mountImages.length; i++) {\n DOMLazyTree.queueChild(lazyTree, mountImages[i]);\n }\n }\n }\n },\n\n /**\n * Receives a next element and updates the component.\n *\n * @internal\n * @param {ReactElement} nextElement\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {object} context\n */\n receiveComponent: function (nextElement, transaction, context) {\n var prevElement = this._currentElement;\n this._currentElement = nextElement;\n this.updateComponent(transaction, prevElement, nextElement, context);\n },\n\n /**\n * Updates a DOM component after it has already been allocated and\n * attached to the DOM. Reconciles the root DOM node, then recurses.\n *\n * @param {ReactReconcileTransaction} transaction\n * @param {ReactElement} prevElement\n * @param {ReactElement} nextElement\n * @internal\n * @overridable\n */\n updateComponent: function (transaction, prevElement, nextElement, context) {\n var lastProps = prevElement.props;\n var nextProps = this._currentElement.props;\n\n switch (this._tag) {\n case 'input':\n lastProps = ReactDOMInput.getHostProps(this, lastProps);\n nextProps = ReactDOMInput.getHostProps(this, nextProps);\n break;\n case 'option':\n lastProps = ReactDOMOption.getHostProps(this, lastProps);\n nextProps = ReactDOMOption.getHostProps(this, nextProps);\n break;\n case 'select':\n lastProps = ReactDOMSelect.getHostProps(this, lastProps);\n nextProps = ReactDOMSelect.getHostProps(this, nextProps);\n break;\n case 'textarea':\n lastProps = ReactDOMTextarea.getHostProps(this, lastProps);\n nextProps = ReactDOMTextarea.getHostProps(this, nextProps);\n break;\n }\n\n assertValidProps(this, nextProps);\n this._updateDOMProperties(lastProps, nextProps, transaction);\n this._updateDOMChildren(lastProps, nextProps, transaction, context);\n\n switch (this._tag) {\n case 'input':\n // Update the wrapper around inputs *after* updating props. This has to\n // happen after `_updateDOMProperties`. Otherwise HTML5 input validations\n // raise warnings and prevent the new value from being assigned.\n ReactDOMInput.updateWrapper(this);\n break;\n case 'textarea':\n ReactDOMTextarea.updateWrapper(this);\n break;\n case 'select':\n // <select> value update needs to occur after <option> children\n // reconciliation\n transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);\n break;\n }\n },\n\n /**\n * Reconciles the properties by detecting differences in property values and\n * updating the DOM as necessary. This function is probably the single most\n * critical path for performance optimization.\n *\n * TODO: Benchmark whether checking for changed values in memory actually\n * improves performance (especially statically positioned elements).\n * TODO: Benchmark the effects of putting this at the top since 99% of props\n * do not change for a given reconciliation.\n * TODO: Benchmark areas that can be improved with caching.\n *\n * @private\n * @param {object} lastProps\n * @param {object} nextProps\n * @param {?DOMElement} node\n */\n _updateDOMProperties: function (lastProps, nextProps, transaction) {\n var propKey;\n var styleName;\n var styleUpdates;\n for (propKey in lastProps) {\n if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {\n continue;\n }\n if (propKey === STYLE) {\n var lastStyle = this._previousStyleCopy;\n for (styleName in lastStyle) {\n if (lastStyle.hasOwnProperty(styleName)) {\n styleUpdates = styleUpdates || {};\n styleUpdates[styleName] = '';\n }\n }\n this._previousStyleCopy = null;\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (lastProps[propKey]) {\n // Only call deleteListener if there was a listener previously or\n // else willDeleteListener gets called when there wasn't actually a\n // listener (e.g., onClick={null})\n deleteListener(this, propKey);\n }\n } else if (isCustomComponent(this._tag, lastProps)) {\n if (!RESERVED_PROPS.hasOwnProperty(propKey)) {\n DOMPropertyOperations.deleteValueForAttribute(getNode(this), propKey);\n }\n } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n DOMPropertyOperations.deleteValueForProperty(getNode(this), propKey);\n }\n }\n for (propKey in nextProps) {\n var nextProp = nextProps[propKey];\n var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps != null ? lastProps[propKey] : undefined;\n if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {\n continue;\n }\n if (propKey === STYLE) {\n if (nextProp) {\n if (process.env.NODE_ENV !== 'production') {\n checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);\n this._previousStyle = nextProp;\n }\n nextProp = this._previousStyleCopy = _assign({}, nextProp);\n } else {\n this._previousStyleCopy = null;\n }\n if (lastProp) {\n // Unset styles on `lastProp` but not on `nextProp`.\n for (styleName in lastProp) {\n if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n styleUpdates = styleUpdates || {};\n styleUpdates[styleName] = '';\n }\n }\n // Update styles that changed since `lastProp`.\n for (styleName in nextProp) {\n if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n styleUpdates = styleUpdates || {};\n styleUpdates[styleName] = nextProp[styleName];\n }\n }\n } else {\n // Relies on `updateStylesByID` not mutating `styleUpdates`.\n styleUpdates = nextProp;\n }\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp) {\n enqueuePutListener(this, propKey, nextProp, transaction);\n } else if (lastProp) {\n deleteListener(this, propKey);\n }\n } else if (isCustomComponent(this._tag, nextProps)) {\n if (!RESERVED_PROPS.hasOwnProperty(propKey)) {\n DOMPropertyOperations.setValueForAttribute(getNode(this), propKey, nextProp);\n }\n } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n var node = getNode(this);\n // If we're updating to null or undefined, we should remove the property\n // from the DOM node instead of inadvertently setting to a string. This\n // brings us in line with the same behavior we have on initial render.\n if (nextProp != null) {\n DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);\n } else {\n DOMPropertyOperations.deleteValueForProperty(node, propKey);\n }\n }\n }\n if (styleUpdates) {\n CSSPropertyOperations.setValueForStyles(getNode(this), styleUpdates, this);\n }\n },\n\n /**\n * Reconciles the children with the various properties that affect the\n * children content.\n *\n * @param {object} lastProps\n * @param {object} nextProps\n * @param {ReactReconcileTransaction} transaction\n * @param {object} context\n */\n _updateDOMChildren: function (lastProps, nextProps, transaction, context) {\n var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;\n var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;\n\n var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;\n var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;\n\n // Note the use of `!=` which checks for null or undefined.\n var lastChildren = lastContent != null ? null : lastProps.children;\n var nextChildren = nextContent != null ? null : nextProps.children;\n\n // If we're switching from children to content/html or vice versa, remove\n // the old content\n var lastHasContentOrHtml = lastContent != null || lastHtml != null;\n var nextHasContentOrHtml = nextContent != null || nextHtml != null;\n if (lastChildren != null && nextChildren == null) {\n this.updateChildren(null, transaction, context);\n } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {\n this.updateTextContent('');\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);\n }\n }\n\n if (nextContent != null) {\n if (lastContent !== nextContent) {\n this.updateTextContent('' + nextContent);\n if (process.env.NODE_ENV !== 'production') {\n setAndValidateContentChildDev.call(this, nextContent);\n }\n }\n } else if (nextHtml != null) {\n if (lastHtml !== nextHtml) {\n this.updateMarkup('' + nextHtml);\n }\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);\n }\n } else if (nextChildren != null) {\n if (process.env.NODE_ENV !== 'production') {\n setAndValidateContentChildDev.call(this, null);\n }\n\n this.updateChildren(nextChildren, transaction, context);\n }\n },\n\n getHostNode: function () {\n return getNode(this);\n },\n\n /**\n * Destroys all event registrations for this instance. Does not remove from\n * the DOM. That must be done by the parent.\n *\n * @internal\n */\n unmountComponent: function (safely) {\n switch (this._tag) {\n case 'audio':\n case 'form':\n case 'iframe':\n case 'img':\n case 'link':\n case 'object':\n case 'source':\n case 'video':\n var listeners = this._wrapperState.listeners;\n if (listeners) {\n for (var i = 0; i < listeners.length; i++) {\n listeners[i].remove();\n }\n }\n break;\n case 'html':\n case 'head':\n case 'body':\n /**\n * Components like <html> <head> and <body> can't be removed or added\n * easily in a cross-browser way, however it's valuable to be able to\n * take advantage of React's reconciliation for styling and <title>\n * management. So we just document it and throw in dangerous cases.\n */\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is impossible to unmount some top-level components (eg <html>, <head>, and <body>) reliably and efficiently. To fix this, have a single top-level component that never unmounts render these elements.', this._tag) : _prodInvariant('66', this._tag) : void 0;\n break;\n }\n\n this.unmountChildren(safely);\n ReactDOMComponentTree.uncacheNode(this);\n EventPluginHub.deleteAllListeners(this);\n this._rootNodeID = 0;\n this._domID = 0;\n this._wrapperState = null;\n\n if (process.env.NODE_ENV !== 'production') {\n setAndValidateContentChildDev.call(this, null);\n }\n },\n\n getPublicInstance: function () {\n return getNode(this);\n }\n\n};\n\n_assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);\n\nmodule.exports = ReactDOMComponent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\n\nvar focusNode = require('fbjs/lib/focusNode');\n\nvar AutoFocusUtils = {\n focusDOMComponent: function () {\n focusNode(ReactDOMComponentTree.getNodeFromInstance(this));\n }\n};\n\nmodule.exports = AutoFocusUtils;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar CSSProperty = require('./CSSProperty');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar camelizeStyleName = require('fbjs/lib/camelizeStyleName');\nvar dangerousStyleValue = require('./dangerousStyleValue');\nvar hyphenateStyleName = require('fbjs/lib/hyphenateStyleName');\nvar memoizeStringOnly = require('fbjs/lib/memoizeStringOnly');\nvar warning = require('fbjs/lib/warning');\n\nvar processStyleName = memoizeStringOnly(function (styleName) {\n return hyphenateStyleName(styleName);\n});\n\nvar hasShorthandPropertyBug = false;\nvar styleFloatAccessor = 'cssFloat';\nif (ExecutionEnvironment.canUseDOM) {\n var tempStyle = document.createElement('div').style;\n try {\n // IE8 throws \"Invalid argument.\" if resetting shorthand style properties.\n tempStyle.font = '';\n } catch (e) {\n hasShorthandPropertyBug = true;\n }\n // IE8 only supports accessing cssFloat (standard) as styleFloat\n if (document.documentElement.style.cssFloat === undefined) {\n styleFloatAccessor = 'styleFloat';\n }\n}\n\nif (process.env.NODE_ENV !== 'production') {\n // 'msTransform' is correct, but the other prefixes should be capitalized\n var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n\n // style values shouldn't contain a semicolon\n var badStyleValueWithSemicolonPattern = /;\\s*$/;\n\n var warnedStyleNames = {};\n var warnedStyleValues = {};\n var warnedForNaNValue = false;\n\n var warnHyphenatedStyleName = function (name, owner) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?%s', name, camelizeStyleName(name), checkRenderMessage(owner)) : void 0;\n };\n\n var warnBadVendoredStyleName = function (name, owner) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?%s', name, name.charAt(0).toUpperCase() + name.slice(1), checkRenderMessage(owner)) : void 0;\n };\n\n var warnStyleValueWithSemicolon = function (name, value, owner) {\n if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n return;\n }\n\n warnedStyleValues[value] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\\'t contain a semicolon.%s ' + 'Try \"%s: %s\" instead.', checkRenderMessage(owner), name, value.replace(badStyleValueWithSemicolonPattern, '')) : void 0;\n };\n\n var warnStyleValueIsNaN = function (name, value, owner) {\n if (warnedForNaNValue) {\n return;\n }\n\n warnedForNaNValue = true;\n process.env.NODE_ENV !== 'production' ? warning(false, '`NaN` is an invalid value for the `%s` css style property.%s', name, checkRenderMessage(owner)) : void 0;\n };\n\n var checkRenderMessage = function (owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n };\n\n /**\n * @param {string} name\n * @param {*} value\n * @param {ReactDOMComponent} component\n */\n var warnValidStyle = function (name, value, component) {\n var owner;\n if (component) {\n owner = component._currentElement._owner;\n }\n if (name.indexOf('-') > -1) {\n warnHyphenatedStyleName(name, owner);\n } else if (badVendoredStyleNamePattern.test(name)) {\n warnBadVendoredStyleName(name, owner);\n } else if (badStyleValueWithSemicolonPattern.test(value)) {\n warnStyleValueWithSemicolon(name, value, owner);\n }\n\n if (typeof value === 'number' && isNaN(value)) {\n warnStyleValueIsNaN(name, value, owner);\n }\n };\n}\n\n/**\n * Operations for dealing with CSS properties.\n */\nvar CSSPropertyOperations = {\n\n /**\n * Serializes a mapping of style properties for use as inline styles:\n *\n * > createMarkupForStyles({width: '200px', height: 0})\n * \"width:200px;height:0;\"\n *\n * Undefined values are ignored so that declarative programming is easier.\n * The result should be HTML-escaped before insertion into the DOM.\n *\n * @param {object} styles\n * @param {ReactDOMComponent} component\n * @return {?string}\n */\n createMarkupForStyles: function (styles, component) {\n var serialized = '';\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n var styleValue = styles[styleName];\n if (process.env.NODE_ENV !== 'production') {\n warnValidStyle(styleName, styleValue, component);\n }\n if (styleValue != null) {\n serialized += processStyleName(styleName) + ':';\n serialized += dangerousStyleValue(styleName, styleValue, component) + ';';\n }\n }\n return serialized || null;\n },\n\n /**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n * @param {ReactDOMComponent} component\n */\n setValueForStyles: function (node, styles, component) {\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation({\n instanceID: component._debugID,\n type: 'update styles',\n payload: styles\n });\n }\n\n var style = node.style;\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n if (process.env.NODE_ENV !== 'production') {\n warnValidStyle(styleName, styles[styleName], component);\n }\n var styleValue = dangerousStyleValue(styleName, styles[styleName], component);\n if (styleName === 'float' || styleName === 'cssFloat') {\n styleName = styleFloatAccessor;\n }\n if (styleValue) {\n style[styleName] = styleValue;\n } else {\n var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];\n if (expansion) {\n // Shorthand property that IE8 won't like unsetting, so unset each\n // component to placate it\n for (var individualStyleName in expansion) {\n style[individualStyleName] = '';\n }\n } else {\n style[styleName] = '';\n }\n }\n }\n }\n\n};\n\nmodule.exports = CSSPropertyOperations;","/**\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 camelize = require('./camelize');\n\nvar msPattern = /^-ms-/;\n\n/**\n * Camelcases a hyphenated CSS property name, for example:\n *\n * > camelizeStyleName('background-color')\n * < \"backgroundColor\"\n * > camelizeStyleName('-moz-transition')\n * < \"MozTransition\"\n * > camelizeStyleName('-ms-transition')\n * < \"msTransition\"\n *\n * As Andi Smith suggests\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n * is converted to lowercase `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelizeStyleName(string) {\n return camelize(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = camelizeStyleName;","\"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 _hyphenPattern = /-(.)/g;\n\n/**\n * Camelcases a hyphenated string, for example:\n *\n * > camelize('background-color')\n * < \"backgroundColor\"\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelize(string) {\n return string.replace(_hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n}\n\nmodule.exports = camelize;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar CSSProperty = require('./CSSProperty');\nvar warning = require('fbjs/lib/warning');\n\nvar isUnitlessNumber = CSSProperty.isUnitlessNumber;\nvar styleWarnings = {};\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @param {ReactDOMComponent} component\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value, component) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n if (isEmpty) {\n return '';\n }\n\n var isNonNumeric = isNaN(value);\n if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\n return '' + value; // cast to string\n }\n\n if (typeof value === 'string') {\n if (process.env.NODE_ENV !== 'production') {\n // Allow '0' to pass through without warning. 0 is already special and\n // doesn't require units, so we don't need to warn about it.\n if (component && value !== '0') {\n var owner = component._currentElement._owner;\n var ownerName = owner ? owner.getName() : null;\n if (ownerName && !styleWarnings[ownerName]) {\n styleWarnings[ownerName] = {};\n }\n var warned = false;\n if (ownerName) {\n var warnings = styleWarnings[ownerName];\n warned = warnings[name];\n if (!warned) {\n warnings[name] = true;\n }\n }\n if (!warned) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'a `%s` tag (owner: `%s`) was passed a numeric string value ' + 'for CSS property `%s` (value: `%s`) which will be treated ' + 'as a unitless number in a future version of React.', component._currentElement.type, ownerName || 'unknown', name, value) : void 0;\n }\n }\n }\n value = value.trim();\n }\n return value + 'px';\n}\n\nmodule.exports = dangerousStyleValue;","/**\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;","'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;","/**\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 * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Memoizes the return value of a function that accepts one string argument.\n */\n\nfunction memoizeStringOnly(callback) {\n var cache = {};\n return function (string) {\n if (!cache.hasOwnProperty(string)) {\n cache[string] = callback.call(this, string);\n }\n return cache[string];\n };\n}\n\nmodule.exports = memoizeStringOnly;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\n\n/**\n * Escapes attribute value to prevent scripting attacks.\n *\n * @param {*} value Value to escape.\n * @return {string} An escaped string.\n */\nfunction quoteAttributeValueForBrowser(value) {\n return '\"' + escapeTextContentForBrowser(value) + '\"';\n}\n\nmodule.exports = quoteAttributeValueForBrowser;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar EventPluginHub = require('./EventPluginHub');\n\nfunction runEventQueueInBatch(events) {\n EventPluginHub.enqueueEvents(events);\n EventPluginHub.processEventQueue(false);\n}\n\nvar ReactEventEmitterMixin = {\n\n /**\n * Streams a fired top-level event to `EventPluginHub` where plugins have the\n * opportunity to create `ReactEvent`s to be dispatched.\n */\n handleTopLevel: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var events = EventPluginHub.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n runEventQueueInBatch(events);\n }\n};\n\nmodule.exports = ReactEventEmitterMixin;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n prefixes['Moz' + styleProp] = 'moz' + eventName;\n prefixes['ms' + styleProp] = 'MS' + eventName;\n prefixes['O' + styleProp] = 'o' + eventName.toLowerCase();\n\n return prefixes;\n}\n\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\nvar vendorPrefixes = {\n animationend: makePrefixMap('Animation', 'AnimationEnd'),\n animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n animationstart: makePrefixMap('Animation', 'AnimationStart'),\n transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\nvar prefixedEventNames = {};\n\n/**\n * Element to check for prefixes on.\n */\nvar style = {};\n\n/**\n * Bootstrap if a DOM exists.\n */\nif (ExecutionEnvironment.canUseDOM) {\n style = document.createElement('div').style;\n\n // On some platforms, in particular some releases of Android 4.x,\n // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n // style object but the events that fire will still be prefixed, so we need\n // to check if the un-prefixed events are usable, and if not remove them from the map.\n if (!('AnimationEvent' in window)) {\n delete vendorPrefixes.animationend.animation;\n delete vendorPrefixes.animationiteration.animation;\n delete vendorPrefixes.animationstart.animation;\n }\n\n // Same as above\n if (!('TransitionEvent' in window)) {\n delete vendorPrefixes.transitionend.transition;\n }\n}\n\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) {\n return prefixedEventNames[eventName];\n } else if (!vendorPrefixes[eventName]) {\n return eventName;\n }\n\n var prefixMap = vendorPrefixes[eventName];\n\n for (var styleProp in prefixMap) {\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n return prefixedEventNames[eventName] = prefixMap[styleProp];\n }\n }\n\n return '';\n}\n\nmodule.exports = getVendorPrefixedEventName;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnValueLink = false;\nvar didWarnCheckedLink = false;\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction forceUpdateIfMounted() {\n if (this._rootNodeID) {\n // DOM component is still mounted; update\n ReactDOMInput.updateWrapper(this);\n }\n}\n\nfunction isControlled(props) {\n var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n return usesChecked ? props.checked != null : props.value != null;\n}\n\n/**\n * Implements an <input> host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\nvar ReactDOMInput = {\n getHostProps: function (inst, props) {\n var value = LinkedValueUtils.getValue(props);\n var checked = LinkedValueUtils.getChecked(props);\n\n var hostProps = _assign({\n // Make sure we set .type before any other properties (setting .value\n // before .type means .value is lost in IE11 and below)\n type: undefined,\n // Make sure we set .step before .value (setting .value before .step\n // means .value is rounded on mount, based upon step precision)\n step: undefined,\n // Make sure we set .min & .max before .value (to ensure proper order\n // in corner cases such as min or max deriving from value, e.g. Issue #7170)\n min: undefined,\n max: undefined\n }, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: value != null ? value : inst._wrapperState.initialValue,\n checked: checked != null ? checked : inst._wrapperState.initialChecked,\n onChange: inst._wrapperState.onChange\n });\n\n return hostProps;\n },\n\n mountWrapper: function (inst, props) {\n if (process.env.NODE_ENV !== 'production') {\n LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);\n\n var owner = inst._currentElement._owner;\n\n if (props.valueLink !== undefined && !didWarnValueLink) {\n process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;\n didWarnValueLink = true;\n }\n if (props.checkedLink !== undefined && !didWarnCheckedLink) {\n process.env.NODE_ENV !== 'production' ? warning(false, '`checkedLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;\n didWarnCheckedLink = true;\n }\n if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\n didWarnCheckedDefaultChecked = true;\n }\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\n didWarnValueDefaultValue = true;\n }\n }\n\n var defaultValue = props.defaultValue;\n inst._wrapperState = {\n initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n initialValue: props.value != null ? props.value : defaultValue,\n listeners: null,\n onChange: _handleChange.bind(inst)\n };\n\n if (process.env.NODE_ENV !== 'production') {\n inst._wrapperState.controlled = isControlled(props);\n }\n },\n\n updateWrapper: function (inst) {\n var props = inst._currentElement.props;\n\n if (process.env.NODE_ENV !== 'production') {\n var controlled = isControlled(props);\n var owner = inst._currentElement._owner;\n\n if (!inst._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\n didWarnUncontrolledToControlled = true;\n }\n if (inst._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\n didWarnControlledToUncontrolled = true;\n }\n }\n\n // TODO: Shouldn't this be getChecked(props)?\n var checked = props.checked;\n if (checked != null) {\n DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'checked', checked || false);\n }\n\n var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n var value = LinkedValueUtils.getValue(props);\n if (value != null) {\n\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n var newValue = '' + value;\n\n // To avoid side effects (such as losing text selection), only set value if changed\n if (newValue !== node.value) {\n node.value = newValue;\n }\n } else {\n if (props.value == null && props.defaultValue != null) {\n node.defaultValue = '' + props.defaultValue;\n }\n if (props.checked == null && props.defaultChecked != null) {\n node.defaultChecked = !!props.defaultChecked;\n }\n }\n },\n\n postMountWrapper: function (inst) {\n var props = inst._currentElement.props;\n\n // This is in postMount because we need access to the DOM node, which is not\n // available until after the component has mounted.\n var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n\n // Detach value from defaultValue. We won't do anything if we're working on\n // submit or reset inputs as those values & defaultValues are linked. They\n // are not resetable nodes so this operation doesn't matter and actually\n // removes browser-default values (eg \"Submit Query\") when no value is\n // provided.\n\n switch (props.type) {\n case 'submit':\n case 'reset':\n break;\n case 'color':\n case 'date':\n case 'datetime':\n case 'datetime-local':\n case 'month':\n case 'time':\n case 'week':\n // This fixes the no-show issue on iOS Safari and Android Chrome:\n // https://github.com/facebook/react/issues/7233\n node.value = '';\n node.value = node.defaultValue;\n break;\n default:\n node.value = node.value;\n break;\n }\n\n // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n // this is needed to work around a chrome bug where setting defaultChecked\n // will sometimes influence the value of checked (even after detachment).\n // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n // We need to temporarily unset name to avoid disrupting radio button groups.\n var name = node.name;\n if (name !== '') {\n node.name = '';\n }\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !node.defaultChecked;\n if (name !== '') {\n node.name = name;\n }\n }\n};\n\nfunction _handleChange(event) {\n var props = this._currentElement.props;\n\n var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n // Here we use asap to wait until all updates have propagated, which\n // is important when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n ReactUpdates.asap(forceUpdateIfMounted, this);\n\n var name = props.name;\n if (props.type === 'radio' && name != null) {\n var rootNode = ReactDOMComponentTree.getNodeFromInstance(this);\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n }\n\n // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form, let's just use the global\n // `querySelectorAll` to ensure we don't miss anything.\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n }\n // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React radio buttons with non-React ones.\n var otherInstance = ReactDOMComponentTree.getInstanceFromNode(otherNode);\n !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.') : _prodInvariant('90') : void 0;\n // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n ReactUpdates.asap(forceUpdateIfMounted, otherInstance);\n }\n }\n\n return returnValue;\n}\n\nmodule.exports = ReactDOMInput;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar React = require('react/lib/React');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDOMSelect = require('./ReactDOMSelect');\n\nvar warning = require('fbjs/lib/warning');\nvar didWarnInvalidOptionChildren = false;\n\nfunction flattenChildren(children) {\n var content = '';\n\n // Flatten children and warn if they aren't strings or numbers;\n // invalid types are ignored.\n React.Children.forEach(children, function (child) {\n if (child == null) {\n return;\n }\n if (typeof child === 'string' || typeof child === 'number') {\n content += child;\n } else if (!didWarnInvalidOptionChildren) {\n didWarnInvalidOptionChildren = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : void 0;\n }\n });\n\n return content;\n}\n\n/**\n * Implements an <option> host component that warns when `selected` is set.\n */\nvar ReactDOMOption = {\n mountWrapper: function (inst, props, hostParent) {\n // TODO (yungsters): Remove support for `selected` in <option>.\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : void 0;\n }\n\n // Look up whether this option is 'selected'\n var selectValue = null;\n if (hostParent != null) {\n var selectParent = hostParent;\n\n if (selectParent._tag === 'optgroup') {\n selectParent = selectParent._hostParent;\n }\n\n if (selectParent != null && selectParent._tag === 'select') {\n selectValue = ReactDOMSelect.getSelectValueContext(selectParent);\n }\n }\n\n // If the value is null (e.g., no specified value or after initial mount)\n // or missing (e.g., for <datalist>), we don't change props.selected\n var selected = null;\n if (selectValue != null) {\n var value;\n if (props.value != null) {\n value = props.value + '';\n } else {\n value = flattenChildren(props.children);\n }\n selected = false;\n if (Array.isArray(selectValue)) {\n // multiple\n for (var i = 0; i < selectValue.length; i++) {\n if ('' + selectValue[i] === value) {\n selected = true;\n break;\n }\n }\n } else {\n selected = '' + selectValue === value;\n }\n }\n\n inst._wrapperState = { selected: selected };\n },\n\n postMountWrapper: function (inst) {\n // value=\"\" should make a value attribute (#6219)\n var props = inst._currentElement.props;\n if (props.value != null) {\n var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n node.setAttribute('value', props.value);\n }\n },\n\n getHostProps: function (inst, props) {\n var hostProps = _assign({ selected: undefined, children: undefined }, props);\n\n // Read state only from initial mount because <select> updates value\n // manually; we need the initial state only for server rendering\n if (inst._wrapperState.selected != null) {\n hostProps.selected = inst._wrapperState.selected;\n }\n\n var content = flattenChildren(props.children);\n\n if (content) {\n hostProps.children = content;\n }\n\n return hostProps;\n }\n\n};\n\nmodule.exports = ReactDOMOption;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnValueLink = false;\nvar didWarnValDefaultVal = false;\n\nfunction forceUpdateIfMounted() {\n if (this._rootNodeID) {\n // DOM component is still mounted; update\n ReactDOMTextarea.updateWrapper(this);\n }\n}\n\n/**\n * Implements a <textarea> host component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nvar ReactDOMTextarea = {\n getHostProps: function (inst, props) {\n !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : _prodInvariant('91') : void 0;\n\n // Always set children to the same thing. In IE9, the selection range will\n // get reset if `textContent` is mutated. We could add a check in setTextContent\n // to only set the value if/when the value differs from the node value (which would\n // completely solve this IE9 bug), but Sebastian+Ben seemed to like this solution.\n // The value can be a boolean or object so that's why it's forced to be a string.\n var hostProps = _assign({}, props, {\n value: undefined,\n defaultValue: undefined,\n children: '' + inst._wrapperState.initialValue,\n onChange: inst._wrapperState.onChange\n });\n\n return hostProps;\n },\n\n mountWrapper: function (inst, props) {\n if (process.env.NODE_ENV !== 'production') {\n LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);\n if (props.valueLink !== undefined && !didWarnValueLink) {\n process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `textarea` is deprecated; set `value` and `onChange` instead.') : void 0;\n didWarnValueLink = true;\n }\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;\n didWarnValDefaultVal = true;\n }\n }\n\n var value = LinkedValueUtils.getValue(props);\n var initialValue = value;\n\n // Only bother fetching default value if we're going to use it\n if (value == null) {\n var defaultValue = props.defaultValue;\n // TODO (yungsters): Remove support for children content in <textarea>.\n var children = props.children;\n if (children != null) {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : void 0;\n }\n !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : _prodInvariant('92') : void 0;\n if (Array.isArray(children)) {\n !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : _prodInvariant('93') : void 0;\n children = children[0];\n }\n\n defaultValue = '' + children;\n }\n if (defaultValue == null) {\n defaultValue = '';\n }\n initialValue = defaultValue;\n }\n\n inst._wrapperState = {\n initialValue: '' + initialValue,\n listeners: null,\n onChange: _handleChange.bind(inst)\n };\n },\n\n updateWrapper: function (inst) {\n var props = inst._currentElement.props;\n\n var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n var value = LinkedValueUtils.getValue(props);\n if (value != null) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n var newValue = '' + value;\n\n // To avoid side effects (such as losing text selection), only set value if changed\n if (newValue !== node.value) {\n node.value = newValue;\n }\n if (props.defaultValue == null) {\n node.defaultValue = newValue;\n }\n }\n if (props.defaultValue != null) {\n node.defaultValue = props.defaultValue;\n }\n },\n\n postMountWrapper: function (inst) {\n // This is in postMount because we need access to the DOM node, which is not\n // available until after the component has mounted.\n var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n\n // Warning: node.value may be the empty string at this point (IE11) if placeholder is set.\n node.value = node.textContent; // Detach value from defaultValue\n }\n};\n\nfunction _handleChange(event) {\n var props = this._currentElement.props;\n var returnValue = LinkedValueUtils.executeOnChange(props, event);\n ReactUpdates.asap(forceUpdateIfMounted, this);\n return returnValue;\n}\n\nmodule.exports = ReactDOMTextarea;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar ReactCurrentOwner = require('react/lib/ReactCurrentOwner');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactChildReconciler = require('./ReactChildReconciler');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar flattenChildren = require('./flattenChildren');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Make an update for markup to be rendered and inserted at a supplied index.\n *\n * @param {string} markup Markup that renders into an element.\n * @param {number} toIndex Destination index.\n * @private\n */\nfunction makeInsertMarkup(markup, afterNode, toIndex) {\n // NOTE: Null values reduce hidden classes.\n return {\n type: 'INSERT_MARKUP',\n content: markup,\n fromIndex: null,\n fromNode: null,\n toIndex: toIndex,\n afterNode: afterNode\n };\n}\n\n/**\n * Make an update for moving an existing element to another index.\n *\n * @param {number} fromIndex Source index of the existing element.\n * @param {number} toIndex Destination index of the element.\n * @private\n */\nfunction makeMove(child, afterNode, toIndex) {\n // NOTE: Null values reduce hidden classes.\n return {\n type: 'MOVE_EXISTING',\n content: null,\n fromIndex: child._mountIndex,\n fromNode: ReactReconciler.getHostNode(child),\n toIndex: toIndex,\n afterNode: afterNode\n };\n}\n\n/**\n * Make an update for removing an element at an index.\n *\n * @param {number} fromIndex Index of the element to remove.\n * @private\n */\nfunction makeRemove(child, node) {\n // NOTE: Null values reduce hidden classes.\n return {\n type: 'REMOVE_NODE',\n content: null,\n fromIndex: child._mountIndex,\n fromNode: node,\n toIndex: null,\n afterNode: null\n };\n}\n\n/**\n * Make an update for setting the markup of a node.\n *\n * @param {string} markup Markup that renders into an element.\n * @private\n */\nfunction makeSetMarkup(markup) {\n // NOTE: Null values reduce hidden classes.\n return {\n type: 'SET_MARKUP',\n content: markup,\n fromIndex: null,\n fromNode: null,\n toIndex: null,\n afterNode: null\n };\n}\n\n/**\n * Make an update for setting the text content.\n *\n * @param {string} textContent Text content to set.\n * @private\n */\nfunction makeTextContent(textContent) {\n // NOTE: Null values reduce hidden classes.\n return {\n type: 'TEXT_CONTENT',\n content: textContent,\n fromIndex: null,\n fromNode: null,\n toIndex: null,\n afterNode: null\n };\n}\n\n/**\n * Push an update, if any, onto the queue. Creates a new queue if none is\n * passed and always returns the queue. Mutative.\n */\nfunction enqueue(queue, update) {\n if (update) {\n queue = queue || [];\n queue.push(update);\n }\n return queue;\n}\n\n/**\n * Processes any enqueued updates.\n *\n * @private\n */\nfunction processQueue(inst, updateQueue) {\n ReactComponentEnvironment.processChildrenUpdates(inst, updateQueue);\n}\n\nvar setChildrenForInstrumentation = emptyFunction;\nif (process.env.NODE_ENV !== 'production') {\n var getDebugID = function (inst) {\n if (!inst._debugID) {\n // Check for ART-like instances. TODO: This is silly/gross.\n var internal;\n if (internal = ReactInstanceMap.get(inst)) {\n inst = internal;\n }\n }\n return inst._debugID;\n };\n setChildrenForInstrumentation = function (children) {\n var debugID = getDebugID(this);\n // TODO: React Native empty components are also multichild.\n // This means they still get into this method but don't have _debugID.\n if (debugID !== 0) {\n ReactInstrumentation.debugTool.onSetChildren(debugID, children ? Object.keys(children).map(function (key) {\n return children[key]._debugID;\n }) : []);\n }\n };\n}\n\n/**\n * ReactMultiChild are capable of reconciling multiple children.\n *\n * @class ReactMultiChild\n * @internal\n */\nvar ReactMultiChild = {\n\n /**\n * Provides common functionality for components that must reconcile multiple\n * children. This is used by `ReactDOMComponent` to mount, update, and\n * unmount child components.\n *\n * @lends {ReactMultiChild.prototype}\n */\n Mixin: {\n\n _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {\n if (process.env.NODE_ENV !== 'production') {\n var selfDebugID = getDebugID(this);\n if (this._currentElement) {\n try {\n ReactCurrentOwner.current = this._currentElement._owner;\n return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context, selfDebugID);\n } finally {\n ReactCurrentOwner.current = null;\n }\n }\n }\n return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n },\n\n _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context) {\n var nextChildren;\n var selfDebugID = 0;\n if (process.env.NODE_ENV !== 'production') {\n selfDebugID = getDebugID(this);\n if (this._currentElement) {\n try {\n ReactCurrentOwner.current = this._currentElement._owner;\n nextChildren = flattenChildren(nextNestedChildrenElements, selfDebugID);\n } finally {\n ReactCurrentOwner.current = null;\n }\n ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context, selfDebugID);\n return nextChildren;\n }\n }\n nextChildren = flattenChildren(nextNestedChildrenElements, selfDebugID);\n ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context, selfDebugID);\n return nextChildren;\n },\n\n /**\n * Generates a \"mount image\" for each of the supplied children. In the case\n * of `ReactDOMComponent`, a mount image is a string of markup.\n *\n * @param {?object} nestedChildren Nested child maps.\n * @return {array} An array of mounted representations.\n * @internal\n */\n mountChildren: function (nestedChildren, transaction, context) {\n var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);\n this._renderedChildren = children;\n\n var mountImages = [];\n var index = 0;\n for (var name in children) {\n if (children.hasOwnProperty(name)) {\n var child = children[name];\n var selfDebugID = 0;\n if (process.env.NODE_ENV !== 'production') {\n selfDebugID = getDebugID(this);\n }\n var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._hostContainerInfo, context, selfDebugID);\n child._mountIndex = index++;\n mountImages.push(mountImage);\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n setChildrenForInstrumentation.call(this, children);\n }\n\n return mountImages;\n },\n\n /**\n * Replaces any rendered children with a text content string.\n *\n * @param {string} nextContent String of content.\n * @internal\n */\n updateTextContent: function (nextContent) {\n var prevChildren = this._renderedChildren;\n // Remove any rendered children.\n ReactChildReconciler.unmountChildren(prevChildren, false);\n for (var name in prevChildren) {\n if (prevChildren.hasOwnProperty(name)) {\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;\n }\n }\n // Set new text content.\n var updates = [makeTextContent(nextContent)];\n processQueue(this, updates);\n },\n\n /**\n * Replaces any rendered children with a markup string.\n *\n * @param {string} nextMarkup String of markup.\n * @internal\n */\n updateMarkup: function (nextMarkup) {\n var prevChildren = this._renderedChildren;\n // Remove any rendered children.\n ReactChildReconciler.unmountChildren(prevChildren, false);\n for (var name in prevChildren) {\n if (prevChildren.hasOwnProperty(name)) {\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;\n }\n }\n var updates = [makeSetMarkup(nextMarkup)];\n processQueue(this, updates);\n },\n\n /**\n * Updates the rendered children with new children.\n *\n * @param {?object} nextNestedChildrenElements Nested child element maps.\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n updateChildren: function (nextNestedChildrenElements, transaction, context) {\n // Hook used by React ART\n this._updateChildren(nextNestedChildrenElements, transaction, context);\n },\n\n /**\n * @param {?object} nextNestedChildrenElements Nested child element maps.\n * @param {ReactReconcileTransaction} transaction\n * @final\n * @protected\n */\n _updateChildren: function (nextNestedChildrenElements, transaction, context) {\n var prevChildren = this._renderedChildren;\n var removedNodes = {};\n var mountImages = [];\n var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context);\n if (!nextChildren && !prevChildren) {\n return;\n }\n var updates = null;\n var name;\n // `nextIndex` will increment for each child in `nextChildren`, but\n // `lastIndex` will be the last index visited in `prevChildren`.\n var nextIndex = 0;\n var lastIndex = 0;\n // `nextMountIndex` will increment for each newly mounted child.\n var nextMountIndex = 0;\n var lastPlacedNode = null;\n for (name in nextChildren) {\n if (!nextChildren.hasOwnProperty(name)) {\n continue;\n }\n var prevChild = prevChildren && prevChildren[name];\n var nextChild = nextChildren[name];\n if (prevChild === nextChild) {\n updates = enqueue(updates, this.moveChild(prevChild, lastPlacedNode, nextIndex, lastIndex));\n lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n prevChild._mountIndex = nextIndex;\n } else {\n if (prevChild) {\n // Update `lastIndex` before `_mountIndex` gets unset by unmounting.\n lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n // The `removedNodes` loop below will actually remove the child.\n }\n // The child must be instantiated before it's mounted.\n updates = enqueue(updates, this._mountChildAtIndex(nextChild, mountImages[nextMountIndex], lastPlacedNode, nextIndex, transaction, context));\n nextMountIndex++;\n }\n nextIndex++;\n lastPlacedNode = ReactReconciler.getHostNode(nextChild);\n }\n // Remove children that are no longer present.\n for (name in removedNodes) {\n if (removedNodes.hasOwnProperty(name)) {\n updates = enqueue(updates, this._unmountChild(prevChildren[name], removedNodes[name]));\n }\n }\n if (updates) {\n processQueue(this, updates);\n }\n this._renderedChildren = nextChildren;\n\n if (process.env.NODE_ENV !== 'production') {\n setChildrenForInstrumentation.call(this, nextChildren);\n }\n },\n\n /**\n * Unmounts all rendered children. This should be used to clean up children\n * when this component is unmounted. It does not actually perform any\n * backend operations.\n *\n * @internal\n */\n unmountChildren: function (safely) {\n var renderedChildren = this._renderedChildren;\n ReactChildReconciler.unmountChildren(renderedChildren, safely);\n this._renderedChildren = null;\n },\n\n /**\n * Moves a child component to the supplied index.\n *\n * @param {ReactComponent} child Component to move.\n * @param {number} toIndex Destination index of the element.\n * @param {number} lastIndex Last index visited of the siblings of `child`.\n * @protected\n */\n moveChild: function (child, afterNode, toIndex, lastIndex) {\n // If the index of `child` is less than `lastIndex`, then it needs to\n // be moved. Otherwise, we do not need to move it because a child will be\n // inserted or moved before `child`.\n if (child._mountIndex < lastIndex) {\n return makeMove(child, afterNode, toIndex);\n }\n },\n\n /**\n * Creates a child component.\n *\n * @param {ReactComponent} child Component to create.\n * @param {string} mountImage Markup to insert.\n * @protected\n */\n createChild: function (child, afterNode, mountImage) {\n return makeInsertMarkup(mountImage, afterNode, child._mountIndex);\n },\n\n /**\n * Removes a child component.\n *\n * @param {ReactComponent} child Child to remove.\n * @protected\n */\n removeChild: function (child, node) {\n return makeRemove(child, node);\n },\n\n /**\n * Mounts a child with the supplied name.\n *\n * NOTE: This is part of `updateChildren` and is here for readability.\n *\n * @param {ReactComponent} child Component to mount.\n * @param {string} name Name of the child.\n * @param {number} index Index at which to insert the child.\n * @param {ReactReconcileTransaction} transaction\n * @private\n */\n _mountChildAtIndex: function (child, mountImage, afterNode, index, transaction, context) {\n child._mountIndex = index;\n return this.createChild(child, afterNode, mountImage);\n },\n\n /**\n * Unmounts a rendered child.\n *\n * NOTE: This is part of `updateChildren` and is here for readability.\n *\n * @param {ReactComponent} child Component to unmount.\n * @private\n */\n _unmountChild: function (child, node) {\n var update = this.removeChild(child, node);\n child._mountIndex = null;\n return update;\n }\n\n }\n\n};\n\nmodule.exports = ReactMultiChild;","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ReactReconciler = require('./ReactReconciler');\n\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar KeyEscapeUtils = require('./KeyEscapeUtils');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar traverseAllChildren = require('./traverseAllChildren');\nvar warning = require('fbjs/lib/warning');\n\nvar ReactComponentTreeHook;\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\n // Temporary hack.\n // Inline requires don't work well with Jest:\n // https://github.com/facebook/react/issues/7240\n // Remove the inline requires when we don't need them anymore:\n // https://github.com/facebook/react/pull/7178\n ReactComponentTreeHook = require('react/lib/ReactComponentTreeHook');\n}\n\nfunction instantiateChild(childInstances, child, name, selfDebugID) {\n // We found a component instance.\n var keyUnique = childInstances[name] === undefined;\n if (process.env.NODE_ENV !== 'production') {\n if (!ReactComponentTreeHook) {\n ReactComponentTreeHook = require('react/lib/ReactComponentTreeHook');\n }\n if (!keyUnique) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeHook.getStackAddendumByID(selfDebugID)) : void 0;\n }\n }\n if (child != null && keyUnique) {\n childInstances[name] = instantiateReactComponent(child, true);\n }\n}\n\n/**\n * ReactChildReconciler provides helpers for initializing or updating a set of\n * children. Its output is suitable for passing it onto ReactMultiChild which\n * does diffed reordering and insertion.\n */\nvar ReactChildReconciler = {\n /**\n * Generates a \"mount image\" for each of the supplied children. In the case\n * of `ReactDOMComponent`, a mount image is a string of markup.\n *\n * @param {?object} nestedChildNodes Nested child maps.\n * @return {?object} A set of child instances.\n * @internal\n */\n instantiateChildren: function (nestedChildNodes, transaction, context, selfDebugID // 0 in production and for roots\n ) {\n if (nestedChildNodes == null) {\n return null;\n }\n var childInstances = {};\n\n if (process.env.NODE_ENV !== 'production') {\n traverseAllChildren(nestedChildNodes, function (childInsts, child, name) {\n return instantiateChild(childInsts, child, name, selfDebugID);\n }, childInstances);\n } else {\n traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);\n }\n return childInstances;\n },\n\n /**\n * Updates the rendered children and returns a new set of children.\n *\n * @param {?object} prevChildren Previously initialized set of children.\n * @param {?object} nextChildren Flat child element maps.\n * @param {ReactReconcileTransaction} transaction\n * @param {object} context\n * @return {?object} A new set of child instances.\n * @internal\n */\n updateChildren: function (prevChildren, nextChildren, mountImages, removedNodes, transaction, hostParent, hostContainerInfo, context, selfDebugID // 0 in production and for roots\n ) {\n // We currently don't have a way to track moves here but if we use iterators\n // instead of for..in we can zip the iterators and check if an item has\n // moved.\n // TODO: If nothing has changed, return the prevChildren object so that we\n // can quickly bailout if nothing has changed.\n if (!nextChildren && !prevChildren) {\n return;\n }\n var name;\n var prevChild;\n for (name in nextChildren) {\n if (!nextChildren.hasOwnProperty(name)) {\n continue;\n }\n prevChild = prevChildren && prevChildren[name];\n var prevElement = prevChild && prevChild._currentElement;\n var nextElement = nextChildren[name];\n if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {\n ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);\n nextChildren[name] = prevChild;\n } else {\n if (prevChild) {\n removedNodes[name] = ReactReconciler.getHostNode(prevChild);\n ReactReconciler.unmountComponent(prevChild, false);\n }\n // The child must be instantiated before it's mounted.\n var nextChildInstance = instantiateReactComponent(nextElement, true);\n nextChildren[name] = nextChildInstance;\n // Creating mount image now ensures refs are resolved in right order\n // (see https://github.com/facebook/react/pull/7101 for explanation).\n var nextChildMountImage = ReactReconciler.mountComponent(nextChildInstance, transaction, hostParent, hostContainerInfo, context, selfDebugID);\n mountImages.push(nextChildMountImage);\n }\n }\n // Unmount children that are no longer present.\n for (name in prevChildren) {\n if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\n prevChild = prevChildren[name];\n removedNodes[name] = ReactReconciler.getHostNode(prevChild);\n ReactReconciler.unmountComponent(prevChild, false);\n }\n }\n },\n\n /**\n * Unmounts all rendered children. This should be used to clean up children\n * when this component is unmounted.\n *\n * @param {?object} renderedChildren Previously initialized set of children.\n * @internal\n */\n unmountChildren: function (renderedChildren, safely) {\n for (var name in renderedChildren) {\n if (renderedChildren.hasOwnProperty(name)) {\n var renderedChild = renderedChildren[name];\n ReactReconciler.unmountComponent(renderedChild, safely);\n }\n }\n }\n\n};\n\nmodule.exports = ReactChildReconciler;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar React = require('react/lib/React');\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactCurrentOwner = require('react/lib/ReactCurrentOwner');\nvar ReactErrorUtils = require('./ReactErrorUtils');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactNodeTypes = require('./ReactNodeTypes');\nvar ReactReconciler = require('./ReactReconciler');\n\nif (process.env.NODE_ENV !== 'production') {\n var checkReactTypeSpec = require('./checkReactTypeSpec');\n}\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar warning = require('fbjs/lib/warning');\n\nvar CompositeTypes = {\n ImpureClass: 0,\n PureClass: 1,\n StatelessFunctional: 2\n};\n\nfunction StatelessComponent(Component) {}\nStatelessComponent.prototype.render = function () {\n var Component = ReactInstanceMap.get(this)._currentElement.type;\n var element = Component(this.props, this.context, this.updater);\n warnIfInvalidElement(Component, element);\n return element;\n};\n\nfunction warnIfInvalidElement(Component, element) {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(element === null || element === false || React.isValidElement(element), '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(!Component.childContextTypes, '%s(...): childContextTypes cannot be defined on a functional component.', Component.displayName || Component.name || 'Component') : void 0;\n }\n}\n\nfunction shouldConstruct(Component) {\n return !!(Component.prototype && Component.prototype.isReactComponent);\n}\n\nfunction isPureComponent(Component) {\n return !!(Component.prototype && Component.prototype.isPureReactComponent);\n}\n\n// Separated into a function to contain deoptimizations caused by try/finally.\nfunction measureLifeCyclePerf(fn, debugID, timerType) {\n if (debugID === 0) {\n // Top-level wrappers (see ReactMount) and empty components (see\n // ReactDOMEmptyComponent) are invisible to hooks and devtools.\n // Both are implementation details that should go away in the future.\n return fn();\n }\n\n ReactInstrumentation.debugTool.onBeginLifeCycleTimer(debugID, timerType);\n try {\n return fn();\n } finally {\n ReactInstrumentation.debugTool.onEndLifeCycleTimer(debugID, timerType);\n }\n}\n\n/**\n * ------------------ The Life-Cycle of a Composite Component ------------------\n *\n * - constructor: Initialization of state. The instance is now retained.\n * - componentWillMount\n * - render\n * - [children's constructors]\n * - [children's componentWillMount and render]\n * - [children's componentDidMount]\n * - componentDidMount\n *\n * Update Phases:\n * - componentWillReceiveProps (only called if parent updated)\n * - shouldComponentUpdate\n * - componentWillUpdate\n * - render\n * - [children's constructors or receive props phases]\n * - componentDidUpdate\n *\n * - componentWillUnmount\n * - [children's componentWillUnmount]\n * - [children destroyed]\n * - (destroyed): The instance is now blank, released by React and ready for GC.\n *\n * -----------------------------------------------------------------------------\n */\n\n/**\n * An incrementing ID assigned to each component when it is mounted. This is\n * used to enforce the order in which `ReactUpdates` updates dirty components.\n *\n * @private\n */\nvar nextMountID = 1;\n\n/**\n * @lends {ReactCompositeComponent.prototype}\n */\nvar ReactCompositeComponent = {\n\n /**\n * Base constructor for all composite component.\n *\n * @param {ReactElement} element\n * @final\n * @internal\n */\n construct: function (element) {\n this._currentElement = element;\n this._rootNodeID = 0;\n this._compositeType = null;\n this._instance = null;\n this._hostParent = null;\n this._hostContainerInfo = null;\n\n // See ReactUpdateQueue\n this._updateBatchNumber = null;\n this._pendingElement = null;\n this._pendingStateQueue = null;\n this._pendingReplaceState = false;\n this._pendingForceUpdate = false;\n\n this._renderedNodeType = null;\n this._renderedComponent = null;\n this._context = null;\n this._mountOrder = 0;\n this._topLevelWrapper = null;\n\n // See ReactUpdates and ReactUpdateQueue.\n this._pendingCallbacks = null;\n\n // ComponentWillUnmount shall only be called once\n this._calledComponentWillUnmount = false;\n\n if (process.env.NODE_ENV !== 'production') {\n this._warnedAboutRefsInRender = false;\n }\n },\n\n /**\n * Initializes the component, renders markup, and registers event listeners.\n *\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {?object} hostParent\n * @param {?object} hostContainerInfo\n * @param {?object} context\n * @return {?string} Rendered markup to be inserted into the DOM.\n * @final\n * @internal\n */\n mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\n var _this = this;\n\n this._context = context;\n this._mountOrder = nextMountID++;\n this._hostParent = hostParent;\n this._hostContainerInfo = hostContainerInfo;\n\n var publicProps = this._currentElement.props;\n var publicContext = this._processContext(context);\n\n var Component = this._currentElement.type;\n\n var updateQueue = transaction.getUpdateQueue();\n\n // Initialize the public class\n var doConstruct = shouldConstruct(Component);\n var inst = this._constructComponent(doConstruct, publicProps, publicContext, updateQueue);\n var renderedElement;\n\n // Support functional components\n if (!doConstruct && (inst == null || inst.render == null)) {\n renderedElement = inst;\n warnIfInvalidElement(Component, renderedElement);\n !(inst === null || inst === false || React.isValidElement(inst)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s(...): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : _prodInvariant('105', Component.displayName || Component.name || 'Component') : void 0;\n inst = new StatelessComponent(Component);\n this._compositeType = CompositeTypes.StatelessFunctional;\n } else {\n if (isPureComponent(Component)) {\n this._compositeType = CompositeTypes.PureClass;\n } else {\n this._compositeType = CompositeTypes.ImpureClass;\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This will throw later in _renderValidatedComponent, but add an early\n // warning now to help debugging\n if (inst.render == null) {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', Component.displayName || Component.name || 'Component') : void 0;\n }\n\n var propsMutated = inst.props !== publicProps;\n var componentName = Component.displayName || Component.name || 'Component';\n\n process.env.NODE_ENV !== 'production' ? warning(inst.props === undefined || !propsMutated, '%s(...): When calling super() in `%s`, make sure to pass ' + 'up the same props that your component\\'s constructor was passed.', componentName, componentName) : void 0;\n }\n\n // These should be set up in the constructor, but as a convenience for\n // simpler class abstractions, we set them up after the fact.\n inst.props = publicProps;\n inst.context = publicContext;\n inst.refs = emptyObject;\n inst.updater = updateQueue;\n\n this._instance = inst;\n\n // Store a reference from the instance back to the internal representation\n ReactInstanceMap.set(inst, this);\n\n if (process.env.NODE_ENV !== 'production') {\n // Since plain JS classes are defined without any special initialization\n // logic, we can not catch common errors early. Therefore, we have to\n // catch them here, at initialization time, instead.\n process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : void 0;\n }\n\n var initialState = inst.state;\n if (initialState === undefined) {\n inst.state = initialState = null;\n }\n !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : _prodInvariant('106', this.getName() || 'ReactCompositeComponent') : void 0;\n\n this._pendingStateQueue = null;\n this._pendingReplaceState = false;\n this._pendingForceUpdate = false;\n\n var markup;\n if (inst.unstable_handleError) {\n markup = this.performInitialMountWithErrorHandling(renderedElement, hostParent, hostContainerInfo, transaction, context);\n } else {\n markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);\n }\n\n if (inst.componentDidMount) {\n if (process.env.NODE_ENV !== 'production') {\n transaction.getReactMountReady().enqueue(function () {\n measureLifeCyclePerf(function () {\n return inst.componentDidMount();\n }, _this._debugID, 'componentDidMount');\n });\n } else {\n transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);\n }\n }\n\n return markup;\n },\n\n _constructComponent: function (doConstruct, publicProps, publicContext, updateQueue) {\n if (process.env.NODE_ENV !== 'production') {\n ReactCurrentOwner.current = this;\n try {\n return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);\n } finally {\n ReactCurrentOwner.current = null;\n }\n } else {\n return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);\n }\n },\n\n _constructComponentWithoutOwner: function (doConstruct, publicProps, publicContext, updateQueue) {\n var Component = this._currentElement.type;\n\n if (doConstruct) {\n if (process.env.NODE_ENV !== 'production') {\n return measureLifeCyclePerf(function () {\n return new Component(publicProps, publicContext, updateQueue);\n }, this._debugID, 'ctor');\n } else {\n return new Component(publicProps, publicContext, updateQueue);\n }\n }\n\n // This can still be an instance in case of factory components\n // but we'll count this as time spent rendering as the more common case.\n if (process.env.NODE_ENV !== 'production') {\n return measureLifeCyclePerf(function () {\n return Component(publicProps, publicContext, updateQueue);\n }, this._debugID, 'render');\n } else {\n return Component(publicProps, publicContext, updateQueue);\n }\n },\n\n performInitialMountWithErrorHandling: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {\n var markup;\n var checkpoint = transaction.checkpoint();\n try {\n markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);\n } catch (e) {\n // Roll back to checkpoint, handle error (which may add items to the transaction), and take a new checkpoint\n transaction.rollback(checkpoint);\n this._instance.unstable_handleError(e);\n if (this._pendingStateQueue) {\n this._instance.state = this._processPendingState(this._instance.props, this._instance.context);\n }\n checkpoint = transaction.checkpoint();\n\n this._renderedComponent.unmountComponent(true);\n transaction.rollback(checkpoint);\n\n // Try again - we've informed the component about the error, so they can render an error message this time.\n // If this throws again, the error will bubble up (and can be caught by a higher error boundary).\n markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);\n }\n return markup;\n },\n\n performInitialMount: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {\n var inst = this._instance;\n\n var debugID = 0;\n if (process.env.NODE_ENV !== 'production') {\n debugID = this._debugID;\n }\n\n if (inst.componentWillMount) {\n if (process.env.NODE_ENV !== 'production') {\n measureLifeCyclePerf(function () {\n return inst.componentWillMount();\n }, debugID, 'componentWillMount');\n } else {\n inst.componentWillMount();\n }\n // When mounting, calls to `setState` by `componentWillMount` will set\n // `this._pendingStateQueue` without triggering a re-render.\n if (this._pendingStateQueue) {\n inst.state = this._processPendingState(inst.props, inst.context);\n }\n }\n\n // If not a stateless component, we now render\n if (renderedElement === undefined) {\n renderedElement = this._renderValidatedComponent();\n }\n\n var nodeType = ReactNodeTypes.getType(renderedElement);\n this._renderedNodeType = nodeType;\n var child = this._instantiateReactComponent(renderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */\n );\n this._renderedComponent = child;\n\n var markup = ReactReconciler.mountComponent(child, transaction, hostParent, hostContainerInfo, this._processChildContext(context), debugID);\n\n if (process.env.NODE_ENV !== 'production') {\n if (debugID !== 0) {\n var childDebugIDs = child._debugID !== 0 ? [child._debugID] : [];\n ReactInstrumentation.debugTool.onSetChildren(debugID, childDebugIDs);\n }\n }\n\n return markup;\n },\n\n getHostNode: function () {\n return ReactReconciler.getHostNode(this._renderedComponent);\n },\n\n /**\n * Releases any resources allocated by `mountComponent`.\n *\n * @final\n * @internal\n */\n unmountComponent: function (safely) {\n if (!this._renderedComponent) {\n return;\n }\n\n var inst = this._instance;\n\n if (inst.componentWillUnmount && !inst._calledComponentWillUnmount) {\n inst._calledComponentWillUnmount = true;\n\n if (safely) {\n var name = this.getName() + '.componentWillUnmount()';\n ReactErrorUtils.invokeGuardedCallback(name, inst.componentWillUnmount.bind(inst));\n } else {\n if (process.env.NODE_ENV !== 'production') {\n measureLifeCyclePerf(function () {\n return inst.componentWillUnmount();\n }, this._debugID, 'componentWillUnmount');\n } else {\n inst.componentWillUnmount();\n }\n }\n }\n\n if (this._renderedComponent) {\n ReactReconciler.unmountComponent(this._renderedComponent, safely);\n this._renderedNodeType = null;\n this._renderedComponent = null;\n this._instance = null;\n }\n\n // Reset pending fields\n // Even if this component is scheduled for another update in ReactUpdates,\n // it would still be ignored because these fields are reset.\n this._pendingStateQueue = null;\n this._pendingReplaceState = false;\n this._pendingForceUpdate = false;\n this._pendingCallbacks = null;\n this._pendingElement = null;\n\n // These fields do not really need to be reset since this object is no\n // longer accessible.\n this._context = null;\n this._rootNodeID = 0;\n this._topLevelWrapper = null;\n\n // Delete the reference from the instance to this internal representation\n // which allow the internals to be properly cleaned up even if the user\n // leaks a reference to the public instance.\n ReactInstanceMap.remove(inst);\n\n // Some existing components rely on inst.props even after they've been\n // destroyed (in event handlers).\n // TODO: inst.props = null;\n // TODO: inst.state = null;\n // TODO: inst.context = null;\n },\n\n /**\n * Filters the context object to only contain keys specified in\n * `contextTypes`\n *\n * @param {object} context\n * @return {?object}\n * @private\n */\n _maskContext: function (context) {\n var Component = this._currentElement.type;\n var contextTypes = Component.contextTypes;\n if (!contextTypes) {\n return emptyObject;\n }\n var maskedContext = {};\n for (var contextName in contextTypes) {\n maskedContext[contextName] = context[contextName];\n }\n return maskedContext;\n },\n\n /**\n * Filters the context object to only contain keys specified in\n * `contextTypes`, and asserts that they are valid.\n *\n * @param {object} context\n * @return {?object}\n * @private\n */\n _processContext: function (context) {\n var maskedContext = this._maskContext(context);\n if (process.env.NODE_ENV !== 'production') {\n var Component = this._currentElement.type;\n if (Component.contextTypes) {\n this._checkContextTypes(Component.contextTypes, maskedContext, 'context');\n }\n }\n return maskedContext;\n },\n\n /**\n * @param {object} currentContext\n * @return {object}\n * @private\n */\n _processChildContext: function (currentContext) {\n var Component = this._currentElement.type;\n var inst = this._instance;\n var childContext;\n\n if (inst.getChildContext) {\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onBeginProcessingChildContext();\n try {\n childContext = inst.getChildContext();\n } finally {\n ReactInstrumentation.debugTool.onEndProcessingChildContext();\n }\n } else {\n childContext = inst.getChildContext();\n }\n }\n\n if (childContext) {\n !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().', this.getName() || 'ReactCompositeComponent') : _prodInvariant('107', this.getName() || 'ReactCompositeComponent') : void 0;\n if (process.env.NODE_ENV !== 'production') {\n this._checkContextTypes(Component.childContextTypes, childContext, 'childContext');\n }\n for (var name in childContext) {\n !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key \"%s\" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : _prodInvariant('108', this.getName() || 'ReactCompositeComponent', name) : void 0;\n }\n return _assign({}, currentContext, childContext);\n }\n return currentContext;\n },\n\n /**\n * Assert that the context types are valid\n *\n * @param {object} typeSpecs Map of context field to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @private\n */\n _checkContextTypes: function (typeSpecs, values, location) {\n if (process.env.NODE_ENV !== 'production') {\n checkReactTypeSpec(typeSpecs, values, location, this.getName(), null, this._debugID);\n }\n },\n\n receiveComponent: function (nextElement, transaction, nextContext) {\n var prevElement = this._currentElement;\n var prevContext = this._context;\n\n this._pendingElement = null;\n\n this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);\n },\n\n /**\n * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`\n * is set, update the component.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n performUpdateIfNecessary: function (transaction) {\n if (this._pendingElement != null) {\n ReactReconciler.receiveComponent(this, this._pendingElement, transaction, this._context);\n } else if (this._pendingStateQueue !== null || this._pendingForceUpdate) {\n this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);\n } else {\n this._updateBatchNumber = null;\n }\n },\n\n /**\n * Perform an update to a mounted component. The componentWillReceiveProps and\n * shouldComponentUpdate methods are called, then (assuming the update isn't\n * skipped) the remaining update lifecycle methods are called and the DOM\n * representation is updated.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @param {ReactElement} prevParentElement\n * @param {ReactElement} nextParentElement\n * @internal\n * @overridable\n */\n updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {\n var inst = this._instance;\n !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Attempted to update component `%s` that has already been unmounted (or failed to mount).', this.getName() || 'ReactCompositeComponent') : _prodInvariant('136', this.getName() || 'ReactCompositeComponent') : void 0;\n\n var willReceive = false;\n var nextContext;\n\n // Determine if the context has changed or not\n if (this._context === nextUnmaskedContext) {\n nextContext = inst.context;\n } else {\n nextContext = this._processContext(nextUnmaskedContext);\n willReceive = true;\n }\n\n var prevProps = prevParentElement.props;\n var nextProps = nextParentElement.props;\n\n // Not a simple state update but a props update\n if (prevParentElement !== nextParentElement) {\n willReceive = true;\n }\n\n // An update here will schedule an update but immediately set\n // _pendingStateQueue which will ensure that any state updates gets\n // immediately reconciled instead of waiting for the next batch.\n if (willReceive && inst.componentWillReceiveProps) {\n if (process.env.NODE_ENV !== 'production') {\n measureLifeCyclePerf(function () {\n return inst.componentWillReceiveProps(nextProps, nextContext);\n }, this._debugID, 'componentWillReceiveProps');\n } else {\n inst.componentWillReceiveProps(nextProps, nextContext);\n }\n }\n\n var nextState = this._processPendingState(nextProps, nextContext);\n var shouldUpdate = true;\n\n if (!this._pendingForceUpdate) {\n if (inst.shouldComponentUpdate) {\n if (process.env.NODE_ENV !== 'production') {\n shouldUpdate = measureLifeCyclePerf(function () {\n return inst.shouldComponentUpdate(nextProps, nextState, nextContext);\n }, this._debugID, 'shouldComponentUpdate');\n } else {\n shouldUpdate = inst.shouldComponentUpdate(nextProps, nextState, nextContext);\n }\n } else {\n if (this._compositeType === CompositeTypes.PureClass) {\n shouldUpdate = !shallowEqual(prevProps, nextProps) || !shallowEqual(inst.state, nextState);\n }\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : void 0;\n }\n\n this._updateBatchNumber = null;\n if (shouldUpdate) {\n this._pendingForceUpdate = false;\n // Will set `this.props`, `this.state` and `this.context`.\n this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);\n } else {\n // If it's determined that a component should not update, we still want\n // to set props and state but we shortcut the rest of the update.\n this._currentElement = nextParentElement;\n this._context = nextUnmaskedContext;\n inst.props = nextProps;\n inst.state = nextState;\n inst.context = nextContext;\n }\n },\n\n _processPendingState: function (props, context) {\n var inst = this._instance;\n var queue = this._pendingStateQueue;\n var replace = this._pendingReplaceState;\n this._pendingReplaceState = false;\n this._pendingStateQueue = null;\n\n if (!queue) {\n return inst.state;\n }\n\n if (replace && queue.length === 1) {\n return queue[0];\n }\n\n var nextState = _assign({}, replace ? queue[0] : inst.state);\n for (var i = replace ? 1 : 0; i < queue.length; i++) {\n var partial = queue[i];\n _assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);\n }\n\n return nextState;\n },\n\n /**\n * Merges new props and state, notifies delegate methods of update and\n * performs update.\n *\n * @param {ReactElement} nextElement Next element\n * @param {object} nextProps Next public object to set as properties.\n * @param {?object} nextState Next object to set as state.\n * @param {?object} nextContext Next public object to set as context.\n * @param {ReactReconcileTransaction} transaction\n * @param {?object} unmaskedContext\n * @private\n */\n _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {\n var _this2 = this;\n\n var inst = this._instance;\n\n var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);\n var prevProps;\n var prevState;\n var prevContext;\n if (hasComponentDidUpdate) {\n prevProps = inst.props;\n prevState = inst.state;\n prevContext = inst.context;\n }\n\n if (inst.componentWillUpdate) {\n if (process.env.NODE_ENV !== 'production') {\n measureLifeCyclePerf(function () {\n return inst.componentWillUpdate(nextProps, nextState, nextContext);\n }, this._debugID, 'componentWillUpdate');\n } else {\n inst.componentWillUpdate(nextProps, nextState, nextContext);\n }\n }\n\n this._currentElement = nextElement;\n this._context = unmaskedContext;\n inst.props = nextProps;\n inst.state = nextState;\n inst.context = nextContext;\n\n this._updateRenderedComponent(transaction, unmaskedContext);\n\n if (hasComponentDidUpdate) {\n if (process.env.NODE_ENV !== 'production') {\n transaction.getReactMountReady().enqueue(function () {\n measureLifeCyclePerf(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), _this2._debugID, 'componentDidUpdate');\n });\n } else {\n transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);\n }\n }\n },\n\n /**\n * Call the component's `render` method and update the DOM accordingly.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n _updateRenderedComponent: function (transaction, context) {\n var prevComponentInstance = this._renderedComponent;\n var prevRenderedElement = prevComponentInstance._currentElement;\n var nextRenderedElement = this._renderValidatedComponent();\n\n var debugID = 0;\n if (process.env.NODE_ENV !== 'production') {\n debugID = this._debugID;\n }\n\n if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {\n ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));\n } else {\n var oldHostNode = ReactReconciler.getHostNode(prevComponentInstance);\n ReactReconciler.unmountComponent(prevComponentInstance, false);\n\n var nodeType = ReactNodeTypes.getType(nextRenderedElement);\n this._renderedNodeType = nodeType;\n var child = this._instantiateReactComponent(nextRenderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */\n );\n this._renderedComponent = child;\n\n var nextMarkup = ReactReconciler.mountComponent(child, transaction, this._hostParent, this._hostContainerInfo, this._processChildContext(context), debugID);\n\n if (process.env.NODE_ENV !== 'production') {\n if (debugID !== 0) {\n var childDebugIDs = child._debugID !== 0 ? [child._debugID] : [];\n ReactInstrumentation.debugTool.onSetChildren(debugID, childDebugIDs);\n }\n }\n\n this._replaceNodeWithMarkup(oldHostNode, nextMarkup, prevComponentInstance);\n }\n },\n\n /**\n * Overridden in shallow rendering.\n *\n * @protected\n */\n _replaceNodeWithMarkup: function (oldHostNode, nextMarkup, prevInstance) {\n ReactComponentEnvironment.replaceNodeWithMarkup(oldHostNode, nextMarkup, prevInstance);\n },\n\n /**\n * @protected\n */\n _renderValidatedComponentWithoutOwnerOrContext: function () {\n var inst = this._instance;\n var renderedElement;\n\n if (process.env.NODE_ENV !== 'production') {\n renderedElement = measureLifeCyclePerf(function () {\n return inst.render();\n }, this._debugID, 'render');\n } else {\n renderedElement = inst.render();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // We allow auto-mocks to proceed as if they're returning null.\n if (renderedElement === undefined && inst.render._isMockFunction) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n renderedElement = null;\n }\n }\n\n return renderedElement;\n },\n\n /**\n * @private\n */\n _renderValidatedComponent: function () {\n var renderedElement;\n if (process.env.NODE_ENV !== 'production' || this._compositeType !== CompositeTypes.StatelessFunctional) {\n ReactCurrentOwner.current = this;\n try {\n renderedElement = this._renderValidatedComponentWithoutOwnerOrContext();\n } finally {\n ReactCurrentOwner.current = null;\n }\n } else {\n renderedElement = this._renderValidatedComponentWithoutOwnerOrContext();\n }\n !(\n // TODO: An `isValidNode` function would probably be more appropriate\n renderedElement === null || renderedElement === false || React.isValidElement(renderedElement)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : _prodInvariant('109', this.getName() || 'ReactCompositeComponent') : void 0;\n\n return renderedElement;\n },\n\n /**\n * Lazily allocates the refs object and stores `component` as `ref`.\n *\n * @param {string} ref Reference name.\n * @param {component} component Component to store as `ref`.\n * @final\n * @private\n */\n attachRef: function (ref, component) {\n var inst = this.getPublicInstance();\n !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : _prodInvariant('110') : void 0;\n var publicComponentInstance = component.getPublicInstance();\n if (process.env.NODE_ENV !== 'production') {\n var componentName = component && component.getName ? component.getName() : 'a component';\n process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null || component._compositeType !== CompositeTypes.StatelessFunctional, 'Stateless function components cannot be given refs ' + '(See ref \"%s\" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : void 0;\n }\n var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;\n refs[ref] = publicComponentInstance;\n },\n\n /**\n * Detaches a reference name.\n *\n * @param {string} ref Name to dereference.\n * @final\n * @private\n */\n detachRef: function (ref) {\n var refs = this.getPublicInstance().refs;\n delete refs[ref];\n },\n\n /**\n * Get a text description of the component that can be used to identify it\n * in error messages.\n * @return {string} The name or null.\n * @internal\n */\n getName: function () {\n var type = this._currentElement.type;\n var constructor = this._instance && this._instance.constructor;\n return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;\n },\n\n /**\n * Get the publicly accessible representation of this component - i.e. what\n * is exposed by refs and returned by render. Can be null for stateless\n * components.\n *\n * @return {ReactComponent} the public component instance.\n * @internal\n */\n getPublicInstance: function () {\n var inst = this._instance;\n if (this._compositeType === CompositeTypes.StatelessFunctional) {\n return null;\n }\n return inst;\n },\n\n // Stub\n _instantiateReactComponent: null\n\n};\n\nmodule.exports = ReactCompositeComponent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar nextDebugID = 1;\n\nfunction getNextDebugID() {\n return nextDebugID++;\n}\n\nmodule.exports = getNextDebugID;","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\n\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\nmodule.exports = REACT_ELEMENT_TYPE;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\n/* global Symbol */\n\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n/**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\nfunction getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n}\n\nmodule.exports = getIteratorFn;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar KeyEscapeUtils = require('./KeyEscapeUtils');\nvar traverseAllChildren = require('./traverseAllChildren');\nvar warning = require('fbjs/lib/warning');\n\nvar ReactComponentTreeHook;\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\n // Temporary hack.\n // Inline requires don't work well with Jest:\n // https://github.com/facebook/react/issues/7240\n // Remove the inline requires when we don't need them anymore:\n // https://github.com/facebook/react/pull/7178\n ReactComponentTreeHook = require('react/lib/ReactComponentTreeHook');\n}\n\n/**\n * @param {function} traverseContext Context passed through traversal.\n * @param {?ReactComponent} child React child component.\n * @param {!string} name String name of key path to child.\n * @param {number=} selfDebugID Optional debugID of the current internal instance.\n */\nfunction flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID) {\n // We found a component instance.\n if (traverseContext && typeof traverseContext === 'object') {\n var result = traverseContext;\n var keyUnique = result[name] === undefined;\n if (process.env.NODE_ENV !== 'production') {\n if (!ReactComponentTreeHook) {\n ReactComponentTreeHook = require('react/lib/ReactComponentTreeHook');\n }\n if (!keyUnique) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeHook.getStackAddendumByID(selfDebugID)) : void 0;\n }\n }\n if (keyUnique && child != null) {\n result[name] = child;\n }\n }\n}\n\n/**\n * Flattens children that are typically specified as `props.children`. Any null\n * children will not be included in the resulting object.\n * @return {!object} flattened children keyed by name.\n */\nfunction flattenChildren(children, selfDebugID) {\n if (children == null) {\n return children;\n }\n var result = {};\n\n if (process.env.NODE_ENV !== 'production') {\n traverseAllChildren(children, function (traverseContext, child, name) {\n return flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID);\n }, result);\n } else {\n traverseAllChildren(children, flattenSingleChildIntoContext, result);\n }\n return result;\n}\n\nmodule.exports = flattenChildren;","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\nvar Transaction = require('./Transaction');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactServerUpdateQueue = require('./ReactServerUpdateQueue');\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [];\n\nif (process.env.NODE_ENV !== 'production') {\n TRANSACTION_WRAPPERS.push({\n initialize: ReactInstrumentation.debugTool.onBeginFlush,\n close: ReactInstrumentation.debugTool.onEndFlush\n });\n}\n\nvar noopCallbackQueue = {\n enqueue: function () {}\n};\n\n/**\n * @class ReactServerRenderingTransaction\n * @param {boolean} renderToStaticMarkup\n */\nfunction ReactServerRenderingTransaction(renderToStaticMarkup) {\n this.reinitializeTransaction();\n this.renderToStaticMarkup = renderToStaticMarkup;\n this.useCreateElement = false;\n this.updateQueue = new ReactServerUpdateQueue(this);\n}\n\nvar Mixin = {\n /**\n * @see Transaction\n * @abstract\n * @final\n * @return {array} Empty list of operation wrap procedures.\n */\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n },\n\n /**\n * @return {object} The queue to collect `onDOMReady` callbacks with.\n */\n getReactMountReady: function () {\n return noopCallbackQueue;\n },\n\n /**\n * @return {object} The queue to collect React async events.\n */\n getUpdateQueue: function () {\n return this.updateQueue;\n },\n\n /**\n * `PooledClass` looks for this, and will invoke this before allowing this\n * instance to be reused.\n */\n destructor: function () {},\n\n checkpoint: function () {},\n\n rollback: function () {}\n};\n\n_assign(ReactServerRenderingTransaction.prototype, Transaction, Mixin);\n\nPooledClass.addPoolingTo(ReactServerRenderingTransaction);\n\nmodule.exports = ReactServerRenderingTransaction;","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\n\nvar warning = require('fbjs/lib/warning');\n\nfunction warnNoop(publicInstance, callerName) {\n if (process.env.NODE_ENV !== 'production') {\n var constructor = publicInstance.constructor;\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;\n }\n}\n\n/**\n * This is the update queue used for server rendering.\n * It delegates to ReactUpdateQueue while server rendering is in progress and\n * switches to ReactNoopUpdateQueue after the transaction has completed.\n * @class ReactServerUpdateQueue\n * @param {Transaction} transaction\n */\n\nvar ReactServerUpdateQueue = function () {\n function ReactServerUpdateQueue(transaction) {\n _classCallCheck(this, ReactServerUpdateQueue);\n\n this.transaction = transaction;\n }\n\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n\n\n ReactServerUpdateQueue.prototype.isMounted = function isMounted(publicInstance) {\n return false;\n };\n\n /**\n * Enqueue a callback that will be executed after all the pending updates\n * have processed.\n *\n * @param {ReactClass} publicInstance The instance to use as `this` context.\n * @param {?function} callback Called after state is updated.\n * @internal\n */\n\n\n ReactServerUpdateQueue.prototype.enqueueCallback = function enqueueCallback(publicInstance, callback, callerName) {\n if (this.transaction.isInTransaction()) {\n ReactUpdateQueue.enqueueCallback(publicInstance, callback, callerName);\n }\n };\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @internal\n */\n\n\n ReactServerUpdateQueue.prototype.enqueueForceUpdate = function enqueueForceUpdate(publicInstance) {\n if (this.transaction.isInTransaction()) {\n ReactUpdateQueue.enqueueForceUpdate(publicInstance);\n } else {\n warnNoop(publicInstance, 'forceUpdate');\n }\n };\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object|function} completeState Next state.\n * @internal\n */\n\n\n ReactServerUpdateQueue.prototype.enqueueReplaceState = function enqueueReplaceState(publicInstance, completeState) {\n if (this.transaction.isInTransaction()) {\n ReactUpdateQueue.enqueueReplaceState(publicInstance, completeState);\n } else {\n warnNoop(publicInstance, 'replaceState');\n }\n };\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object|function} partialState Next partial state to be merged with state.\n * @internal\n */\n\n\n ReactServerUpdateQueue.prototype.enqueueSetState = function enqueueSetState(publicInstance, partialState) {\n if (this.transaction.isInTransaction()) {\n ReactUpdateQueue.enqueueSetState(publicInstance, partialState);\n } else {\n warnNoop(publicInstance, 'setState');\n }\n };\n\n return ReactServerUpdateQueue;\n}();\n\nmodule.exports = ReactServerUpdateQueue;","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\n\nvar ReactDOMEmptyComponent = function (instantiate) {\n // ReactCompositeComponent uses this:\n this._currentElement = null;\n // ReactDOMComponentTree uses these:\n this._hostNode = null;\n this._hostParent = null;\n this._hostContainerInfo = null;\n this._domID = 0;\n};\n_assign(ReactDOMEmptyComponent.prototype, {\n mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\n var domID = hostContainerInfo._idCounter++;\n this._domID = domID;\n this._hostParent = hostParent;\n this._hostContainerInfo = hostContainerInfo;\n\n var nodeValue = ' react-empty: ' + this._domID + ' ';\n if (transaction.useCreateElement) {\n var ownerDocument = hostContainerInfo._ownerDocument;\n var node = ownerDocument.createComment(nodeValue);\n ReactDOMComponentTree.precacheNode(this, node);\n return DOMLazyTree(node);\n } else {\n if (transaction.renderToStaticMarkup) {\n // Normally we'd insert a comment node, but since this is a situation\n // where React won't take over (static pages), we can simply return\n // nothing.\n return '';\n }\n return '<!--' + nodeValue + '-->';\n }\n },\n receiveComponent: function () {},\n getHostNode: function () {\n return ReactDOMComponentTree.getNodeFromInstance(this);\n },\n unmountComponent: function () {\n ReactDOMComponentTree.uncacheNode(this);\n }\n});\n\nmodule.exports = ReactDOMEmptyComponent;","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\nfunction getLowestCommonAncestor(instA, instB) {\n !('_hostNode' in instA) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\n !('_hostNode' in instB) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\n\n var depthA = 0;\n for (var tempA = instA; tempA; tempA = tempA._hostParent) {\n depthA++;\n }\n var depthB = 0;\n for (var tempB = instB; tempB; tempB = tempB._hostParent) {\n depthB++;\n }\n\n // If A is deeper, crawl up.\n while (depthA - depthB > 0) {\n instA = instA._hostParent;\n depthA--;\n }\n\n // If B is deeper, crawl up.\n while (depthB - depthA > 0) {\n instB = instB._hostParent;\n depthB--;\n }\n\n // Walk in lockstep until we find a match.\n var depth = depthA;\n while (depth--) {\n if (instA === instB) {\n return instA;\n }\n instA = instA._hostParent;\n instB = instB._hostParent;\n }\n return null;\n}\n\n/**\n * Return if A is an ancestor of B.\n */\nfunction isAncestor(instA, instB) {\n !('_hostNode' in instA) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;\n !('_hostNode' in instB) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;\n\n while (instB) {\n if (instB === instA) {\n return true;\n }\n instB = instB._hostParent;\n }\n return false;\n}\n\n/**\n * Return the parent instance of the passed-in instance.\n */\nfunction getParentInstance(inst) {\n !('_hostNode' in inst) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getParentInstance: Invalid argument.') : _prodInvariant('36') : void 0;\n\n return inst._hostParent;\n}\n\n/**\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n */\nfunction traverseTwoPhase(inst, fn, arg) {\n var path = [];\n while (inst) {\n path.push(inst);\n inst = inst._hostParent;\n }\n var i;\n for (i = path.length; i-- > 0;) {\n fn(path[i], 'captured', arg);\n }\n for (i = 0; i < path.length; i++) {\n fn(path[i], 'bubbled', arg);\n }\n}\n\n/**\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n * should would receive a `mouseEnter` or `mouseLeave` event.\n *\n * Does not invoke the callback on the nearest common ancestor because nothing\n * \"entered\" or \"left\" that element.\n */\nfunction traverseEnterLeave(from, to, fn, argFrom, argTo) {\n var common = from && to ? getLowestCommonAncestor(from, to) : null;\n var pathFrom = [];\n while (from && from !== common) {\n pathFrom.push(from);\n from = from._hostParent;\n }\n var pathTo = [];\n while (to && to !== common) {\n pathTo.push(to);\n to = to._hostParent;\n }\n var i;\n for (i = 0; i < pathFrom.length; i++) {\n fn(pathFrom[i], 'bubbled', argFrom);\n }\n for (i = pathTo.length; i-- > 0;) {\n fn(pathTo[i], 'captured', argTo);\n }\n}\n\nmodule.exports = {\n isAncestor: isAncestor,\n getLowestCommonAncestor: getLowestCommonAncestor,\n getParentInstance: getParentInstance,\n traverseTwoPhase: traverseTwoPhase,\n traverseEnterLeave: traverseEnterLeave\n};","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar DOMLazyTree = require('./DOMLazyTree');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\n\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar invariant = require('fbjs/lib/invariant');\nvar validateDOMNesting = require('./validateDOMNesting');\n\n/**\n * Text nodes violate a couple assumptions that React makes about components:\n *\n * - When mounting text into the DOM, adjacent text nodes are merged.\n * - Text nodes cannot be assigned a React root ID.\n *\n * This component is used to wrap strings between comment nodes so that they\n * can undergo the same reconciliation that is applied to elements.\n *\n * TODO: Investigate representing React components in the DOM with text nodes.\n *\n * @class ReactDOMTextComponent\n * @extends ReactComponent\n * @internal\n */\nvar ReactDOMTextComponent = function (text) {\n // TODO: This is really a ReactText (ReactNode), not a ReactElement\n this._currentElement = text;\n this._stringText = '' + text;\n // ReactDOMComponentTree uses these:\n this._hostNode = null;\n this._hostParent = null;\n\n // Properties\n this._domID = 0;\n this._mountIndex = 0;\n this._closingComment = null;\n this._commentNodes = null;\n};\n\n_assign(ReactDOMTextComponent.prototype, {\n\n /**\n * Creates the markup for this text node. This node is not intended to have\n * any features besides containing text content.\n *\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @return {string} Markup for this text node.\n * @internal\n */\n mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\n if (process.env.NODE_ENV !== 'production') {\n var parentInfo;\n if (hostParent != null) {\n parentInfo = hostParent._ancestorInfo;\n } else if (hostContainerInfo != null) {\n parentInfo = hostContainerInfo._ancestorInfo;\n }\n if (parentInfo) {\n // parentInfo should always be present except for the top-level\n // component when server rendering\n validateDOMNesting(null, this._stringText, this, parentInfo);\n }\n }\n\n var domID = hostContainerInfo._idCounter++;\n var openingValue = ' react-text: ' + domID + ' ';\n var closingValue = ' /react-text ';\n this._domID = domID;\n this._hostParent = hostParent;\n if (transaction.useCreateElement) {\n var ownerDocument = hostContainerInfo._ownerDocument;\n var openingComment = ownerDocument.createComment(openingValue);\n var closingComment = ownerDocument.createComment(closingValue);\n var lazyTree = DOMLazyTree(ownerDocument.createDocumentFragment());\n DOMLazyTree.queueChild(lazyTree, DOMLazyTree(openingComment));\n if (this._stringText) {\n DOMLazyTree.queueChild(lazyTree, DOMLazyTree(ownerDocument.createTextNode(this._stringText)));\n }\n DOMLazyTree.queueChild(lazyTree, DOMLazyTree(closingComment));\n ReactDOMComponentTree.precacheNode(this, openingComment);\n this._closingComment = closingComment;\n return lazyTree;\n } else {\n var escapedText = escapeTextContentForBrowser(this._stringText);\n\n if (transaction.renderToStaticMarkup) {\n // Normally we'd wrap this between comment nodes for the reasons stated\n // above, but since this is a situation where React won't take over\n // (static pages), we can simply return the text as it is.\n return escapedText;\n }\n\n return '<!--' + openingValue + '-->' + escapedText + '<!--' + closingValue + '-->';\n }\n },\n\n /**\n * Updates this component by updating the text content.\n *\n * @param {ReactText} nextText The next text content\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n receiveComponent: function (nextText, transaction) {\n if (nextText !== this._currentElement) {\n this._currentElement = nextText;\n var nextStringText = '' + nextText;\n if (nextStringText !== this._stringText) {\n // TODO: Save this as pending props and use performUpdateIfNecessary\n // and/or updateComponent to do the actual update for consistency with\n // other component types?\n this._stringText = nextStringText;\n var commentNodes = this.getHostNode();\n DOMChildrenOperations.replaceDelimitedText(commentNodes[0], commentNodes[1], nextStringText);\n }\n }\n },\n\n getHostNode: function () {\n var hostNode = this._commentNodes;\n if (hostNode) {\n return hostNode;\n }\n if (!this._closingComment) {\n var openingComment = ReactDOMComponentTree.getNodeFromInstance(this);\n var node = openingComment.nextSibling;\n while (true) {\n !(node != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Missing closing comment for text component %s', this._domID) : _prodInvariant('67', this._domID) : void 0;\n if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {\n this._closingComment = node;\n break;\n }\n node = node.nextSibling;\n }\n }\n hostNode = [this._hostNode, this._closingComment];\n this._commentNodes = hostNode;\n return hostNode;\n },\n\n unmountComponent: function () {\n this._closingComment = null;\n this._commentNodes = null;\n ReactDOMComponentTree.uncacheNode(this);\n }\n\n});\n\nmodule.exports = ReactDOMTextComponent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar ReactUpdates = require('./ReactUpdates');\nvar Transaction = require('./Transaction');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\n\nvar RESET_BATCHED_UPDATES = {\n initialize: emptyFunction,\n close: function () {\n ReactDefaultBatchingStrategy.isBatchingUpdates = false;\n }\n};\n\nvar FLUSH_BATCHED_UPDATES = {\n initialize: emptyFunction,\n close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)\n};\n\nvar TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];\n\nfunction ReactDefaultBatchingStrategyTransaction() {\n this.reinitializeTransaction();\n}\n\n_assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction, {\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n }\n});\n\nvar transaction = new ReactDefaultBatchingStrategyTransaction();\n\nvar ReactDefaultBatchingStrategy = {\n isBatchingUpdates: false,\n\n /**\n * Call the provided function in a context within which calls to `setState`\n * and friends are batched such that components aren't updated unnecessarily.\n */\n batchedUpdates: function (callback, a, b, c, d, e) {\n var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;\n\n ReactDefaultBatchingStrategy.isBatchingUpdates = true;\n\n // The code is written this way to avoid extra allocations\n if (alreadyBatchingUpdates) {\n return callback(a, b, c, d, e);\n } else {\n return transaction.perform(callback, null, a, b, c, d, e);\n }\n }\n};\n\nmodule.exports = ReactDefaultBatchingStrategy;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar EventListener = require('fbjs/lib/EventListener');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar PooledClass = require('./PooledClass');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar getEventTarget = require('./getEventTarget');\nvar getUnboundedScrollPosition = require('fbjs/lib/getUnboundedScrollPosition');\n\n/**\n * Find the deepest React component completely containing the root of the\n * passed-in instance (for use when entire React trees are nested within each\n * other). If React trees are not nested, returns null.\n */\nfunction findParent(inst) {\n // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n // traversal, but caching is difficult to do correctly without using a\n // mutation observer to listen for all DOM changes.\n while (inst._hostParent) {\n inst = inst._hostParent;\n }\n var rootNode = ReactDOMComponentTree.getNodeFromInstance(inst);\n var container = rootNode.parentNode;\n return ReactDOMComponentTree.getClosestInstanceFromNode(container);\n}\n\n// Used to store ancestor hierarchy in top level callback\nfunction TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {\n this.topLevelType = topLevelType;\n this.nativeEvent = nativeEvent;\n this.ancestors = [];\n}\n_assign(TopLevelCallbackBookKeeping.prototype, {\n destructor: function () {\n this.topLevelType = null;\n this.nativeEvent = null;\n this.ancestors.length = 0;\n }\n});\nPooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);\n\nfunction handleTopLevelImpl(bookKeeping) {\n var nativeEventTarget = getEventTarget(bookKeeping.nativeEvent);\n var targetInst = ReactDOMComponentTree.getClosestInstanceFromNode(nativeEventTarget);\n\n // Loop through the hierarchy, in case there's any nested components.\n // It's important that we build the array of ancestors before calling any\n // event handlers, because event handlers can modify the DOM, leading to\n // inconsistencies with ReactMount's node cache. See #1105.\n var ancestor = targetInst;\n do {\n bookKeeping.ancestors.push(ancestor);\n ancestor = ancestor && findParent(ancestor);\n } while (ancestor);\n\n for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n targetInst = bookKeeping.ancestors[i];\n ReactEventListener._handleTopLevel(bookKeeping.topLevelType, targetInst, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n }\n}\n\nfunction scrollValueMonitor(cb) {\n var scrollPosition = getUnboundedScrollPosition(window);\n cb(scrollPosition);\n}\n\nvar ReactEventListener = {\n _enabled: true,\n _handleTopLevel: null,\n\n WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,\n\n setHandleTopLevel: function (handleTopLevel) {\n ReactEventListener._handleTopLevel = handleTopLevel;\n },\n\n setEnabled: function (enabled) {\n ReactEventListener._enabled = !!enabled;\n },\n\n isEnabled: function () {\n return ReactEventListener._enabled;\n },\n\n /**\n * Traps top-level events by using event bubbling.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {string} handlerBaseName Event name (e.g. \"click\").\n * @param {object} element Element on which to attach listener.\n * @return {?object} An object with a remove function which will forcefully\n * remove the listener.\n * @internal\n */\n trapBubbledEvent: function (topLevelType, handlerBaseName, element) {\n if (!element) {\n return null;\n }\n return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n },\n\n /**\n * Traps a top-level event by using event capturing.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {string} handlerBaseName Event name (e.g. \"click\").\n * @param {object} element Element on which to attach listener.\n * @return {?object} An object with a remove function which will forcefully\n * remove the listener.\n * @internal\n */\n trapCapturedEvent: function (topLevelType, handlerBaseName, element) {\n if (!element) {\n return null;\n }\n return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n },\n\n monitorScrollValue: function (refresh) {\n var callback = scrollValueMonitor.bind(null, refresh);\n EventListener.listen(window, 'scroll', callback);\n },\n\n dispatchEvent: function (topLevelType, nativeEvent) {\n if (!ReactEventListener._enabled) {\n return;\n }\n\n var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);\n try {\n // Event queue being processed in the same cycle allows\n // `preventDefault`.\n ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);\n } finally {\n TopLevelCallbackBookKeeping.release(bookKeeping);\n }\n }\n};\n\nmodule.exports = ReactEventListener;","/**\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\n/**\n * Gets the scroll position of the supplied element or window.\n *\n * The return values are unbounded, unlike `getScrollPosition`. This means they\n * may be negative or exceed the element boundaries (which is possible using\n * inertial scrolling).\n *\n * @param {DOMWindow|DOMElement} scrollable\n * @return {object} Map with `x` and `y` keys.\n */\n\nfunction getUnboundedScrollPosition(scrollable) {\n if (scrollable.Window && scrollable instanceof scrollable.Window) {\n return {\n x: scrollable.pageXOffset || scrollable.document.documentElement.scrollLeft,\n y: scrollable.pageYOffset || scrollable.document.documentElement.scrollTop\n };\n }\n return {\n x: scrollable.scrollLeft,\n y: scrollable.scrollTop\n };\n}\n\nmodule.exports = getUnboundedScrollPosition;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPluginUtils = require('./EventPluginUtils');\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactEmptyComponent = require('./ReactEmptyComponent');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactHostComponent = require('./ReactHostComponent');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar ReactInjection = {\n Component: ReactComponentEnvironment.injection,\n DOMProperty: DOMProperty.injection,\n EmptyComponent: ReactEmptyComponent.injection,\n EventPluginHub: EventPluginHub.injection,\n EventPluginUtils: EventPluginUtils.injection,\n EventEmitter: ReactBrowserEventEmitter.injection,\n HostComponent: ReactHostComponent.injection,\n Updates: ReactUpdates.injection\n};\n\nmodule.exports = ReactInjection;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactInputSelection = require('./ReactInputSelection');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar Transaction = require('./Transaction');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\n\n/**\n * Ensures that, when possible, the selection range (currently selected text\n * input) is not disturbed by performing the transaction.\n */\nvar SELECTION_RESTORATION = {\n /**\n * @return {Selection} Selection information.\n */\n initialize: ReactInputSelection.getSelectionInformation,\n /**\n * @param {Selection} sel Selection information returned from `initialize`.\n */\n close: ReactInputSelection.restoreSelection\n};\n\n/**\n * Suppresses events (blur/focus) that could be inadvertently dispatched due to\n * high level DOM manipulations (like temporarily removing a text input from the\n * DOM).\n */\nvar EVENT_SUPPRESSION = {\n /**\n * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before\n * the reconciliation.\n */\n initialize: function () {\n var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();\n ReactBrowserEventEmitter.setEnabled(false);\n return currentlyEnabled;\n },\n\n /**\n * @param {boolean} previouslyEnabled Enabled status of\n * `ReactBrowserEventEmitter` before the reconciliation occurred. `close`\n * restores the previous value.\n */\n close: function (previouslyEnabled) {\n ReactBrowserEventEmitter.setEnabled(previouslyEnabled);\n }\n};\n\n/**\n * Provides a queue for collecting `componentDidMount` and\n * `componentDidUpdate` callbacks during the transaction.\n */\nvar ON_DOM_READY_QUEUEING = {\n /**\n * Initializes the internal `onDOMReady` queue.\n */\n initialize: function () {\n this.reactMountReady.reset();\n },\n\n /**\n * After DOM is flushed, invoke all registered `onDOMReady` callbacks.\n */\n close: function () {\n this.reactMountReady.notifyAll();\n }\n};\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];\n\nif (process.env.NODE_ENV !== 'production') {\n TRANSACTION_WRAPPERS.push({\n initialize: ReactInstrumentation.debugTool.onBeginFlush,\n close: ReactInstrumentation.debugTool.onEndFlush\n });\n}\n\n/**\n * Currently:\n * - The order that these are listed in the transaction is critical:\n * - Suppresses events.\n * - Restores selection range.\n *\n * Future:\n * - Restore document/overflow scroll positions that were unintentionally\n * modified via DOM insertions above the top viewport boundary.\n * - Implement/integrate with customized constraint based layout system and keep\n * track of which dimensions must be remeasured.\n *\n * @class ReactReconcileTransaction\n */\nfunction ReactReconcileTransaction(useCreateElement) {\n this.reinitializeTransaction();\n // Only server-side rendering really needs this option (see\n // `ReactServerRendering`), but server-side uses\n // `ReactServerRenderingTransaction` instead. This option is here so that it's\n // accessible and defaults to false when `ReactDOMComponent` and\n // `ReactDOMTextComponent` checks it in `mountComponent`.`\n this.renderToStaticMarkup = false;\n this.reactMountReady = CallbackQueue.getPooled(null);\n this.useCreateElement = useCreateElement;\n}\n\nvar Mixin = {\n /**\n * @see Transaction\n * @abstract\n * @final\n * @return {array<object>} List of operation wrap procedures.\n * TODO: convert to array<TransactionWrapper>\n */\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n },\n\n /**\n * @return {object} The queue to collect `onDOMReady` callbacks with.\n */\n getReactMountReady: function () {\n return this.reactMountReady;\n },\n\n /**\n * @return {object} The queue to collect React async events.\n */\n getUpdateQueue: function () {\n return ReactUpdateQueue;\n },\n\n /**\n * Save current transaction state -- if the return value from this method is\n * passed to `rollback`, the transaction will be reset to that state.\n */\n checkpoint: function () {\n // reactMountReady is the our only stateful wrapper\n return this.reactMountReady.checkpoint();\n },\n\n rollback: function (checkpoint) {\n this.reactMountReady.rollback(checkpoint);\n },\n\n /**\n * `PooledClass` looks for this, and will invoke this before allowing this\n * instance to be reused.\n */\n destructor: function () {\n CallbackQueue.release(this.reactMountReady);\n this.reactMountReady = null;\n }\n};\n\n_assign(ReactReconcileTransaction.prototype, Transaction, Mixin);\n\nPooledClass.addPoolingTo(ReactReconcileTransaction);\n\nmodule.exports = ReactReconcileTransaction;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar getNodeForCharacterOffset = require('./getNodeForCharacterOffset');\nvar getTextContentAccessor = require('./getTextContentAccessor');\n\n/**\n * While `isCollapsed` is available on the Selection object and `collapsed`\n * is available on the Range object, IE11 sometimes gets them wrong.\n * If the anchor/focus nodes and offsets are the same, the range is collapsed.\n */\nfunction isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {\n return anchorNode === focusNode && anchorOffset === focusOffset;\n}\n\n/**\n * Get the appropriate anchor and focus node/offset pairs for IE.\n *\n * The catch here is that IE's selection API doesn't provide information\n * about whether the selection is forward or backward, so we have to\n * behave as though it's always forward.\n *\n * IE text differs from modern selection in that it behaves as though\n * block elements end with a new line. This means character offsets will\n * differ between the two APIs.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getIEOffsets(node) {\n var selection = document.selection;\n var selectedRange = selection.createRange();\n var selectedLength = selectedRange.text.length;\n\n // Duplicate selection so we can move range without breaking user selection.\n var fromStart = selectedRange.duplicate();\n fromStart.moveToElementText(node);\n fromStart.setEndPoint('EndToStart', selectedRange);\n\n var startOffset = fromStart.text.length;\n var endOffset = startOffset + selectedLength;\n\n return {\n start: startOffset,\n end: endOffset\n };\n}\n\n/**\n * @param {DOMElement} node\n * @return {?object}\n */\nfunction getModernOffsets(node) {\n var selection = window.getSelection && window.getSelection();\n\n if (!selection || selection.rangeCount === 0) {\n return null;\n }\n\n var anchorNode = selection.anchorNode;\n var anchorOffset = selection.anchorOffset;\n var focusNode = selection.focusNode;\n var focusOffset = selection.focusOffset;\n\n var currentRange = selection.getRangeAt(0);\n\n // In Firefox, range.startContainer and range.endContainer can be \"anonymous\n // divs\", e.g. the up/down buttons on an <input type=\"number\">. Anonymous\n // divs do not seem to expose properties, triggering a \"Permission denied\n // error\" if any of its properties are accessed. The only seemingly possible\n // way to avoid erroring is to access a property that typically works for\n // non-anonymous divs and catch any error that may otherwise arise. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n try {\n /* eslint-disable no-unused-expressions */\n currentRange.startContainer.nodeType;\n currentRange.endContainer.nodeType;\n /* eslint-enable no-unused-expressions */\n } catch (e) {\n return null;\n }\n\n // If the node and offset values are the same, the selection is collapsed.\n // `Selection.isCollapsed` is available natively, but IE sometimes gets\n // this value wrong.\n var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;\n\n var tempRange = currentRange.cloneRange();\n tempRange.selectNodeContents(node);\n tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);\n\n var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);\n\n var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;\n var end = start + rangeLength;\n\n // Detect whether the selection is backward.\n var detectionRange = document.createRange();\n detectionRange.setStart(anchorNode, anchorOffset);\n detectionRange.setEnd(focusNode, focusOffset);\n var isBackward = detectionRange.collapsed;\n\n return {\n start: isBackward ? end : start,\n end: isBackward ? start : end\n };\n}\n\n/**\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setIEOffsets(node, offsets) {\n var range = document.selection.createRange().duplicate();\n var start, end;\n\n if (offsets.end === undefined) {\n start = offsets.start;\n end = start;\n } else if (offsets.start > offsets.end) {\n start = offsets.end;\n end = offsets.start;\n } else {\n start = offsets.start;\n end = offsets.end;\n }\n\n range.moveToElementText(node);\n range.moveStart('character', start);\n range.setEndPoint('EndToStart', range);\n range.moveEnd('character', end - start);\n range.select();\n}\n\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setModernOffsets(node, offsets) {\n if (!window.getSelection) {\n return;\n }\n\n var selection = window.getSelection();\n var length = node[getTextContentAccessor()].length;\n var start = Math.min(offsets.start, length);\n var end = offsets.end === undefined ? start : Math.min(offsets.end, length);\n\n // IE 11 uses modern selection, but doesn't support the extend method.\n // Flip backward selections, so we can set with a single range.\n if (!selection.extend && start > end) {\n var temp = end;\n end = start;\n start = temp;\n }\n\n var startMarker = getNodeForCharacterOffset(node, start);\n var endMarker = getNodeForCharacterOffset(node, end);\n\n if (startMarker && endMarker) {\n var range = document.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n\n if (start > end) {\n selection.addRange(range);\n selection.extend(endMarker.node, endMarker.offset);\n } else {\n range.setEnd(endMarker.node, endMarker.offset);\n selection.addRange(range);\n }\n }\n}\n\nvar useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);\n\nvar ReactDOMSelection = {\n /**\n * @param {DOMElement} node\n */\n getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,\n\n /**\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\n setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets\n};\n\nmodule.exports = ReactDOMSelection;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\n\nfunction getLeafNode(node) {\n while (node && node.firstChild) {\n node = node.firstChild;\n }\n return node;\n}\n\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\nfunction getSiblingNode(node) {\n while (node) {\n if (node.nextSibling) {\n return node.nextSibling;\n }\n node = node.parentNode;\n }\n}\n\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n var nodeStart = 0;\n var nodeEnd = 0;\n\n while (node) {\n if (node.nodeType === 3) {\n nodeEnd = nodeStart + node.textContent.length;\n\n if (nodeStart <= offset && nodeEnd >= offset) {\n return {\n node: node,\n offset: offset - nodeStart\n };\n }\n\n nodeStart = nodeEnd;\n }\n\n node = getLeafNode(getSiblingNode(node));\n }\n}\n\nmodule.exports = getNodeForCharacterOffset;","'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 * \n */\n\nvar isTextNode = require('./isTextNode');\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n */\nfunction containsNode(outerNode, innerNode) {\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n return containsNode(outerNode, innerNode.parentNode);\n } else if ('contains' in outerNode) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n}\n\nmodule.exports = containsNode;","'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 isNode = require('./isNode');\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM text node.\n */\nfunction isTextNode(object) {\n return isNode(object) && object.nodeType == 3;\n}\n\nmodule.exports = isTextNode;","'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\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM node.\n */\nfunction isNode(object) {\n var doc = object ? object.ownerDocument || object : document;\n var defaultView = doc.defaultView || window;\n return !!(object && (typeof defaultView.Node === 'function' ? object instanceof defaultView.Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\n}\n\nmodule.exports = isNode;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar NS = {\n xlink: 'http://www.w3.org/1999/xlink',\n xml: 'http://www.w3.org/XML/1998/namespace'\n};\n\n// We use attributes for everything SVG so let's avoid some duplication and run\n// code instead.\n// The following are all specified in the HTML config already so we exclude here.\n// - class (as className)\n// - color\n// - height\n// - id\n// - lang\n// - max\n// - media\n// - method\n// - min\n// - name\n// - style\n// - target\n// - type\n// - width\nvar ATTRS = {\n accentHeight: 'accent-height',\n accumulate: 0,\n additive: 0,\n alignmentBaseline: 'alignment-baseline',\n allowReorder: 'allowReorder',\n alphabetic: 0,\n amplitude: 0,\n arabicForm: 'arabic-form',\n ascent: 0,\n attributeName: 'attributeName',\n attributeType: 'attributeType',\n autoReverse: 'autoReverse',\n azimuth: 0,\n baseFrequency: 'baseFrequency',\n baseProfile: 'baseProfile',\n baselineShift: 'baseline-shift',\n bbox: 0,\n begin: 0,\n bias: 0,\n by: 0,\n calcMode: 'calcMode',\n capHeight: 'cap-height',\n clip: 0,\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n clipPathUnits: 'clipPathUnits',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n contentScriptType: 'contentScriptType',\n contentStyleType: 'contentStyleType',\n cursor: 0,\n cx: 0,\n cy: 0,\n d: 0,\n decelerate: 0,\n descent: 0,\n diffuseConstant: 'diffuseConstant',\n direction: 0,\n display: 0,\n divisor: 0,\n dominantBaseline: 'dominant-baseline',\n dur: 0,\n dx: 0,\n dy: 0,\n edgeMode: 'edgeMode',\n elevation: 0,\n enableBackground: 'enable-background',\n end: 0,\n exponent: 0,\n externalResourcesRequired: 'externalResourcesRequired',\n fill: 0,\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n filter: 0,\n filterRes: 'filterRes',\n filterUnits: 'filterUnits',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n focusable: 0,\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n format: 0,\n from: 0,\n fx: 0,\n fy: 0,\n g1: 0,\n g2: 0,\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n glyphRef: 'glyphRef',\n gradientTransform: 'gradientTransform',\n gradientUnits: 'gradientUnits',\n hanging: 0,\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n ideographic: 0,\n imageRendering: 'image-rendering',\n 'in': 0,\n in2: 0,\n intercept: 0,\n k: 0,\n k1: 0,\n k2: 0,\n k3: 0,\n k4: 0,\n kernelMatrix: 'kernelMatrix',\n kernelUnitLength: 'kernelUnitLength',\n kerning: 0,\n keyPoints: 'keyPoints',\n keySplines: 'keySplines',\n keyTimes: 'keyTimes',\n lengthAdjust: 'lengthAdjust',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n limitingConeAngle: 'limitingConeAngle',\n local: 0,\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n markerHeight: 'markerHeight',\n markerUnits: 'markerUnits',\n markerWidth: 'markerWidth',\n mask: 0,\n maskContentUnits: 'maskContentUnits',\n maskUnits: 'maskUnits',\n mathematical: 0,\n mode: 0,\n numOctaves: 'numOctaves',\n offset: 0,\n opacity: 0,\n operator: 0,\n order: 0,\n orient: 0,\n orientation: 0,\n origin: 0,\n overflow: 0,\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pathLength: 'pathLength',\n patternContentUnits: 'patternContentUnits',\n patternTransform: 'patternTransform',\n patternUnits: 'patternUnits',\n pointerEvents: 'pointer-events',\n points: 0,\n pointsAtX: 'pointsAtX',\n pointsAtY: 'pointsAtY',\n pointsAtZ: 'pointsAtZ',\n preserveAlpha: 'preserveAlpha',\n preserveAspectRatio: 'preserveAspectRatio',\n primitiveUnits: 'primitiveUnits',\n r: 0,\n radius: 0,\n refX: 'refX',\n refY: 'refY',\n renderingIntent: 'rendering-intent',\n repeatCount: 'repeatCount',\n repeatDur: 'repeatDur',\n requiredExtensions: 'requiredExtensions',\n requiredFeatures: 'requiredFeatures',\n restart: 0,\n result: 0,\n rotate: 0,\n rx: 0,\n ry: 0,\n scale: 0,\n seed: 0,\n shapeRendering: 'shape-rendering',\n slope: 0,\n spacing: 0,\n specularConstant: 'specularConstant',\n specularExponent: 'specularExponent',\n speed: 0,\n spreadMethod: 'spreadMethod',\n startOffset: 'startOffset',\n stdDeviation: 'stdDeviation',\n stemh: 0,\n stemv: 0,\n stitchTiles: 'stitchTiles',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n string: 0,\n stroke: 0,\n strokeDasharray: 'stroke-dasharray',\n strokeDashoffset: 'stroke-dashoffset',\n strokeLinecap: 'stroke-linecap',\n strokeLinejoin: 'stroke-linejoin',\n strokeMiterlimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n surfaceScale: 'surfaceScale',\n systemLanguage: 'systemLanguage',\n tableValues: 'tableValues',\n targetX: 'targetX',\n targetY: 'targetY',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n textLength: 'textLength',\n to: 0,\n transform: 0,\n u1: 0,\n u2: 0,\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicode: 0,\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n values: 0,\n vectorEffect: 'vector-effect',\n version: 0,\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n viewBox: 'viewBox',\n viewTarget: 'viewTarget',\n visibility: 0,\n widths: 0,\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n x: 0,\n xHeight: 'x-height',\n x1: 0,\n x2: 0,\n xChannelSelector: 'xChannelSelector',\n xlinkActuate: 'xlink:actuate',\n xlinkArcrole: 'xlink:arcrole',\n xlinkHref: 'xlink:href',\n xlinkRole: 'xlink:role',\n xlinkShow: 'xlink:show',\n xlinkTitle: 'xlink:title',\n xlinkType: 'xlink:type',\n xmlBase: 'xml:base',\n xmlns: 0,\n xmlnsXlink: 'xmlns:xlink',\n xmlLang: 'xml:lang',\n xmlSpace: 'xml:space',\n y: 0,\n y1: 0,\n y2: 0,\n yChannelSelector: 'yChannelSelector',\n z: 0,\n zoomAndPan: 'zoomAndPan'\n};\n\nvar SVGDOMPropertyConfig = {\n Properties: {},\n DOMAttributeNamespaces: {\n xlinkActuate: NS.xlink,\n xlinkArcrole: NS.xlink,\n xlinkHref: NS.xlink,\n xlinkRole: NS.xlink,\n xlinkShow: NS.xlink,\n xlinkTitle: NS.xlink,\n xlinkType: NS.xlink,\n xmlBase: NS.xml,\n xmlLang: NS.xml,\n xmlSpace: NS.xml\n },\n DOMAttributeNames: {}\n};\n\nObject.keys(ATTRS).forEach(function (key) {\n SVGDOMPropertyConfig.Properties[key] = 0;\n if (ATTRS[key]) {\n SVGDOMPropertyConfig.DOMAttributeNames[key] = ATTRS[key];\n }\n});\n\nmodule.exports = SVGDOMPropertyConfig;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactInputSelection = require('./ReactInputSelection');\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getActiveElement = require('fbjs/lib/getActiveElement');\nvar isTextInputElement = require('./isTextInputElement');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\n\nvar skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nvar eventTypes = {\n select: {\n phasedRegistrationNames: {\n bubbled: 'onSelect',\n captured: 'onSelectCapture'\n },\n dependencies: ['topBlur', 'topContextMenu', 'topFocus', 'topKeyDown', 'topKeyUp', 'topMouseDown', 'topMouseUp', 'topSelectionChange']\n }\n};\n\nvar activeElement = null;\nvar activeElementInst = null;\nvar lastSelection = null;\nvar mouseDown = false;\n\n// Track whether a listener exists for this plugin. If none exist, we do\n// not extract events. See #3639.\nvar hasListener = false;\n\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getSelection(node) {\n if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {\n return {\n start: node.selectionStart,\n end: node.selectionEnd\n };\n } else if (window.getSelection) {\n var selection = window.getSelection();\n return {\n anchorNode: selection.anchorNode,\n anchorOffset: selection.anchorOffset,\n focusNode: selection.focusNode,\n focusOffset: selection.focusOffset\n };\n } else if (document.selection) {\n var range = document.selection.createRange();\n return {\n parentElement: range.parentElement(),\n text: range.text,\n top: range.boundingTop,\n left: range.boundingLeft\n };\n }\n}\n\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @return {?SyntheticEvent}\n */\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n // Ensure we have the right element, and that the user is not dragging a\n // selection (this matches native `select` event behavior). In HTML5, select\n // fires only on input and textarea thus if there's no focused element we\n // won't dispatch.\n if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {\n return null;\n }\n\n // Only fire when selection has actually changed.\n var currentSelection = getSelection(activeElement);\n if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n lastSelection = currentSelection;\n\n var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementInst, nativeEvent, nativeEventTarget);\n\n syntheticEvent.type = 'select';\n syntheticEvent.target = activeElement;\n\n EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);\n\n return syntheticEvent;\n }\n\n return null;\n}\n\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\nvar SelectEventPlugin = {\n\n eventTypes: eventTypes,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n if (!hasListener) {\n return null;\n }\n\n var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;\n\n switch (topLevelType) {\n // Track the input node that has focus.\n case 'topFocus':\n if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n activeElement = targetNode;\n activeElementInst = targetInst;\n lastSelection = null;\n }\n break;\n case 'topBlur':\n activeElement = null;\n activeElementInst = null;\n lastSelection = null;\n break;\n\n // Don't fire the event while the user is dragging. This matches the\n // semantics of the native select event.\n case 'topMouseDown':\n mouseDown = true;\n break;\n case 'topContextMenu':\n case 'topMouseUp':\n mouseDown = false;\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n\n // Chrome and IE fire non-standard event when selection is changed (and\n // sometimes when it hasn't). IE's event fires out of order with respect\n // to key and input events on deletion, so we discard it.\n //\n // Firefox doesn't support selectionchange, so check selection status\n // after each key entry. The selection changes after keydown and before\n // keyup, but we check on keydown as well in the case of holding down a\n // key, when multiple keydown events are fired but only one keyup is.\n // This is also our approach for IE handling, for the reason above.\n case 'topSelectionChange':\n if (skipSelectionChangeEvent) {\n break;\n }\n // falls through\n case 'topKeyDown':\n case 'topKeyUp':\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n }\n\n return null;\n },\n\n didPutListener: function (inst, registrationName, listener) {\n if (registrationName === 'onSelect') {\n hasListener = true;\n }\n }\n};\n\nmodule.exports = SelectEventPlugin;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar EventListener = require('fbjs/lib/EventListener');\nvar EventPropagators = require('./EventPropagators');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar SyntheticAnimationEvent = require('./SyntheticAnimationEvent');\nvar SyntheticClipboardEvent = require('./SyntheticClipboardEvent');\nvar SyntheticEvent = require('./SyntheticEvent');\nvar SyntheticFocusEvent = require('./SyntheticFocusEvent');\nvar SyntheticKeyboardEvent = require('./SyntheticKeyboardEvent');\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\nvar SyntheticDragEvent = require('./SyntheticDragEvent');\nvar SyntheticTouchEvent = require('./SyntheticTouchEvent');\nvar SyntheticTransitionEvent = require('./SyntheticTransitionEvent');\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar SyntheticWheelEvent = require('./SyntheticWheelEvent');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getEventCharCode = require('./getEventCharCode');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Turns\n * ['abort', ...]\n * into\n * eventTypes = {\n * 'abort': {\n * phasedRegistrationNames: {\n * bubbled: 'onAbort',\n * captured: 'onAbortCapture',\n * },\n * dependencies: ['topAbort'],\n * },\n * ...\n * };\n * topLevelEventsToDispatchConfig = {\n * 'topAbort': { sameConfig }\n * };\n */\nvar eventTypes = {};\nvar topLevelEventsToDispatchConfig = {};\n['abort', 'animationEnd', 'animationIteration', 'animationStart', 'blur', 'canPlay', 'canPlayThrough', 'click', 'contextMenu', 'copy', 'cut', 'doubleClick', 'drag', 'dragEnd', 'dragEnter', 'dragExit', 'dragLeave', 'dragOver', 'dragStart', 'drop', 'durationChange', 'emptied', 'encrypted', 'ended', 'error', 'focus', 'input', 'invalid', 'keyDown', 'keyPress', 'keyUp', 'load', 'loadedData', 'loadedMetadata', 'loadStart', 'mouseDown', 'mouseMove', 'mouseOut', 'mouseOver', 'mouseUp', 'paste', 'pause', 'play', 'playing', 'progress', 'rateChange', 'reset', 'scroll', 'seeked', 'seeking', 'stalled', 'submit', 'suspend', 'timeUpdate', 'touchCancel', 'touchEnd', 'touchMove', 'touchStart', 'transitionEnd', 'volumeChange', 'waiting', 'wheel'].forEach(function (event) {\n var capitalizedEvent = event[0].toUpperCase() + event.slice(1);\n var onEvent = 'on' + capitalizedEvent;\n var topEvent = 'top' + capitalizedEvent;\n\n var type = {\n phasedRegistrationNames: {\n bubbled: onEvent,\n captured: onEvent + 'Capture'\n },\n dependencies: [topEvent]\n };\n eventTypes[event] = type;\n topLevelEventsToDispatchConfig[topEvent] = type;\n});\n\nvar onClickListeners = {};\n\nfunction getDictionaryKey(inst) {\n // Prevents V8 performance issue:\n // https://github.com/facebook/react/pull/7232\n return '.' + inst._rootNodeID;\n}\n\nfunction isInteractive(tag) {\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nvar SimpleEventPlugin = {\n\n eventTypes: eventTypes,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\n if (!dispatchConfig) {\n return null;\n }\n var EventConstructor;\n switch (topLevelType) {\n case 'topAbort':\n case 'topCanPlay':\n case 'topCanPlayThrough':\n case 'topDurationChange':\n case 'topEmptied':\n case 'topEncrypted':\n case 'topEnded':\n case 'topError':\n case 'topInput':\n case 'topInvalid':\n case 'topLoad':\n case 'topLoadedData':\n case 'topLoadedMetadata':\n case 'topLoadStart':\n case 'topPause':\n case 'topPlay':\n case 'topPlaying':\n case 'topProgress':\n case 'topRateChange':\n case 'topReset':\n case 'topSeeked':\n case 'topSeeking':\n case 'topStalled':\n case 'topSubmit':\n case 'topSuspend':\n case 'topTimeUpdate':\n case 'topVolumeChange':\n case 'topWaiting':\n // HTML Events\n // @see http://www.w3.org/TR/html5/index.html#events-0\n EventConstructor = SyntheticEvent;\n break;\n case 'topKeyPress':\n // Firefox creates a keypress event for function keys too. This removes\n // the unwanted keypress events. Enter is however both printable and\n // non-printable. One would expect Tab to be as well (but it isn't).\n if (getEventCharCode(nativeEvent) === 0) {\n return null;\n }\n /* falls through */\n case 'topKeyDown':\n case 'topKeyUp':\n EventConstructor = SyntheticKeyboardEvent;\n break;\n case 'topBlur':\n case 'topFocus':\n EventConstructor = SyntheticFocusEvent;\n break;\n case 'topClick':\n // Firefox creates a click event on right mouse clicks. This removes the\n // unwanted click events.\n if (nativeEvent.button === 2) {\n return null;\n }\n /* falls through */\n case 'topDoubleClick':\n case 'topMouseDown':\n case 'topMouseMove':\n case 'topMouseUp':\n // TODO: Disabled elements should not respond to mouse events\n /* falls through */\n case 'topMouseOut':\n case 'topMouseOver':\n case 'topContextMenu':\n EventConstructor = SyntheticMouseEvent;\n break;\n case 'topDrag':\n case 'topDragEnd':\n case 'topDragEnter':\n case 'topDragExit':\n case 'topDragLeave':\n case 'topDragOver':\n case 'topDragStart':\n case 'topDrop':\n EventConstructor = SyntheticDragEvent;\n break;\n case 'topTouchCancel':\n case 'topTouchEnd':\n case 'topTouchMove':\n case 'topTouchStart':\n EventConstructor = SyntheticTouchEvent;\n break;\n case 'topAnimationEnd':\n case 'topAnimationIteration':\n case 'topAnimationStart':\n EventConstructor = SyntheticAnimationEvent;\n break;\n case 'topTransitionEnd':\n EventConstructor = SyntheticTransitionEvent;\n break;\n case 'topScroll':\n EventConstructor = SyntheticUIEvent;\n break;\n case 'topWheel':\n EventConstructor = SyntheticWheelEvent;\n break;\n case 'topCopy':\n case 'topCut':\n case 'topPaste':\n EventConstructor = SyntheticClipboardEvent;\n break;\n }\n !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : _prodInvariant('86', topLevelType) : void 0;\n var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n },\n\n didPutListener: function (inst, registrationName, listener) {\n // Mobile Safari does not fire properly bubble click events on\n // non-interactive elements, which means delegated click listeners do not\n // fire. The workaround for this bug involves attaching an empty click\n // listener on the target node.\n // http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n if (registrationName === 'onClick' && !isInteractive(inst._tag)) {\n var key = getDictionaryKey(inst);\n var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n if (!onClickListeners[key]) {\n onClickListeners[key] = EventListener.listen(node, 'click', emptyFunction);\n }\n }\n },\n\n willDeleteListener: function (inst, registrationName) {\n if (registrationName === 'onClick' && !isInteractive(inst._tag)) {\n var key = getDictionaryKey(inst);\n onClickListeners[key].remove();\n delete onClickListeners[key];\n }\n }\n\n};\n\nmodule.exports = SimpleEventPlugin;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\nvar AnimationEventInterface = {\n animationName: null,\n elapsedTime: null,\n pseudoElement: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticAnimationEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticAnimationEvent, AnimationEventInterface);\n\nmodule.exports = SyntheticAnimationEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\nvar ClipboardEventInterface = {\n clipboardData: function (event) {\n return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);\n\nmodule.exports = SyntheticClipboardEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar FocusEventInterface = {\n relatedTarget: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);\n\nmodule.exports = SyntheticFocusEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\nvar getEventCharCode = require('./getEventCharCode');\nvar getEventKey = require('./getEventKey');\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar KeyboardEventInterface = {\n key: getEventKey,\n location: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n repeat: null,\n locale: null,\n getModifierState: getEventModifierState,\n // Legacy Interface\n charCode: function (event) {\n // `charCode` is the result of a KeyPress event and represents the value of\n // the actual printable character.\n\n // KeyPress is deprecated, but its replacement is not yet final and not\n // implemented in any major browser. Only KeyPress has charCode.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n return 0;\n },\n keyCode: function (event) {\n // `keyCode` is the result of a KeyDown/Up event and represents the value of\n // physical keyboard key.\n\n // The actual meaning of the value depends on the users' keyboard layout\n // which cannot be detected. Assuming that it is a US keyboard layout\n // provides a surprisingly accurate mapping for US and European users.\n // Due to this, it is left to the user to implement at this time.\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n return 0;\n },\n which: function (event) {\n // `which` is an alias for either `keyCode` or `charCode` depending on the\n // type of the event.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n return 0;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);\n\nmodule.exports = SyntheticKeyboardEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar getEventCharCode = require('./getEventCharCode');\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar normalizeKey = {\n 'Esc': 'Escape',\n 'Spacebar': ' ',\n 'Left': 'ArrowLeft',\n 'Up': 'ArrowUp',\n 'Right': 'ArrowRight',\n 'Down': 'ArrowDown',\n 'Del': 'Delete',\n 'Win': 'OS',\n 'Menu': 'ContextMenu',\n 'Apps': 'ContextMenu',\n 'Scroll': 'ScrollLock',\n 'MozPrintableKey': 'Unidentified'\n};\n\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar translateToKey = {\n 8: 'Backspace',\n 9: 'Tab',\n 12: 'Clear',\n 13: 'Enter',\n 16: 'Shift',\n 17: 'Control',\n 18: 'Alt',\n 19: 'Pause',\n 20: 'CapsLock',\n 27: 'Escape',\n 32: ' ',\n 33: 'PageUp',\n 34: 'PageDown',\n 35: 'End',\n 36: 'Home',\n 37: 'ArrowLeft',\n 38: 'ArrowUp',\n 39: 'ArrowRight',\n 40: 'ArrowDown',\n 45: 'Insert',\n 46: 'Delete',\n 112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',\n 118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',\n 144: 'NumLock',\n 145: 'ScrollLock',\n 224: 'Meta'\n};\n\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\nfunction getEventKey(nativeEvent) {\n if (nativeEvent.key) {\n // Normalize inconsistent values reported by browsers due to\n // implementations of a working draft specification.\n\n // FireFox implements `key` but returns `MozPrintableKey` for all\n // printable characters (normalized to `Unidentified`), ignore it.\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (key !== 'Unidentified') {\n return key;\n }\n }\n\n // Browser does not implement `key`, polyfill as much of it as we can.\n if (nativeEvent.type === 'keypress') {\n var charCode = getEventCharCode(nativeEvent);\n\n // The enter-key is technically both printable and non-printable and can\n // thus be captured by `keypress`, no other non-printable key should.\n return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n }\n if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n // While user keyboard layout determines the actual meaning of each\n // `keyCode` value, almost all function keys have a universal value.\n return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n }\n return '';\n}\n\nmodule.exports = getEventKey;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar DragEventInterface = {\n dataTransfer: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);\n\nmodule.exports = SyntheticDragEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\nvar TouchEventInterface = {\n touches: null,\n targetTouches: null,\n changedTouches: null,\n altKey: null,\n metaKey: null,\n ctrlKey: null,\n shiftKey: null,\n getModifierState: getEventModifierState\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);\n\nmodule.exports = SyntheticTouchEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\nvar TransitionEventInterface = {\n propertyName: null,\n elapsedTime: null,\n pseudoElement: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticTransitionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticTransitionEvent, TransitionEventInterface);\n\nmodule.exports = SyntheticTransitionEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar WheelEventInterface = {\n deltaX: function (event) {\n return 'deltaX' in event ? event.deltaX :\n // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n 'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n },\n deltaY: function (event) {\n return 'deltaY' in event ? event.deltaY :\n // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n 'wheelDeltaY' in event ? -event.wheelDeltaY :\n // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n 'wheelDelta' in event ? -event.wheelDelta : 0;\n },\n deltaZ: null,\n\n // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n deltaMode: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticMouseEvent}\n */\nfunction SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);\n\nmodule.exports = SyntheticWheelEvent;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar validateDOMNesting = require('./validateDOMNesting');\n\nvar DOC_NODE_TYPE = 9;\n\nfunction ReactDOMContainerInfo(topLevelWrapper, node) {\n var info = {\n _topLevelWrapper: topLevelWrapper,\n _idCounter: 1,\n _ownerDocument: node ? node.nodeType === DOC_NODE_TYPE ? node : node.ownerDocument : null,\n _node: node,\n _tag: node ? node.nodeName.toLowerCase() : null,\n _namespaceURI: node ? node.namespaceURI : null\n };\n if (process.env.NODE_ENV !== 'production') {\n info._ancestorInfo = node ? validateDOMNesting.updatedAncestorInfo(null, info._tag, null) : null;\n }\n return info;\n}\n\nmodule.exports = ReactDOMContainerInfo;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ReactDOMFeatureFlags = {\n useCreateElement: true,\n useFiber: false\n};\n\nmodule.exports = ReactDOMFeatureFlags;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar adler32 = require('./adler32');\n\nvar TAG_END = /\\/?>/;\nvar COMMENT_START = /^<\\!\\-\\-/;\n\nvar ReactMarkupChecksum = {\n CHECKSUM_ATTR_NAME: 'data-react-checksum',\n\n /**\n * @param {string} markup Markup string\n * @return {string} Markup string with checksum attribute attached\n */\n addChecksumToMarkup: function (markup) {\n var checksum = adler32(markup);\n\n // Add checksum (handle both parent tags, comments and self-closing tags)\n if (COMMENT_START.test(markup)) {\n return markup;\n } else {\n return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '=\"' + checksum + '\"$&');\n }\n },\n\n /**\n * @param {string} markup to use\n * @param {DOMElement} element root React element\n * @returns {boolean} whether or not the markup is the same\n */\n canReuseMarkup: function (markup, element) {\n var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n existingChecksum = existingChecksum && parseInt(existingChecksum, 10);\n var markupChecksum = adler32(markup);\n return markupChecksum === existingChecksum;\n }\n};\n\nmodule.exports = ReactMarkupChecksum;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\n'use strict';\n\nvar MOD = 65521;\n\n// adler32 is not cryptographically strong, and is only used to sanity check that\n// markup generated on the server matches the markup generated on the client.\n// This implementation (a modified version of the SheetJS version) has been optimized\n// for our use case, at the expense of conforming to the adler32 specification\n// for non-ascii inputs.\nfunction adler32(data) {\n var a = 1;\n var b = 0;\n var i = 0;\n var l = data.length;\n var m = l & ~0x3;\n while (i < m) {\n var n = Math.min(i + 4096, m);\n for (; i < n; i += 4) {\n b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));\n }\n a %= MOD;\n b %= MOD;\n }\n for (; i < l; i++) {\n b += a += data.charCodeAt(i);\n }\n a %= MOD;\n b %= MOD;\n return a | b << 16;\n}\n\nmodule.exports = adler32;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nmodule.exports = '15.4.1';","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('react/lib/ReactCurrentOwner');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactInstanceMap = require('./ReactInstanceMap');\n\nvar getHostComponentFromComposite = require('./getHostComponentFromComposite');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Returns the DOM node rendered by this element.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.finddomnode\n *\n * @param {ReactComponent|DOMElement} componentOrElement\n * @return {?DOMElement} The root node of this element.\n */\nfunction findDOMNode(componentOrElement) {\n if (process.env.NODE_ENV !== 'production') {\n var owner = ReactCurrentOwner.current;\n if (owner !== null) {\n process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;\n owner._warnedAboutRefsInRender = true;\n }\n }\n if (componentOrElement == null) {\n return null;\n }\n if (componentOrElement.nodeType === 1) {\n return componentOrElement;\n }\n\n var inst = ReactInstanceMap.get(componentOrElement);\n if (inst) {\n inst = getHostComponentFromComposite(inst);\n return inst ? ReactDOMComponentTree.getNodeFromInstance(inst) : null;\n }\n\n if (typeof componentOrElement.render === 'function') {\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : _prodInvariant('44') : void 0;\n } else {\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : _prodInvariant('45', Object.keys(componentOrElement)) : void 0;\n }\n}\n\nmodule.exports = findDOMNode;","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar ReactMount = require('./ReactMount');\n\nmodule.exports = ReactMount.renderSubtreeIntoContainer;","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","'use strict';\n\nexports.__esModule = true;\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 _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _createTransitionManager2 = require('./createTransitionManager');\n\nvar _createTransitionManager3 = _interopRequireDefault(_createTransitionManager2);\n\nvar _InternalPropTypes = require('./InternalPropTypes');\n\nvar _RouterContext = require('./RouterContext');\n\nvar _RouterContext2 = _interopRequireDefault(_RouterContext);\n\nvar _RouteUtils = require('./RouteUtils');\n\nvar _RouterUtils = require('./RouterUtils');\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\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 _React$PropTypes = _react2.default.PropTypes,\n func = _React$PropTypes.func,\n object = _React$PropTypes.object;\n\n/**\n * A <Router> is a high-level API for automatically setting up\n * a router that renders a <RouterContext> with all the props\n * it needs each time the URL changes.\n */\n\nvar Router = _react2.default.createClass({\n displayName: 'Router',\n\n\n propTypes: {\n history: object,\n children: _InternalPropTypes.routes,\n routes: _InternalPropTypes.routes, // alias for children\n render: func,\n createElement: func,\n onError: func,\n onUpdate: func,\n\n // PRIVATE: For client-side rehydration of server match.\n matchContext: object\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n render: function render(props) {\n return _react2.default.createElement(_RouterContext2.default, props);\n }\n };\n },\n getInitialState: function getInitialState() {\n return {\n location: null,\n routes: null,\n params: null,\n components: null\n };\n },\n handleError: function handleError(error) {\n if (this.props.onError) {\n this.props.onError.call(this, error);\n } else {\n // Throw errors by default so we don't silently swallow them!\n throw error; // This error probably occurred in getChildRoutes or getComponents.\n }\n },\n createRouterObject: function createRouterObject(state) {\n var matchContext = this.props.matchContext;\n\n if (matchContext) {\n return matchContext.router;\n }\n\n var history = this.props.history;\n\n return (0, _RouterUtils.createRouterObject)(history, this.transitionManager, state);\n },\n createTransitionManager: function createTransitionManager() {\n var matchContext = this.props.matchContext;\n\n if (matchContext) {\n return matchContext.transitionManager;\n }\n\n var history = this.props.history;\n var _props = this.props,\n routes = _props.routes,\n children = _props.children;\n\n\n !history.getCurrentLocation ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'You have provided a history object created with history v2.x or ' + 'earlier. This version of React Router is only compatible with v3 ' + 'history objects. Please upgrade to history v3.x.') : (0, _invariant2.default)(false) : void 0;\n\n return (0, _createTransitionManager3.default)(history, (0, _RouteUtils.createRoutes)(routes || children));\n },\n componentWillMount: function componentWillMount() {\n var _this = this;\n\n this.transitionManager = this.createTransitionManager();\n this.router = this.createRouterObject(this.state);\n\n this._unlisten = this.transitionManager.listen(function (error, state) {\n if (error) {\n _this.handleError(error);\n } else {\n // Keep the identity of this.router because of a caveat in ContextUtils:\n // they only work if the object identity is preserved.\n (0, _RouterUtils.assignRouterState)(_this.router, state);\n _this.setState(state, _this.props.onUpdate);\n }\n });\n },\n\n\n /* istanbul ignore next: sanity check */\n componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(nextProps.history === this.props.history, 'You cannot change <Router history>; it will be ignored') : void 0;\n\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)((nextProps.routes || nextProps.children) === (this.props.routes || this.props.children), 'You cannot change <Router routes>; it will be ignored') : void 0;\n },\n componentWillUnmount: function componentWillUnmount() {\n if (this._unlisten) this._unlisten();\n },\n render: function render() {\n var _state = this.state,\n location = _state.location,\n routes = _state.routes,\n params = _state.params,\n components = _state.components;\n\n var _props2 = this.props,\n createElement = _props2.createElement,\n render = _props2.render,\n props = _objectWithoutProperties(_props2, ['createElement', 'render']);\n\n if (location == null) return null; // Async match\n\n // Only forward non-Router-specific props to routing context, as those are\n // the only ones that might be custom routing context props.\n Object.keys(Router.propTypes).forEach(function (propType) {\n return delete props[propType];\n });\n\n return render(_extends({}, props, {\n router: this.router,\n location: location,\n routes: routes,\n params: params,\n components: components,\n createElement: createElement\n }));\n }\n});\n\nexports.default = Router;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _PatternUtils = require('./PatternUtils');\n\nfunction routeParamsChanged(route, prevState, nextState) {\n if (!route.path) return false;\n\n var paramNames = (0, _PatternUtils.getParamNames)(route.path);\n\n return paramNames.some(function (paramName) {\n return prevState.params[paramName] !== nextState.params[paramName];\n });\n}\n\n/**\n * Returns an object of { leaveRoutes, changeRoutes, enterRoutes } determined by\n * the change from prevState to nextState. We leave routes if either\n * 1) they are not in the next state or 2) they are in the next state\n * but their params have changed (i.e. /users/123 => /users/456).\n *\n * leaveRoutes are ordered starting at the leaf route of the tree\n * we're leaving up to the common parent route. enterRoutes are ordered\n * from the top of the tree we're entering down to the leaf route.\n *\n * changeRoutes are any routes that didn't leave or enter during\n * the transition.\n */\nfunction computeChangedRoutes(prevState, nextState) {\n var prevRoutes = prevState && prevState.routes;\n var nextRoutes = nextState.routes;\n\n var leaveRoutes = void 0,\n changeRoutes = void 0,\n enterRoutes = void 0;\n if (prevRoutes) {\n (function () {\n var parentIsLeaving = false;\n leaveRoutes = prevRoutes.filter(function (route) {\n if (parentIsLeaving) {\n return true;\n } else {\n var isLeaving = nextRoutes.indexOf(route) === -1 || routeParamsChanged(route, prevState, nextState);\n if (isLeaving) parentIsLeaving = true;\n return isLeaving;\n }\n });\n\n // onLeave hooks start at the leaf route.\n leaveRoutes.reverse();\n\n enterRoutes = [];\n changeRoutes = [];\n\n nextRoutes.forEach(function (route) {\n var isNew = prevRoutes.indexOf(route) === -1;\n var paramsChanged = leaveRoutes.indexOf(route) !== -1;\n\n if (isNew || paramsChanged) enterRoutes.push(route);else changeRoutes.push(route);\n });\n })();\n } else {\n leaveRoutes = [];\n changeRoutes = [];\n enterRoutes = nextRoutes;\n }\n\n return {\n leaveRoutes: leaveRoutes,\n changeRoutes: changeRoutes,\n enterRoutes: enterRoutes\n };\n}\n\nexports.default = computeChangedRoutes;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\nexports.runEnterHooks = runEnterHooks;\nexports.runChangeHooks = runChangeHooks;\nexports.runLeaveHooks = runLeaveHooks;\n\nvar _AsyncUtils = require('./AsyncUtils');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PendingHooks = function PendingHooks() {\n var _this = this;\n\n _classCallCheck(this, PendingHooks);\n\n this.hooks = [];\n\n this.add = function (hook) {\n return _this.hooks.push(hook);\n };\n\n this.remove = function (hook) {\n return _this.hooks = _this.hooks.filter(function (h) {\n return h !== hook;\n });\n };\n\n this.has = function (hook) {\n return _this.hooks.indexOf(hook) !== -1;\n };\n\n this.clear = function () {\n return _this.hooks = [];\n };\n};\n\nvar enterHooks = new PendingHooks();\nvar changeHooks = new PendingHooks();\n\nfunction createTransitionHook(hook, route, asyncArity, pendingHooks) {\n var isSync = hook.length < asyncArity;\n\n var transitionHook = function transitionHook() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n hook.apply(route, args);\n\n if (isSync) {\n var callback = args[args.length - 1];\n // Assume hook executes synchronously and\n // automatically call the callback.\n callback();\n }\n };\n\n pendingHooks.add(transitionHook);\n\n return transitionHook;\n}\n\nfunction getEnterHooks(routes) {\n return routes.reduce(function (hooks, route) {\n if (route.onEnter) hooks.push(createTransitionHook(route.onEnter, route, 3, enterHooks));\n return hooks;\n }, []);\n}\n\nfunction getChangeHooks(routes) {\n return routes.reduce(function (hooks, route) {\n if (route.onChange) hooks.push(createTransitionHook(route.onChange, route, 4, changeHooks));\n return hooks;\n }, []);\n}\n\nfunction runTransitionHooks(length, iter, callback) {\n if (!length) {\n callback();\n return;\n }\n\n var redirectInfo = void 0;\n function replace(location) {\n redirectInfo = location;\n }\n\n (0, _AsyncUtils.loopAsync)(length, function (index, next, done) {\n iter(index, replace, function (error) {\n if (error || redirectInfo) {\n done(error, redirectInfo); // No need to continue.\n } else {\n next();\n }\n });\n }, callback);\n}\n\n/**\n * Runs all onEnter hooks in the given array of routes in order\n * with onEnter(nextState, replace, callback) and calls\n * callback(error, redirectInfo) when finished. The first hook\n * to use replace short-circuits the loop.\n *\n * If a hook needs to run asynchronously, it may use the callback\n * function. However, doing so will cause the transition to pause,\n * which could lead to a non-responsive UI if the hook is slow.\n */\nfunction runEnterHooks(routes, nextState, callback) {\n enterHooks.clear();\n var hooks = getEnterHooks(routes);\n return runTransitionHooks(hooks.length, function (index, replace, next) {\n var wrappedNext = function wrappedNext() {\n if (enterHooks.has(hooks[index])) {\n next();\n enterHooks.remove(hooks[index]);\n }\n };\n hooks[index](nextState, replace, wrappedNext);\n }, callback);\n}\n\n/**\n * Runs all onChange hooks in the given array of routes in order\n * with onChange(prevState, nextState, replace, callback) and calls\n * callback(error, redirectInfo) when finished. The first hook\n * to use replace short-circuits the loop.\n *\n * If a hook needs to run asynchronously, it may use the callback\n * function. However, doing so will cause the transition to pause,\n * which could lead to a non-responsive UI if the hook is slow.\n */\nfunction runChangeHooks(routes, state, nextState, callback) {\n changeHooks.clear();\n var hooks = getChangeHooks(routes);\n return runTransitionHooks(hooks.length, function (index, replace, next) {\n var wrappedNext = function wrappedNext() {\n if (changeHooks.has(hooks[index])) {\n next();\n changeHooks.remove(hooks[index]);\n }\n };\n hooks[index](state, nextState, replace, wrappedNext);\n }, callback);\n}\n\n/**\n * Runs all onLeave hooks in the given array of routes in order.\n */\nfunction runLeaveHooks(routes, prevState) {\n for (var i = 0, len = routes.length; i < len; ++i) {\n if (routes[i].onLeave) routes[i].onLeave.call(routes[i], prevState);\n }\n}","'use strict';\n\nexports.__esModule = true;\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\nexports.default = isActive;\n\nvar _PatternUtils = require('./PatternUtils');\n\nfunction deepEqual(a, b) {\n if (a == b) return true;\n\n if (a == null || b == null) return false;\n\n if (Array.isArray(a)) {\n return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {\n return deepEqual(item, b[index]);\n });\n }\n\n if ((typeof a === 'undefined' ? 'undefined' : _typeof(a)) === 'object') {\n for (var p in a) {\n if (!Object.prototype.hasOwnProperty.call(a, p)) {\n continue;\n }\n\n if (a[p] === undefined) {\n if (b[p] !== undefined) {\n return false;\n }\n } else if (!Object.prototype.hasOwnProperty.call(b, p)) {\n return false;\n } else if (!deepEqual(a[p], b[p])) {\n return false;\n }\n }\n\n return true;\n }\n\n return String(a) === String(b);\n}\n\n/**\n * Returns true if the current pathname matches the supplied one, net of\n * leading and trailing slash normalization. This is sufficient for an\n * indexOnly route match.\n */\nfunction pathIsActive(pathname, currentPathname) {\n // Normalize leading slash for consistency. Leading slash on pathname has\n // already been normalized in isActive. See caveat there.\n if (currentPathname.charAt(0) !== '/') {\n currentPathname = '/' + currentPathname;\n }\n\n // Normalize the end of both path names too. Maybe `/foo/` shouldn't show\n // `/foo` as active, but in this case, we would already have failed the\n // match.\n if (pathname.charAt(pathname.length - 1) !== '/') {\n pathname += '/';\n }\n if (currentPathname.charAt(currentPathname.length - 1) !== '/') {\n currentPathname += '/';\n }\n\n return currentPathname === pathname;\n}\n\n/**\n * Returns true if the given pathname matches the active routes and params.\n */\nfunction routeIsActive(pathname, routes, params) {\n var remainingPathname = pathname,\n paramNames = [],\n paramValues = [];\n\n // for...of would work here but it's probably slower post-transpilation.\n for (var i = 0, len = routes.length; i < len; ++i) {\n var route = routes[i];\n var pattern = route.path || '';\n\n if (pattern.charAt(0) === '/') {\n remainingPathname = pathname;\n paramNames = [];\n paramValues = [];\n }\n\n if (remainingPathname !== null && pattern) {\n var matched = (0, _PatternUtils.matchPattern)(pattern, remainingPathname);\n if (matched) {\n remainingPathname = matched.remainingPathname;\n paramNames = [].concat(paramNames, matched.paramNames);\n paramValues = [].concat(paramValues, matched.paramValues);\n } else {\n remainingPathname = null;\n }\n\n if (remainingPathname === '') {\n // We have an exact match on the route. Just check that all the params\n // match.\n // FIXME: This doesn't work on repeated params.\n return paramNames.every(function (paramName, index) {\n return String(paramValues[index]) === String(params[paramName]);\n });\n }\n }\n }\n\n return false;\n}\n\n/**\n * Returns true if all key/value pairs in the given query are\n * currently active.\n */\nfunction queryIsActive(query, activeQuery) {\n if (activeQuery == null) return query == null;\n\n if (query == null) return true;\n\n return deepEqual(query, activeQuery);\n}\n\n/**\n * Returns true if a <Link> to the given pathname/query combination is\n * currently active.\n */\nfunction isActive(_ref, indexOnly, currentLocation, routes, params) {\n var pathname = _ref.pathname,\n query = _ref.query;\n\n if (currentLocation == null) return false;\n\n // TODO: This is a bit ugly. It keeps around support for treating pathnames\n // without preceding slashes as absolute paths, but possibly also works\n // around the same quirks with basenames as in matchRoutes.\n if (pathname.charAt(0) !== '/') {\n pathname = '/' + pathname;\n }\n\n if (!pathIsActive(pathname, currentLocation.pathname)) {\n // The path check is necessary and sufficient for indexOnly, but otherwise\n // we still need to check the routes.\n if (indexOnly || !routeIsActive(pathname, routes, params)) {\n return false;\n }\n }\n\n return queryIsActive(query, currentLocation.query);\n}\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _AsyncUtils = require('./AsyncUtils');\n\nvar _PromiseUtils = require('./PromiseUtils');\n\nfunction getComponentsForRoute(nextState, route, callback) {\n if (route.component || route.components) {\n callback(null, route.component || route.components);\n return;\n }\n\n var getComponent = route.getComponent || route.getComponents;\n if (getComponent) {\n var componentReturn = getComponent.call(route, nextState, callback);\n if ((0, _PromiseUtils.isPromise)(componentReturn)) componentReturn.then(function (component) {\n return callback(null, component);\n }, callback);\n } else {\n callback();\n }\n}\n\n/**\n * Asynchronously fetches all components needed for the given router\n * state and calls callback(error, components) when finished.\n *\n * Note: This operation may finish synchronously if no routes have an\n * asynchronous getComponents method.\n */\nfunction getComponents(nextState, callback) {\n (0, _AsyncUtils.mapAsync)(nextState.routes, function (route, index, callback) {\n getComponentsForRoute(nextState, route, callback);\n }, callback);\n}\n\nexports.default = getComponents;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\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 _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\nexports.default = matchRoutes;\n\nvar _AsyncUtils = require('./AsyncUtils');\n\nvar _PromiseUtils = require('./PromiseUtils');\n\nvar _PatternUtils = require('./PatternUtils');\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\n\nvar _RouteUtils = require('./RouteUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getChildRoutes(route, location, paramNames, paramValues, callback) {\n if (route.childRoutes) {\n return [null, route.childRoutes];\n }\n if (!route.getChildRoutes) {\n return [];\n }\n\n var sync = true,\n result = void 0;\n\n var partialNextState = {\n location: location,\n params: createParams(paramNames, paramValues)\n };\n\n var childRoutesReturn = route.getChildRoutes(partialNextState, function (error, childRoutes) {\n childRoutes = !error && (0, _RouteUtils.createRoutes)(childRoutes);\n if (sync) {\n result = [error, childRoutes];\n return;\n }\n\n callback(error, childRoutes);\n });\n\n if ((0, _PromiseUtils.isPromise)(childRoutesReturn)) childRoutesReturn.then(function (childRoutes) {\n return callback(null, (0, _RouteUtils.createRoutes)(childRoutes));\n }, callback);\n\n sync = false;\n return result; // Might be undefined.\n}\n\nfunction getIndexRoute(route, location, paramNames, paramValues, callback) {\n if (route.indexRoute) {\n callback(null, route.indexRoute);\n } else if (route.getIndexRoute) {\n var partialNextState = {\n location: location,\n params: createParams(paramNames, paramValues)\n };\n\n var indexRoutesReturn = route.getIndexRoute(partialNextState, function (error, indexRoute) {\n callback(error, !error && (0, _RouteUtils.createRoutes)(indexRoute)[0]);\n });\n\n if ((0, _PromiseUtils.isPromise)(indexRoutesReturn)) indexRoutesReturn.then(function (indexRoute) {\n return callback(null, (0, _RouteUtils.createRoutes)(indexRoute)[0]);\n }, callback);\n } else if (route.childRoutes) {\n (function () {\n var pathless = route.childRoutes.filter(function (childRoute) {\n return !childRoute.path;\n });\n\n (0, _AsyncUtils.loopAsync)(pathless.length, function (index, next, done) {\n getIndexRoute(pathless[index], location, paramNames, paramValues, function (error, indexRoute) {\n if (error || indexRoute) {\n var routes = [pathless[index]].concat(Array.isArray(indexRoute) ? indexRoute : [indexRoute]);\n done(error, routes);\n } else {\n next();\n }\n });\n }, function (err, routes) {\n callback(null, routes);\n });\n })();\n } else {\n callback();\n }\n}\n\nfunction assignParams(params, paramNames, paramValues) {\n return paramNames.reduce(function (params, paramName, index) {\n var paramValue = paramValues && paramValues[index];\n\n if (Array.isArray(params[paramName])) {\n params[paramName].push(paramValue);\n } else if (paramName in params) {\n params[paramName] = [params[paramName], paramValue];\n } else {\n params[paramName] = paramValue;\n }\n\n return params;\n }, params);\n}\n\nfunction createParams(paramNames, paramValues) {\n return assignParams({}, paramNames, paramValues);\n}\n\nfunction matchRouteDeep(route, location, remainingPathname, paramNames, paramValues, callback) {\n var pattern = route.path || '';\n\n if (pattern.charAt(0) === '/') {\n remainingPathname = location.pathname;\n paramNames = [];\n paramValues = [];\n }\n\n // Only try to match the path if the route actually has a pattern, and if\n // we're not just searching for potential nested absolute paths.\n if (remainingPathname !== null && pattern) {\n try {\n var matched = (0, _PatternUtils.matchPattern)(pattern, remainingPathname);\n if (matched) {\n remainingPathname = matched.remainingPathname;\n paramNames = [].concat(paramNames, matched.paramNames);\n paramValues = [].concat(paramValues, matched.paramValues);\n } else {\n remainingPathname = null;\n }\n } catch (error) {\n callback(error);\n }\n\n // By assumption, pattern is non-empty here, which is the prerequisite for\n // actually terminating a match.\n if (remainingPathname === '') {\n var _ret2 = function () {\n var match = {\n routes: [route],\n params: createParams(paramNames, paramValues)\n };\n\n getIndexRoute(route, location, paramNames, paramValues, function (error, indexRoute) {\n if (error) {\n callback(error);\n } else {\n if (Array.isArray(indexRoute)) {\n var _match$routes;\n\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(indexRoute.every(function (route) {\n return !route.path;\n }), 'Index routes should not have paths') : void 0;\n (_match$routes = match.routes).push.apply(_match$routes, indexRoute);\n } else if (indexRoute) {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(!indexRoute.path, 'Index routes should not have paths') : void 0;\n match.routes.push(indexRoute);\n }\n\n callback(null, match);\n }\n });\n\n return {\n v: void 0\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === \"object\") return _ret2.v;\n }\n }\n\n if (remainingPathname != null || route.childRoutes) {\n // Either a) this route matched at least some of the path or b)\n // we don't have to load this route's children asynchronously. In\n // either case continue checking for matches in the subtree.\n var onChildRoutes = function onChildRoutes(error, childRoutes) {\n if (error) {\n callback(error);\n } else if (childRoutes) {\n // Check the child routes to see if any of them match.\n matchRoutes(childRoutes, location, function (error, match) {\n if (error) {\n callback(error);\n } else if (match) {\n // A child route matched! Augment the match and pass it up the stack.\n match.routes.unshift(route);\n callback(null, match);\n } else {\n callback();\n }\n }, remainingPathname, paramNames, paramValues);\n } else {\n callback();\n }\n };\n\n var result = getChildRoutes(route, location, paramNames, paramValues, onChildRoutes);\n if (result) {\n onChildRoutes.apply(undefined, result);\n }\n } else {\n callback();\n }\n}\n\n/**\n * Asynchronously matches the given location to a set of routes and calls\n * callback(error, state) when finished. The state object will have the\n * following properties:\n *\n * - routes An array of routes that matched, in hierarchical order\n * - params An object of URL parameters\n *\n * Note: This operation may finish synchronously if no routes have an\n * asynchronous getChildRoutes method.\n */\nfunction matchRoutes(routes, location, callback, remainingPathname) {\n var paramNames = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n var paramValues = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n\n if (remainingPathname === undefined) {\n // TODO: This is a little bit ugly, but it works around a quirk in history\n // that strips the leading slash from pathnames when using basenames with\n // trailing slashes.\n if (location.pathname.charAt(0) !== '/') {\n location = _extends({}, location, {\n pathname: '/' + location.pathname\n });\n }\n remainingPathname = location.pathname;\n }\n\n (0, _AsyncUtils.loopAsync)(routes.length, function (index, next, done) {\n matchRouteDeep(routes[index], location, remainingPathname, paramNames, paramValues, function (error, match) {\n if (error || match) {\n done(error, match);\n } else {\n next();\n }\n });\n }, callback);\n}\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _PatternUtils = require('./PatternUtils');\n\n/**\n * Extracts an object of params the given route cares about from\n * the given params object.\n */\nfunction getRouteParams(route, params) {\n var routeParams = {};\n\n if (!route.path) return routeParams;\n\n (0, _PatternUtils.getParamNames)(route.path).forEach(function (p) {\n if (Object.prototype.hasOwnProperty.call(params, p)) {\n routeParams[p] = params[p];\n }\n });\n\n return routeParams;\n}\n\nexports.default = getRouteParams;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\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 _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Link = require('./Link');\n\nvar _Link2 = _interopRequireDefault(_Link);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * An <IndexLink> is used to link to an <IndexRoute>.\n */\nvar IndexLink = _react2.default.createClass({\n displayName: 'IndexLink',\n render: function render() {\n return _react2.default.createElement(_Link2.default, _extends({}, this.props, { onlyActiveOnIndex: true }));\n }\n});\n\nexports.default = IndexLink;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = withRouter;\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _hoistNonReactStatics = require('hoist-non-react-statics');\n\nvar _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics);\n\nvar _ContextUtils = require('./ContextUtils');\n\nvar _PropTypes = require('./PropTypes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n}\n\nfunction withRouter(WrappedComponent, options) {\n var withRef = options && options.withRef;\n\n var WithRouter = _react2.default.createClass({\n displayName: 'WithRouter',\n\n mixins: [(0, _ContextUtils.ContextSubscriber)('router')],\n\n contextTypes: { router: _PropTypes.routerShape },\n propTypes: { router: _PropTypes.routerShape },\n\n getWrappedInstance: function getWrappedInstance() {\n !withRef ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'To access the wrapped instance, you need to specify ' + '`{ withRef: true }` as the second argument of the withRouter() call.') : (0, _invariant2.default)(false) : void 0;\n\n return this.wrappedInstance;\n },\n render: function render() {\n var _this = this;\n\n var router = this.props.router || this.context.router;\n var params = router.params,\n location = router.location,\n routes = router.routes;\n\n var props = _extends({}, this.props, { router: router, params: params, location: location, routes: routes });\n\n if (withRef) {\n props.ref = function (c) {\n _this.wrappedInstance = c;\n };\n }\n\n return _react2.default.createElement(WrappedComponent, props);\n }\n });\n\n WithRouter.displayName = 'withRouter(' + getDisplayName(WrappedComponent) + ')';\n WithRouter.WrappedComponent = WrappedComponent;\n\n return (0, _hoistNonReactStatics2.default)(WithRouter, WrappedComponent);\n}\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _Redirect = require('./Redirect');\n\nvar _Redirect2 = _interopRequireDefault(_Redirect);\n\nvar _InternalPropTypes = require('./InternalPropTypes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _React$PropTypes = _react2.default.PropTypes,\n string = _React$PropTypes.string,\n object = _React$PropTypes.object;\n\n/**\n * An <IndexRedirect> is used to redirect from an indexRoute.\n */\n/* eslint-disable react/require-render-return */\n\nvar IndexRedirect = _react2.default.createClass({\n displayName: 'IndexRedirect',\n\n\n statics: {\n createRouteFromReactElement: function createRouteFromReactElement(element, parentRoute) {\n /* istanbul ignore else: sanity check */\n if (parentRoute) {\n parentRoute.indexRoute = _Redirect2.default.createRouteFromReactElement(element);\n } else {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'An <IndexRedirect> does not make sense at the root of your route config') : void 0;\n }\n }\n },\n\n propTypes: {\n to: string.isRequired,\n query: object,\n state: object,\n onEnter: _InternalPropTypes.falsy,\n children: _InternalPropTypes.falsy\n },\n\n /* istanbul ignore next: sanity check */\n render: function render() {\n !false ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<IndexRedirect> elements are for router configuration only and should not be rendered') : (0, _invariant2.default)(false) : void 0;\n }\n});\n\nexports.default = IndexRedirect;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _RouteUtils = require('./RouteUtils');\n\nvar _InternalPropTypes = require('./InternalPropTypes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar func = _react2.default.PropTypes.func;\n\n/**\n * An <IndexRoute> is used to specify its parent's <Route indexRoute> in\n * a JSX route config.\n */\n/* eslint-disable react/require-render-return */\n\nvar IndexRoute = _react2.default.createClass({\n displayName: 'IndexRoute',\n\n\n statics: {\n createRouteFromReactElement: function createRouteFromReactElement(element, parentRoute) {\n /* istanbul ignore else: sanity check */\n if (parentRoute) {\n parentRoute.indexRoute = (0, _RouteUtils.createRouteFromReactElement)(element);\n } else {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'An <IndexRoute> does not make sense at the root of your route config') : void 0;\n }\n }\n },\n\n propTypes: {\n path: _InternalPropTypes.falsy,\n component: _InternalPropTypes.component,\n components: _InternalPropTypes.components,\n getComponent: func,\n getComponents: func\n },\n\n /* istanbul ignore next: sanity check */\n render: function render() {\n !false ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<IndexRoute> elements are for router configuration only and should not be rendered') : (0, _invariant2.default)(false) : void 0;\n }\n});\n\nexports.default = IndexRoute;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _RouteUtils = require('./RouteUtils');\n\nvar _InternalPropTypes = require('./InternalPropTypes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _React$PropTypes = _react2.default.PropTypes,\n string = _React$PropTypes.string,\n func = _React$PropTypes.func;\n\n/**\n * A <Route> is used to declare which components are rendered to the\n * page when the URL matches a given pattern.\n *\n * Routes are arranged in a nested tree structure. When a new URL is\n * requested, the tree is searched depth-first to find a route whose\n * path matches the URL. When one is found, all routes in the tree\n * that lead to it are considered \"active\" and their components are\n * rendered into the DOM, nested in the same order as in the tree.\n */\n/* eslint-disable react/require-render-return */\n\nvar Route = _react2.default.createClass({\n displayName: 'Route',\n\n\n statics: {\n createRouteFromReactElement: _RouteUtils.createRouteFromReactElement\n },\n\n propTypes: {\n path: string,\n component: _InternalPropTypes.component,\n components: _InternalPropTypes.components,\n getComponent: func,\n getComponents: func\n },\n\n /* istanbul ignore next: sanity check */\n render: function render() {\n !false ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<Route> elements are for router configuration only and should not be rendered') : (0, _invariant2.default)(false) : void 0;\n }\n});\n\nexports.default = Route;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\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 _Actions = require('history/lib/Actions');\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _createMemoryHistory = require('./createMemoryHistory');\n\nvar _createMemoryHistory2 = _interopRequireDefault(_createMemoryHistory);\n\nvar _createTransitionManager = require('./createTransitionManager');\n\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\n\nvar _RouteUtils = require('./RouteUtils');\n\nvar _RouterUtils = require('./RouterUtils');\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\n/**\n * A high-level API to be used for server-side rendering.\n *\n * This function matches a location to a set of routes and calls\n * callback(error, redirectLocation, renderProps) when finished.\n *\n * Note: You probably don't want to use this in a browser unless you're using\n * server-side rendering with async routes.\n */\nfunction match(_ref, callback) {\n var history = _ref.history,\n routes = _ref.routes,\n location = _ref.location,\n options = _objectWithoutProperties(_ref, ['history', 'routes', 'location']);\n\n !(history || location) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'match needs a history or a location') : (0, _invariant2.default)(false) : void 0;\n\n history = history ? history : (0, _createMemoryHistory2.default)(options);\n var transitionManager = (0, _createTransitionManager2.default)(history, (0, _RouteUtils.createRoutes)(routes));\n\n if (location) {\n // Allow match({ location: '/the/path', ... })\n location = history.createLocation(location);\n } else {\n location = history.getCurrentLocation();\n }\n\n transitionManager.match(location, function (error, redirectLocation, nextState) {\n var renderProps = void 0;\n\n if (nextState) {\n var router = (0, _RouterUtils.createRouterObject)(history, transitionManager, nextState);\n renderProps = _extends({}, nextState, {\n router: router,\n matchContext: { transitionManager: transitionManager, router: router }\n });\n }\n\n callback(error, redirectLocation && history.createLocation(redirectLocation, _Actions.REPLACE), renderProps);\n });\n}\n\nexports.default = match;\nmodule.exports = exports['default'];","'use strict';\nvar strictUriEncode = require('strict-uri-encode');\nvar objectAssign = require('object-assign');\n\nfunction 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\nfunction 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\nfunction encode(value, opts) {\n\tif (opts.encode) {\n\t\treturn opts.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction 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\nexports.extract = function (str) {\n\treturn str.split('?')[1] || '';\n};\n\nexports.parse = function (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\nexports.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\tvar formatter = encoderForArrayFormat(opts);\n\n\treturn obj ? Object.keys(obj).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","'use strict';\nmodule.exports = function (str) {\n\treturn encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n\t\treturn '%' + c.charCodeAt(0).toString(16).toUpperCase();\n\t});\n};\n","'use strict';\n\nexports.__esModule = true;\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 _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _LocationUtils = require('./LocationUtils');\n\nvar _PathUtils = require('./PathUtils');\n\nvar _createHistory = require('./createHistory');\n\nvar _createHistory2 = _interopRequireDefault(_createHistory);\n\nvar _Actions = require('./Actions');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createStateStorage = function createStateStorage(entries) {\n return entries.filter(function (entry) {\n return entry.state;\n }).reduce(function (memo, entry) {\n memo[entry.key] = entry.state;\n return memo;\n }, {});\n};\n\nvar createMemoryHistory = function createMemoryHistory() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Array.isArray(options)) {\n options = { entries: options };\n } else if (typeof options === 'string') {\n options = { entries: [options] };\n }\n\n var getCurrentLocation = function getCurrentLocation() {\n var entry = entries[current];\n var path = (0, _PathUtils.createPath)(entry);\n\n var key = void 0,\n state = void 0;\n if (entry.key) {\n key = entry.key;\n state = readState(key);\n }\n\n var init = (0, _PathUtils.parsePath)(path);\n\n return (0, _LocationUtils.createLocation)(_extends({}, init, { state: state }), undefined, key);\n };\n\n var canGo = function canGo(n) {\n var index = current + n;\n return index >= 0 && index < entries.length;\n };\n\n var go = function go(n) {\n if (!n) return;\n\n if (!canGo(n)) {\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, 'Cannot go(%s) there is not enough history', n) : void 0;\n\n return;\n }\n\n current += n;\n var currentLocation = getCurrentLocation();\n\n // Change action to POP\n history.transitionTo(_extends({}, currentLocation, { action: _Actions.POP }));\n };\n\n var pushLocation = function pushLocation(location) {\n current += 1;\n\n if (current < entries.length) entries.splice(current);\n\n entries.push(location);\n\n saveState(location.key, location.state);\n };\n\n var replaceLocation = function replaceLocation(location) {\n entries[current] = location;\n saveState(location.key, location.state);\n };\n\n var history = (0, _createHistory2.default)(_extends({}, options, {\n getCurrentLocation: getCurrentLocation,\n pushLocation: pushLocation,\n replaceLocation: replaceLocation,\n go: go\n }));\n\n var _options = options,\n entries = _options.entries,\n current = _options.current;\n\n\n if (typeof entries === 'string') {\n entries = [entries];\n } else if (!Array.isArray(entries)) {\n entries = ['/'];\n }\n\n entries = entries.map(function (entry) {\n return (0, _LocationUtils.createLocation)(entry);\n });\n\n if (current == null) {\n current = entries.length - 1;\n } else {\n !(current >= 0 && current < entries.length) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Current index must be >= 0 and < %s, was %s', entries.length, current) : (0, _invariant2.default)(false) : void 0;\n }\n\n var storage = createStateStorage(entries);\n\n var saveState = function saveState(key, state) {\n return storage[key] = state;\n };\n\n var readState = function readState(key) {\n return storage[key];\n };\n\n return _extends({}, history, {\n canGo: canGo\n });\n};\n\nexports.default = createMemoryHistory;","\"use strict\";\n\nexports.__esModule = true;\nvar loopAsync = exports.loopAsync = function loopAsync(turns, work, callback) {\n var currentTurn = 0,\n isDone = false;\n var isSync = false,\n hasNext = false,\n doneArgs = void 0;\n\n var done = function done() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n isDone = true;\n\n if (isSync) {\n // Iterate instead of recursing if possible.\n doneArgs = args;\n return;\n }\n\n callback.apply(undefined, args);\n };\n\n var next = function next() {\n if (isDone) return;\n\n hasNext = true;\n\n if (isSync) return; // Iterate instead of recursing if possible.\n\n isSync = true;\n\n while (!isDone && currentTurn < turns && hasNext) {\n hasNext = false;\n work(currentTurn++, next, done);\n }\n\n isSync = false;\n\n if (isDone) {\n // This means the loop finished synchronously.\n callback.apply(undefined, doneArgs);\n return;\n }\n\n if (currentTurn >= turns && hasNext) {\n isDone = true;\n callback();\n }\n };\n\n next();\n};","'use strict';\n\nexports.__esModule = true;\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 _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _RouterContext = require('./RouterContext');\n\nvar _RouterContext2 = _interopRequireDefault(_RouterContext);\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n if (process.env.NODE_ENV !== 'production') {\n middlewares.forEach(function (middleware, index) {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(middleware.renderRouterContext || middleware.renderRouteComponent, 'The middleware specified at index ' + index + ' does not appear to be ' + 'a valid React Router middleware.') : void 0;\n });\n }\n\n var withContext = middlewares.map(function (middleware) {\n return middleware.renderRouterContext;\n }).filter(Boolean);\n var withComponent = middlewares.map(function (middleware) {\n return middleware.renderRouteComponent;\n }).filter(Boolean);\n\n var makeCreateElement = function makeCreateElement() {\n var baseCreateElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _react.createElement;\n return function (Component, props) {\n return withComponent.reduceRight(function (previous, renderRouteComponent) {\n return renderRouteComponent(previous, props);\n }, baseCreateElement(Component, props));\n };\n };\n\n return function (renderProps) {\n return withContext.reduceRight(function (previous, renderRouterContext) {\n return renderRouterContext(previous, renderProps);\n }, _react2.default.createElement(_RouterContext2.default, _extends({}, renderProps, {\n createElement: makeCreateElement(renderProps.createElement)\n })));\n };\n};\n\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _createBrowserHistory = require('history/lib/createBrowserHistory');\n\nvar _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory);\n\nvar _createRouterHistory = require('./createRouterHistory');\n\nvar _createRouterHistory2 = _interopRequireDefault(_createRouterHistory);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = (0, _createRouterHistory2.default)(_createBrowserHistory2.default);\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\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 _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _BrowserProtocol = require('./BrowserProtocol');\n\nvar BrowserProtocol = _interopRequireWildcard(_BrowserProtocol);\n\nvar _RefreshProtocol = require('./RefreshProtocol');\n\nvar RefreshProtocol = _interopRequireWildcard(_RefreshProtocol);\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _createHistory = require('./createHistory');\n\nvar _createHistory2 = _interopRequireDefault(_createHistory);\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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Creates and returns a history object that uses HTML5's history API\n * (pushState, replaceState, and the popstate event) to manage history.\n * This is the recommended method of managing history in browsers because\n * it provides the cleanest URLs.\n *\n * Note: In browsers that do not support the HTML5 history API full\n * page reloads will be used to preserve clean URLs. You can force this\n * behavior using { forceRefresh: true } in options.\n */\nvar createBrowserHistory = function createBrowserHistory() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Browser history needs a DOM') : (0, _invariant2.default)(false) : void 0;\n\n var useRefresh = options.forceRefresh || !(0, _DOMUtils.supportsHistory)();\n var Protocol = useRefresh ? RefreshProtocol : BrowserProtocol;\n\n var getUserConfirmation = Protocol.getUserConfirmation,\n getCurrentLocation = Protocol.getCurrentLocation,\n pushLocation = Protocol.pushLocation,\n replaceLocation = Protocol.replaceLocation,\n go = Protocol.go;\n\n\n var history = (0, _createHistory2.default)(_extends({\n getUserConfirmation: getUserConfirmation }, options, {\n getCurrentLocation: getCurrentLocation,\n pushLocation: pushLocation,\n replaceLocation: replaceLocation,\n go: go\n }));\n\n var listenerCount = 0,\n stopListener = void 0;\n\n var startListener = function startListener(listener, before) {\n if (++listenerCount === 1) stopListener = BrowserProtocol.startListener(history.transitionTo);\n\n var unlisten = before ? history.listenBefore(listener) : history.listen(listener);\n\n return function () {\n unlisten();\n\n if (--listenerCount === 0) stopListener();\n };\n };\n\n var listenBefore = function listenBefore(listener) {\n return startListener(listener, true);\n };\n\n var listen = function listen(listener) {\n return startListener(listener, false);\n };\n\n return _extends({}, history, {\n listenBefore: listenBefore,\n listen: listen\n });\n};\n\nexports.default = createBrowserHistory;","'use strict';\n\nexports.__esModule = true;\nexports.replaceLocation = exports.pushLocation = exports.getCurrentLocation = exports.go = exports.getUserConfirmation = undefined;\n\nvar _BrowserProtocol = require('./BrowserProtocol');\n\nObject.defineProperty(exports, 'getUserConfirmation', {\n enumerable: true,\n get: function get() {\n return _BrowserProtocol.getUserConfirmation;\n }\n});\nObject.defineProperty(exports, 'go', {\n enumerable: true,\n get: function get() {\n return _BrowserProtocol.go;\n }\n});\n\nvar _LocationUtils = require('./LocationUtils');\n\nvar _PathUtils = require('./PathUtils');\n\nvar getCurrentLocation = exports.getCurrentLocation = function getCurrentLocation() {\n return (0, _LocationUtils.createLocation)(window.location);\n};\n\nvar pushLocation = exports.pushLocation = function pushLocation(location) {\n window.location.href = (0, _PathUtils.createPath)(location);\n return false; // Don't update location\n};\n\nvar replaceLocation = exports.replaceLocation = function replaceLocation(location) {\n window.location.replace((0, _PathUtils.createPath)(location));\n return false; // Don't update location\n};","'use strict';\n\nexports.__esModule = true;\n\nvar _createHashHistory = require('history/lib/createHashHistory');\n\nvar _createHashHistory2 = _interopRequireDefault(_createHashHistory);\n\nvar _createRouterHistory = require('./createRouterHistory');\n\nvar _createRouterHistory2 = _interopRequireDefault(_createRouterHistory);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = (0, _createRouterHistory2.default)(_createHashHistory2.default);\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\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 _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _HashProtocol = require('./HashProtocol');\n\nvar HashProtocol = _interopRequireWildcard(_HashProtocol);\n\nvar _createHistory = require('./createHistory');\n\nvar _createHistory2 = _interopRequireDefault(_createHistory);\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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DefaultQueryKey = '_k';\n\nvar addLeadingSlash = function addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n};\n\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!' + path;\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substring(1) : path;\n }\n },\n noslash: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '/' ? path.substring(1) : path;\n },\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nvar createHashHistory = function createHashHistory() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Hash history needs a DOM') : (0, _invariant2.default)(false) : void 0;\n\n var queryKey = options.queryKey,\n hashType = options.hashType;\n\n\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(queryKey !== false, 'Using { queryKey: false } no longer works. Instead, just don\\'t ' + 'use location state if you don\\'t want a key in your URL query string') : void 0;\n\n if (typeof queryKey !== 'string') queryKey = DefaultQueryKey;\n\n if (hashType == null) hashType = 'slash';\n\n if (!(hashType in HashPathCoders)) {\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, 'Invalid hash type: %s', hashType) : void 0;\n\n hashType = 'slash';\n }\n\n var pathCoder = HashPathCoders[hashType];\n\n var getUserConfirmation = HashProtocol.getUserConfirmation;\n\n\n var getCurrentLocation = function getCurrentLocation() {\n return HashProtocol.getCurrentLocation(pathCoder, queryKey);\n };\n\n var pushLocation = function pushLocation(location) {\n return HashProtocol.pushLocation(location, pathCoder, queryKey);\n };\n\n var replaceLocation = function replaceLocation(location) {\n return HashProtocol.replaceLocation(location, pathCoder, queryKey);\n };\n\n var history = (0, _createHistory2.default)(_extends({\n getUserConfirmation: getUserConfirmation }, options, {\n getCurrentLocation: getCurrentLocation,\n pushLocation: pushLocation,\n replaceLocation: replaceLocation,\n go: HashProtocol.go\n }));\n\n var listenerCount = 0,\n stopListener = void 0;\n\n var startListener = function startListener(listener, before) {\n if (++listenerCount === 1) stopListener = HashProtocol.startListener(history.transitionTo, pathCoder, queryKey);\n\n var unlisten = before ? history.listenBefore(listener) : history.listen(listener);\n\n return function () {\n unlisten();\n\n if (--listenerCount === 0) stopListener();\n };\n };\n\n var listenBefore = function listenBefore(listener) {\n return startListener(listener, true);\n };\n\n var listen = function listen(listener) {\n return startListener(listener, false);\n };\n\n var goIsSupportedWithoutReload = (0, _DOMUtils.supportsGoWithoutReloadUsingHash)();\n\n var go = function go(n) {\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(goIsSupportedWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n\n history.go(n);\n };\n\n var createHref = function createHref(path) {\n return '#' + pathCoder.encodePath(history.createHref(path));\n };\n\n return _extends({}, history, {\n listenBefore: listenBefore,\n listen: listen,\n go: go,\n createHref: createHref\n });\n};\n\nexports.default = createHashHistory;","'use strict';\n\nexports.__esModule = true;\nexports.replaceLocation = exports.pushLocation = exports.startListener = exports.getCurrentLocation = exports.go = exports.getUserConfirmation = undefined;\n\nvar _BrowserProtocol = require('./BrowserProtocol');\n\nObject.defineProperty(exports, 'getUserConfirmation', {\n enumerable: true,\n get: function get() {\n return _BrowserProtocol.getUserConfirmation;\n }\n});\nObject.defineProperty(exports, 'go', {\n enumerable: true,\n get: function get() {\n return _BrowserProtocol.go;\n }\n});\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _LocationUtils = require('./LocationUtils');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _DOMStateStorage = require('./DOMStateStorage');\n\nvar _PathUtils = require('./PathUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar HashChangeEvent = 'hashchange';\n\nvar getHashPath = function getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n};\n\nvar pushHashPath = function pushHashPath(path) {\n return window.location.hash = path;\n};\n\nvar replaceHashPath = function replaceHashPath(path) {\n var hashIndex = window.location.href.indexOf('#');\n\n window.location.replace(window.location.href.slice(0, hashIndex >= 0 ? hashIndex : 0) + '#' + path);\n};\n\nvar getCurrentLocation = exports.getCurrentLocation = function getCurrentLocation(pathCoder, queryKey) {\n var path = pathCoder.decodePath(getHashPath());\n var key = (0, _PathUtils.getQueryStringValueFromPath)(path, queryKey);\n\n var state = void 0;\n if (key) {\n path = (0, _PathUtils.stripQueryStringValueFromPath)(path, queryKey);\n state = (0, _DOMStateStorage.readState)(key);\n }\n\n var init = (0, _PathUtils.parsePath)(path);\n init.state = state;\n\n return (0, _LocationUtils.createLocation)(init, undefined, key);\n};\n\nvar prevLocation = void 0;\n\nvar startListener = exports.startListener = function startListener(listener, pathCoder, queryKey) {\n var handleHashChange = function handleHashChange() {\n var path = getHashPath();\n var encodedPath = pathCoder.encodePath(path);\n\n if (path !== encodedPath) {\n // Always be sure we have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var currentLocation = getCurrentLocation(pathCoder, queryKey);\n\n if (prevLocation && currentLocation.key && prevLocation.key === currentLocation.key) return; // Ignore extraneous hashchange events\n\n prevLocation = currentLocation;\n\n listener(currentLocation);\n }\n };\n\n // Ensure the hash is encoded properly.\n var path = getHashPath();\n var encodedPath = pathCoder.encodePath(path);\n\n if (path !== encodedPath) replaceHashPath(encodedPath);\n\n (0, _DOMUtils.addEventListener)(window, HashChangeEvent, handleHashChange);\n\n return function () {\n return (0, _DOMUtils.removeEventListener)(window, HashChangeEvent, handleHashChange);\n };\n};\n\nvar updateLocation = function updateLocation(location, pathCoder, queryKey, updateHash) {\n var state = location.state,\n key = location.key;\n\n\n var path = pathCoder.encodePath((0, _PathUtils.createPath)(location));\n\n if (state !== undefined) {\n path = (0, _PathUtils.addQueryStringValueToPath)(path, queryKey, key);\n (0, _DOMStateStorage.saveState)(key, state);\n }\n\n prevLocation = location;\n\n updateHash(path);\n};\n\nvar pushLocation = exports.pushLocation = function pushLocation(location, pathCoder, queryKey) {\n return updateLocation(location, pathCoder, queryKey, function (path) {\n if (getHashPath() !== path) {\n pushHashPath(path);\n } else {\n process.env.NODE_ENV !== 'production' ? (0, _warning2.default)(false, 'You cannot PUSH the same path using hash history') : void 0;\n }\n });\n};\n\nvar replaceLocation = exports.replaceLocation = function replaceLocation(location, pathCoder, queryKey) {\n return updateLocation(location, pathCoder, queryKey, function (path) {\n if (getHashPath() !== path) replaceHashPath(path);\n });\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _FocusTrap = require('./FocusTrap');\n\nvar _FocusTrap2 = _interopRequireDefault(_FocusTrap);\n\nvar _HotKeyMapMixin = require('./HotKeyMapMixin');\n\nvar _HotKeyMapMixin2 = _interopRequireDefault(_HotKeyMapMixin);\n\nvar _isBoolean = require('lodash/isBoolean');\n\nvar _isBoolean2 = _interopRequireDefault(_isBoolean);\n\nvar _isArray = require('lodash/isArray');\n\nvar _isArray2 = _interopRequireDefault(_isArray);\n\nvar _isObject = require('lodash/isObject');\n\nvar _isObject2 = _interopRequireDefault(_isObject);\n\nvar _forEach = require('lodash/forEach');\n\nvar _forEach2 = _interopRequireDefault(_forEach);\n\nvar _isEqual = require('lodash/isEqual');\n\nvar _isEqual2 = _interopRequireDefault(_isEqual);\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\nfunction getSequencesFromMap(hotKeyMap, hotKeyName) {\n var sequences = hotKeyMap[hotKeyName];\n\n // If no sequence is found with this name we assume\n // the user is passing a hard-coded sequence as a key\n if (!sequences) {\n return [hotKeyName];\n }\n\n if ((0, _isArray2.default)(sequences)) {\n return sequences;\n }\n\n return [sequences];\n}\n\nvar HotKeys = _react2.default.createClass({\n displayName: 'HotKeys',\n\n\n mixins: [(0, _HotKeyMapMixin2.default)()],\n\n propTypes: {\n children: _react2.default.PropTypes.node,\n onFocus: _react2.default.PropTypes.func,\n onBlur: _react2.default.PropTypes.func,\n keyMap: _react2.default.PropTypes.object,\n handlers: _react2.default.PropTypes.object,\n focused: _react2.default.PropTypes.bool, // externally controlled focus\n attach: _react2.default.PropTypes.any // dom element to listen for key events\n },\n\n contextTypes: {\n hotKeyParent: _react2.default.PropTypes.any\n },\n\n childContextTypes: {\n hotKeyParent: _react2.default.PropTypes.any\n },\n\n getChildContext: function getChildContext() {\n return {\n hotKeyParent: this\n };\n },\n componentDidMount: function componentDidMount() {\n // import is here to support React's server rendering as Mousetrap immediately\n // calls itself with window and it fails in Node environment\n var Mousetrap = require('mousetrap');\n // Not optimal - imagine hundreds of this component. We need a top level\n // delegation point for mousetrap\n this.__mousetrap__ = new Mousetrap(this.props.attach || _reactDom2.default.findDOMNode(this));\n\n this.updateHotKeys(true);\n },\n componentDidUpdate: function componentDidUpdate(prevProps) {\n this.updateHotKeys(false, prevProps);\n },\n componentWillUnmount: function componentWillUnmount() {\n if (this.context.hotKeyParent) {\n this.context.hotKeyParent.childHandledSequence(null);\n }\n\n if (this.__mousetrap__) {\n this.__mousetrap__.reset();\n }\n },\n updateHotKeys: function updateHotKeys() {\n var _this = this;\n\n var force = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];\n var prevProps = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n var _props$handlers = this.props.handlers;\n var handlers = _props$handlers === undefined ? {} : _props$handlers;\n var _prevProps$handlers = prevProps.handlers;\n var prevHandlers = _prevProps$handlers === undefined ? handlers : _prevProps$handlers;\n\n // Ensure map is up-to-date to begin with\n // We will only bother continuing if the map was actually updated\n\n if (!force && (0, _isEqual2.default)(handlers, prevHandlers) && !this.updateMap()) {\n return;\n }\n\n var hotKeyMap = this.getMap();\n var sequenceHandlers = [];\n var mousetrap = this.__mousetrap__;\n\n // Group all our handlers by sequence\n (0, _forEach2.default)(handlers, function (handler, hotKey) {\n var handlerSequences = getSequencesFromMap(hotKeyMap, hotKey);\n\n // Could be optimized as every handler will get called across every bound\n // component - imagine making a node a focus point and then having hundreds!\n (0, _forEach2.default)(handlerSequences, function (sequence) {\n var action = void 0;\n\n var callback = function callback(event, sequence) {\n // Check we are actually in focus and that a child hasn't already handled this sequence\n var isFocused = (0, _isBoolean2.default)(_this.props.focused) ? _this.props.focused : _this.__isFocused__;\n\n if (isFocused && sequence !== _this.__lastChildSequence__) {\n if (_this.context.hotKeyParent) {\n _this.context.hotKeyParent.childHandledSequence(sequence);\n }\n\n return handler(event, sequence);\n }\n };\n\n if ((0, _isObject2.default)(sequence)) {\n action = sequence.action;\n sequence = sequence.sequence;\n }\n\n sequenceHandlers.push({ callback: callback, action: action, sequence: sequence });\n });\n });\n\n // Hard reset our handlers (probably could be more efficient)\n mousetrap.reset();\n (0, _forEach2.default)(sequenceHandlers, function (handler) {\n return mousetrap.bind(handler.sequence, handler.callback, handler.action);\n });\n },\n childHandledSequence: function childHandledSequence() {\n var sequence = arguments.length <= 0 || arguments[0] === undefined ? null : arguments[0];\n\n this.__lastChildSequence__ = sequence;\n\n // Traverse up any hot key parents so everyone is aware a child has handled a certain sequence\n if (this.context.hotKeyParent) {\n this.context.hotKeyParent.childHandledSequence(sequence);\n }\n },\n onFocus: function onFocus() {\n this.__isFocused__ = true;\n\n if (this.props.onFocus) {\n var _props;\n\n (_props = this.props).onFocus.apply(_props, arguments);\n }\n },\n onBlur: function onBlur() {\n this.__isFocused__ = false;\n\n if (this.props.onBlur) {\n var _props2;\n\n (_props2 = this.props).onBlur.apply(_props2, arguments);\n }\n if (this.context.hotKeyParent) {\n this.context.hotKeyParent.childHandledSequence(null);\n }\n },\n render: function render() {\n var _props3 = this.props;\n var children = _props3.children;\n var keyMap = _props3.keyMap;\n var handlers = _props3.handlers;\n var focused = _props3.focused;\n var attach = _props3.attach;\n\n var props = _objectWithoutProperties(_props3, ['children', 'keyMap', 'handlers', 'focused', 'attach']);\n\n return _react2.default.createElement(\n _FocusTrap2.default,\n _extends({}, props, { onFocus: this.onFocus, onBlur: this.onBlur }),\n children\n );\n }\n});\n\nexports.default = HotKeys;","var assignValue = require('./_assignValue'),\n copyObject = require('./_copyObject'),\n createAssigner = require('./_createAssigner'),\n isArrayLike = require('./isArrayLike'),\n isPrototype = require('./_isPrototype'),\n keys = require('./keys');\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 * 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 */\nvar 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\nmodule.exports = assign;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\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 */\nfunction 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\nmodule.exports = baseIsNative;\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","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\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 */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\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 */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\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 */\nfunction 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\nmodule.exports = createAssigner;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\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 */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\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 */\nfunction 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\nmodule.exports = overRest;\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 */\nfunction 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\nmodule.exports = apply;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\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 */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\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 */\nvar 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\nmodule.exports = baseSetToString;\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 */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\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 */\nfunction 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\nmodule.exports = shortOut;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\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 */\nfunction 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\nmodule.exports = isIterateeCall;\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 */\nfunction 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\nmodule.exports = baseTimes;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\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/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\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 */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\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 */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\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 */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar 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 identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\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 */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\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 * 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 */\nfunction 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\nmodule.exports = baseKeys;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\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 */\nfunction 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\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\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 * 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 */\nfunction 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\nmodule.exports = baseIsEqualDeep;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\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 */\nfunction 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\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\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 */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\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 */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\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 */\nfunction 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\nmodule.exports = listCacheSet;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\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 */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\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 */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\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 */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\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 */\nfunction 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\nmodule.exports = stackSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction 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// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\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 */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\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 * 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 */\nfunction 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\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\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 * 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 */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\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 */\nfunction 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\nmodule.exports = hashSet;\n","var getMapData = require('./_getMapData');\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 */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\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 */\nfunction 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\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\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 */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\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 */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\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 */\nfunction 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\nmodule.exports = mapCacheSet;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\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 */\nfunction 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// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\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 */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\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 */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\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 */\nfunction 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\nmodule.exports = arraySome;\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 */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\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 */\nfunction 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\nmodule.exports = equalByTag;\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 */\nfunction 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\nmodule.exports = mapToArray;\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 */\nfunction 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\nmodule.exports = setToArray;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\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 * 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 */\nfunction 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 // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\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\nmodule.exports = equalObjects;\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 */\nfunction 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\nmodule.exports = arrayFilter;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\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 */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n}\n\nmodule.exports = isBoolean;\n","var arrayEach = require('./_arrayEach'),\n baseEach = require('./_baseEach'),\n castFunction = require('./_castFunction'),\n isArray = require('./isArray');\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 */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\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 */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\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 */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var createBaseFor = require('./_createBaseFor');\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 */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\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 */\nfunction 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\nmodule.exports = createBaseFor;\n","var isArrayLike = require('./isArrayLike');\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 */\nfunction 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\nmodule.exports = createBaseEach;\n","var identity = require('./identity');\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 */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","/*global define:false */\n/**\n * Copyright 2012-2017 Craig Campbell\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 * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.6.3\n * @url craig.is/killing/mice\n */\n(function(window, document, undefined) {\n\n // Check if mousetrap is used inside browser, if not, return\n if (!window) {\n return;\n }\n\n /**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n *\n * @type {Object}\n */\n var _MAP = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 224: 'meta'\n };\n\n /**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n * @type {Object}\n */\n var _KEYCODE_MAP = {\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111 : '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: '\\''\n };\n\n /**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n * @type {Object}\n */\n var _SHIFT_MAP = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n '$': '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n '_': '-',\n '+': '=',\n ':': ';',\n '\\\"': '\\'',\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\'\n };\n\n /**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n *\n * @type {Object}\n */\n var _SPECIAL_ALIASES = {\n 'option': 'alt',\n 'command': 'meta',\n 'return': 'enter',\n 'escape': 'esc',\n 'plus': '+',\n 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n };\n\n /**\n * variable to store the flipped version of _MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n *\n * @type {Object|undefined}\n */\n var _REVERSE_MAP;\n\n /**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\n for (var i = 1; i < 20; ++i) {\n _MAP[111 + i] = 'f' + i;\n }\n\n /**\n * loop through to map numbers on the numeric keypad\n */\n for (i = 0; i <= 9; ++i) {\n\n // This needs to use a string cause otherwise since 0 is falsey\n // mousetrap will never fire for numpad 0 pressed as part of a keydown\n // event.\n //\n // @see https://github.com/ccampbell/mousetrap/pull/258\n _MAP[i + 96] = i.toString();\n }\n\n /**\n * cross browser add event method\n *\n * @param {Element|HTMLDocument} object\n * @param {string} type\n * @param {Function} callback\n * @returns void\n */\n function _addEvent(object, type, callback) {\n if (object.addEventListener) {\n object.addEventListener(type, callback, false);\n return;\n }\n\n object.attachEvent('on' + type, callback);\n }\n\n /**\n * takes the event and returns the key character\n *\n * @param {Event} e\n * @return {string}\n */\n function _characterFromEvent(e) {\n\n // for keypress events we should return the character as is\n if (e.type == 'keypress') {\n var character = String.fromCharCode(e.which);\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!e.shiftKey) {\n character = character.toLowerCase();\n }\n\n return character;\n }\n\n // for non keypress events the special maps are needed\n if (_MAP[e.which]) {\n return _MAP[e.which];\n }\n\n if (_KEYCODE_MAP[e.which]) {\n return _KEYCODE_MAP[e.which];\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(e.which).toLowerCase();\n }\n\n /**\n * checks if two arrays are equal\n *\n * @param {Array} modifiers1\n * @param {Array} modifiers2\n * @returns {boolean}\n */\n function _modifiersMatch(modifiers1, modifiers2) {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n }\n\n /**\n * takes a key event and figures out what the modifiers are\n *\n * @param {Event} e\n * @returns {Array}\n */\n function _eventModifiers(e) {\n var modifiers = [];\n\n if (e.shiftKey) {\n modifiers.push('shift');\n }\n\n if (e.altKey) {\n modifiers.push('alt');\n }\n\n if (e.ctrlKey) {\n modifiers.push('ctrl');\n }\n\n if (e.metaKey) {\n modifiers.push('meta');\n }\n\n return modifiers;\n }\n\n /**\n * prevents default for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n return;\n }\n\n e.returnValue = false;\n }\n\n /**\n * stops propogation for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n return;\n }\n\n e.cancelBubble = true;\n }\n\n /**\n * determines if the keycode specified is a modifier key or not\n *\n * @param {string} key\n * @returns {boolean}\n */\n function _isModifier(key) {\n return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';\n }\n\n /**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n *\n * @return {Object}\n */\n function _getReverseMap() {\n if (!_REVERSE_MAP) {\n _REVERSE_MAP = {};\n for (var key in _MAP) {\n\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (key > 95 && key < 112) {\n continue;\n }\n\n if (_MAP.hasOwnProperty(key)) {\n _REVERSE_MAP[_MAP[key]] = key;\n }\n }\n }\n return _REVERSE_MAP;\n }\n\n /**\n * picks the best action based on the key combination\n *\n * @param {string} key - character for key\n * @param {Array} modifiers\n * @param {string=} action passed in\n */\n function _pickBestAction(key, modifiers, action) {\n\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = _getReverseMap()[key] ? 'keydown' : 'keypress';\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action == 'keypress' && modifiers.length) {\n action = 'keydown';\n }\n\n return action;\n }\n\n /**\n * Converts from a string key combination to an array\n *\n * @param {string} combination like \"command+shift+l\"\n * @return {Array}\n */\n function _keysFromString(combination) {\n if (combination === '+') {\n return ['+'];\n }\n\n combination = combination.replace(/\\+{2}/g, '+plus');\n return combination.split('+');\n }\n\n /**\n * Gets info for a specific key combination\n *\n * @param {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n * @param {string=} action\n * @returns {Object}\n */\n function _getKeyInfo(combination, action) {\n var keys;\n var key;\n var i;\n var modifiers = [];\n\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = _keysFromString(combination);\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n\n // normalize key names\n if (_SPECIAL_ALIASES[key]) {\n key = _SPECIAL_ALIASES[key];\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action != 'keypress' && _SHIFT_MAP[key]) {\n key = _SHIFT_MAP[key];\n modifiers.push('shift');\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (_isModifier(key)) {\n modifiers.push(key);\n }\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = _pickBestAction(key, modifiers, action);\n\n return {\n key: key,\n modifiers: modifiers,\n action: action\n };\n }\n\n function _belongsTo(element, ancestor) {\n if (element === null || element === document) {\n return false;\n }\n\n if (element === ancestor) {\n return true;\n }\n\n return _belongsTo(element.parentNode, ancestor);\n }\n\n function Mousetrap(targetElement) {\n var self = this;\n\n targetElement = targetElement || document;\n\n if (!(self instanceof Mousetrap)) {\n return new Mousetrap(targetElement);\n }\n\n /**\n * element to attach key events to\n *\n * @type {Element}\n */\n self.target = targetElement;\n\n /**\n * a list of all the callbacks setup via Mousetrap.bind()\n *\n * @type {Object}\n */\n self._callbacks = {};\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n *\n * @type {Object}\n */\n self._directMap = {};\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n *\n * @type {Object}\n */\n var _sequenceLevels = {};\n\n /**\n * variable to store the setTimeout call\n *\n * @type {null|number}\n */\n var _resetTimer;\n\n /**\n * temporary state where we will ignore the next keyup\n *\n * @type {boolean|string}\n */\n var _ignoreNextKeyup = false;\n\n /**\n * temporary state where we will ignore the next keypress\n *\n * @type {boolean}\n */\n var _ignoreNextKeypress = false;\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n *\n * @type {boolean|string}\n */\n var _nextExpectedAction = false;\n\n /**\n * resets all sequence counters except for the ones passed in\n *\n * @param {Object} doNotReset\n * @returns void\n */\n function _resetSequences(doNotReset) {\n doNotReset = doNotReset || {};\n\n var activeSequences = false,\n key;\n\n for (key in _sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true;\n continue;\n }\n _sequenceLevels[key] = 0;\n }\n\n if (!activeSequences) {\n _nextExpectedAction = false;\n }\n }\n\n /**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event|Object} e\n * @param {string=} sequenceName - name of the sequence we are looking for\n * @param {string=} combination\n * @param {number=} level\n * @returns {Array}\n */\n function _getMatches(character, modifiers, e, sequenceName, combination, level) {\n var i;\n var callback;\n var matches = [];\n var action = e.type;\n\n // if there are no events related to this keycode\n if (!self._callbacks[character]) {\n return [];\n }\n\n // if a modifier key is coming up on its own we should allow it\n if (action == 'keyup' && _isModifier(character)) {\n modifiers = [character];\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (i = 0; i < self._callbacks[character].length; ++i) {\n callback = self._callbacks[character][i];\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {\n continue;\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action != callback.action) {\n continue;\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {\n\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n var deleteCombo = !sequenceName && callback.combo == combination;\n var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;\n if (deleteCombo || deleteSequence) {\n self._callbacks[character].splice(i, 1);\n }\n\n matches.push(callback);\n }\n }\n\n return matches;\n }\n\n /**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param {Function} callback\n * @param {Event} e\n * @returns void\n */\n function _fireCallback(callback, e, combo, sequence) {\n\n // if this event should not happen stop here\n if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n return;\n }\n\n if (callback(e, combo) === false) {\n _preventDefault(e);\n _stopPropagation(e);\n }\n }\n\n /**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\n self._handleKey = function(character, modifiers, e) {\n var callbacks = _getMatches(character, modifiers, e);\n var i;\n var doNotReset = {};\n var maxLevel = 0;\n var processedSequenceCallback = false;\n\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].seq) {\n maxLevel = Math.max(maxLevel, callbacks[i].level);\n }\n }\n\n // loop through matching callbacks for this key event\n for (i = 0; i < callbacks.length; ++i) {\n\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n if (callbacks[i].seq) {\n\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the _resetSequences call\n if (callbacks[i].level != maxLevel) {\n continue;\n }\n\n processedSequenceCallback = true;\n\n // keep a list of which sequences were matches for later\n doNotReset[callbacks[i].seq] = 1;\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);\n continue;\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;\n if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {\n _resetSequences(doNotReset);\n }\n\n _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';\n };\n\n /**\n * handles a keydown event\n *\n * @param {Event} e\n * @returns void\n */\n function _handleKeyEvent(e) {\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof e.which !== 'number') {\n e.which = e.keyCode;\n }\n\n var character = _characterFromEvent(e);\n\n // no character found then stop\n if (!character) {\n return;\n }\n\n // need to use === for the character check because the character can be 0\n if (e.type == 'keyup' && _ignoreNextKeyup === character) {\n _ignoreNextKeyup = false;\n return;\n }\n\n self.handleKey(character, _eventModifiers(e), e);\n }\n\n /**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n *\n * @returns void\n */\n function _resetSequenceTimer() {\n clearTimeout(_resetTimer);\n _resetTimer = setTimeout(_resetSequences, 1000);\n }\n\n /**\n * binds a key sequence to an event\n *\n * @param {string} combo - combo specified in bind call\n * @param {Array} keys\n * @param {Function} callback\n * @param {string=} action\n * @returns void\n */\n function _bindSequence(combo, keys, callback, action) {\n\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n _sequenceLevels[combo] = 0;\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n *\n * @param {string} nextAction\n * @returns {Function}\n */\n function _increaseSequence(nextAction) {\n return function() {\n _nextExpectedAction = nextAction;\n ++_sequenceLevels[combo];\n _resetSequenceTimer();\n };\n }\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n *\n * @param {Event} e\n * @returns void\n */\n function _callbackAndReset(e) {\n _fireCallback(callback, e, combo);\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n _ignoreNextKeyup = _characterFromEvent(e);\n }\n\n // weird race condition if a sequence ends with the key\n // another sequence begins with\n setTimeout(_resetSequences, 10);\n }\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (var i = 0; i < keys.length; ++i) {\n var isFinal = i + 1 === keys.length;\n var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);\n _bindSingle(keys[i], wrappedCallback, action, combo, i);\n }\n }\n\n /**\n * binds a single keyboard combination\n *\n * @param {string} combination\n * @param {Function} callback\n * @param {string=} action\n * @param {string=} sequenceName - name of sequence if part of sequence\n * @param {number=} level - what part of the sequence the command is\n * @returns void\n */\n function _bindSingle(combination, callback, action, sequenceName, level) {\n\n // store a direct mapped reference for use with Mousetrap.trigger\n self._directMap[combination + ':' + action] = callback;\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ');\n\n var sequence = combination.split(' ');\n var info;\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n _bindSequence(combination, sequence, callback, action);\n return;\n }\n\n info = _getKeyInfo(combination, action);\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n self._callbacks[info.key] = self._callbacks[info.key] || [];\n\n // remove an existing match if there is one\n _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination\n });\n }\n\n /**\n * binds multiple combinations to the same callback\n *\n * @param {Array} combinations\n * @param {Function} callback\n * @param {string|undefined} action\n * @returns void\n */\n self._bindMultiple = function(combinations, callback, action) {\n for (var i = 0; i < combinations.length; ++i) {\n _bindSingle(combinations[i], callback, action);\n }\n };\n\n // start!\n _addEvent(targetElement, 'keypress', _handleKeyEvent);\n _addEvent(targetElement, 'keydown', _handleKeyEvent);\n _addEvent(targetElement, 'keyup', _handleKeyEvent);\n }\n\n /**\n * binds an event to mousetrap\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n *\n * @param {string|Array} keys\n * @param {Function} callback\n * @param {string=} action - 'keypress', 'keydown', or 'keyup'\n * @returns void\n */\n Mousetrap.prototype.bind = function(keys, callback, action) {\n var self = this;\n keys = keys instanceof Array ? keys : [keys];\n self._bindMultiple.call(self, keys, callback, action);\n return self;\n };\n\n /**\n * unbinds an event to mousetrap\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * _directMap dict.\n *\n * TODO: actually remove this from the _callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n *\n * @param {string|Array} keys\n * @param {string} action\n * @returns void\n */\n Mousetrap.prototype.unbind = function(keys, action) {\n var self = this;\n return self.bind.call(self, keys, function() {}, action);\n };\n\n /**\n * triggers an event that has already been bound\n *\n * @param {string} keys\n * @param {string=} action\n * @returns void\n */\n Mousetrap.prototype.trigger = function(keys, action) {\n var self = this;\n if (self._directMap[keys + ':' + action]) {\n self._directMap[keys + ':' + action]({}, keys);\n }\n return self;\n };\n\n /**\n * resets the library back to its initial state. this is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n *\n * @returns void\n */\n Mousetrap.prototype.reset = function() {\n var self = this;\n self._callbacks = {};\n self._directMap = {};\n return self;\n };\n\n /**\n * should we stop this event before firing off callbacks\n *\n * @param {Event} e\n * @param {Element} element\n * @return {boolean}\n */\n Mousetrap.prototype.stopCallback = function(e, element) {\n var self = this;\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n if (_belongsTo(element, self.target)) {\n return false;\n }\n\n // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,\n // not the initial event target in the shadow tree. Note that not all events cross the\n // shadow boundary.\n // For shadow trees with `mode: 'open'`, the initial event target is the first element in\n // the event’s composed path. For shadow trees with `mode: 'closed'`, the initial event\n // target cannot be obtained.\n if ('composedPath' in e && typeof e.composedPath === 'function') {\n // For open shadow trees, update `element` so that the following check works.\n var initialEventTarget = e.composedPath()[0];\n if (initialEventTarget !== e.target) {\n element = initialEventTarget;\n }\n }\n\n // stop for input, select, and textarea\n return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;\n };\n\n /**\n * exposes _handleKey publicly so it can be overwritten by extensions\n */\n Mousetrap.prototype.handleKey = function() {\n var self = this;\n return self._handleKey.apply(self, arguments);\n };\n\n /**\n * allow custom key mappings\n */\n Mousetrap.addKeycodes = function(object) {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n _MAP[key] = object[key];\n }\n }\n _REVERSE_MAP = null;\n };\n\n /**\n * Init the global mousetrap functions\n *\n * This method is needed to allow the global mousetrap functions to work\n * now that mousetrap is a constructor function.\n */\n Mousetrap.init = function() {\n var documentMousetrap = Mousetrap(document);\n for (var method in documentMousetrap) {\n if (method.charAt(0) !== '_') {\n Mousetrap[method] = (function(method) {\n return function() {\n return documentMousetrap[method].apply(documentMousetrap, arguments);\n };\n } (method));\n }\n }\n };\n\n Mousetrap.init();\n\n // expose mousetrap to the global object\n window.Mousetrap = Mousetrap;\n\n // expose as a common js module\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Mousetrap;\n }\n\n // expose mousetrap as an AMD module\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return Mousetrap;\n });\n }\n}) (typeof window !== 'undefined' ? window : null, typeof window !== 'undefined' ? document : null);\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","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\nvar shallowEqual = _interopDefault(require('shallowequal'));\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 _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\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 if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\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\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(SideEffect, _Component);\n\n function SideEffect() {\n return _Component.apply(this, arguments) || this;\n }\n\n // Try to use displayName of wrapped component\n // Expose canUseDOM so tests can monkeypatch it\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !shallowEqual(nextProps, this.props);\n };\n\n _proto.componentWillMount = function componentWillMount() {\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 React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.Component);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;\n","//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n if (ret !== void 0) {\n return !!ret;\n }\n\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n // Test for A's keys different from B.\n for (var idx = 0; idx < keysA.length; idx++) {\n var key = keysA[idx];\n\n if (!bHasOwnProperty(key)) {\n return false;\n }\n\n var valueA = objA[key];\n var valueB = objB[key];\n\n ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n if (ret === false || (ret === void 0 && valueA !== valueB)) {\n return false;\n }\n }\n\n return true;\n};\n","var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob:\n 'FileReader' in self &&\n 'Blob' in self &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\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)) {\n throw new TypeError('Invalid character in header field 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 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 return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\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 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\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 preProcessedHeaders.split(/\\r?\\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 (!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 = 'statusText' in options ? options.statusText : 'OK'\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 = self.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 resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.onabort = function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }\n\n xhr.open(request.method, 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 && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\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 (!self.fetch) {\n self.fetch = fetch\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n}\n","'use strict';\n\n\nvar loader = require('./js-yaml/loader');\nvar dumper = require('./js-yaml/dumper');\n\n\nfunction deprecated(name) {\n return function () {\n throw new Error('Function ' + name + ' is deprecated and cannot be used.');\n };\n}\n\n\nmodule.exports.Type = require('./js-yaml/type');\nmodule.exports.Schema = require('./js-yaml/schema');\nmodule.exports.FAILSAFE_SCHEMA = require('./js-yaml/schema/failsafe');\nmodule.exports.JSON_SCHEMA = require('./js-yaml/schema/json');\nmodule.exports.CORE_SCHEMA = require('./js-yaml/schema/core');\nmodule.exports.DEFAULT_SAFE_SCHEMA = require('./js-yaml/schema/default_safe');\nmodule.exports.DEFAULT_FULL_SCHEMA = require('./js-yaml/schema/default_full');\nmodule.exports.load = loader.load;\nmodule.exports.loadAll = loader.loadAll;\nmodule.exports.safeLoad = loader.safeLoad;\nmodule.exports.safeLoadAll = loader.safeLoadAll;\nmodule.exports.dump = dumper.dump;\nmodule.exports.safeDump = dumper.safeDump;\nmodule.exports.YAMLException = require('./js-yaml/exception');\n\n// Deprecated schema names from JS-YAML 2.0.x\nmodule.exports.MINIMAL_SCHEMA = require('./js-yaml/schema/failsafe');\nmodule.exports.SAFE_SCHEMA = require('./js-yaml/schema/default_safe');\nmodule.exports.DEFAULT_SCHEMA = require('./js-yaml/schema/default_full');\n\n// Deprecated functions from JS-YAML 1.x.x\nmodule.exports.scan = deprecated('scan');\nmodule.exports.parse = deprecated('parse');\nmodule.exports.compose = deprecated('compose');\nmodule.exports.addConstructor = deprecated('addConstructor');\n","'use strict';\n\n/*eslint-disable max-len,no-use-before-define*/\n\nvar common = require('./common');\nvar YAMLException = require('./exception');\nvar Mark = require('./mark');\nvar DEFAULT_SAFE_SCHEMA = require('./schema/default_safe');\nvar DEFAULT_FULL_SCHEMA = require('./schema/default_full');\n\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\n\n\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction is_EOL(c) {\n return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n return (c === 0x09/* Tab */) ||\n (c === 0x20/* Space */) ||\n (c === 0x0A/* LF */) ||\n (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n return c === 0x2C/* , */ ||\n c === 0x5B/* [ */ ||\n c === 0x5D/* ] */ ||\n c === 0x7B/* { */ ||\n c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n var lc;\n\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n /*eslint-disable no-bitwise*/\n lc = c | 0x20;\n\n if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {\n return lc - 0x61 + 10;\n }\n\n return -1;\n}\n\nfunction escapedHexLen(c) {\n if (c === 0x78/* x */) { return 2; }\n if (c === 0x75/* u */) { return 4; }\n if (c === 0x55/* U */) { return 8; }\n return 0;\n}\n\nfunction fromDecimalCode(c) {\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n /* eslint-disable indent */\n return (c === 0x30/* 0 */) ? '\\x00' :\n (c === 0x61/* a */) ? '\\x07' :\n (c === 0x62/* b */) ? '\\x08' :\n (c === 0x74/* t */) ? '\\x09' :\n (c === 0x09/* Tab */) ? '\\x09' :\n (c === 0x6E/* n */) ? '\\x0A' :\n (c === 0x76/* v */) ? '\\x0B' :\n (c === 0x66/* f */) ? '\\x0C' :\n (c === 0x72/* r */) ? '\\x0D' :\n (c === 0x65/* e */) ? '\\x1B' :\n (c === 0x20/* Space */) ? ' ' :\n (c === 0x22/* \" */) ? '\\x22' :\n (c === 0x2F/* / */) ? '/' :\n (c === 0x5C/* \\ */) ? '\\x5C' :\n (c === 0x4E/* N */) ? '\\x85' :\n (c === 0x5F/* _ */) ? '\\xA0' :\n (c === 0x4C/* L */) ? '\\u2028' :\n (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n if (c <= 0xFFFF) {\n return String.fromCharCode(c);\n }\n // Encode UTF-16 surrogate pair\n // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n return String.fromCharCode(\n ((c - 0x010000) >> 10) + 0xD800,\n ((c - 0x010000) & 0x03FF) + 0xDC00\n );\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State(input, options) {\n this.input = input;\n\n this.filename = options['filename'] || null;\n this.schema = options['schema'] || DEFAULT_FULL_SCHEMA;\n this.onWarning = options['onWarning'] || null;\n this.legacy = options['legacy'] || false;\n this.json = options['json'] || false;\n this.listener = options['listener'] || null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n\n this.documents = [];\n\n /*\n this.version;\n this.checkLineBreaks;\n this.tagMap;\n this.anchorMap;\n this.tag;\n this.anchor;\n this.kind;\n this.result;*/\n\n}\n\n\nfunction generateError(state, message) {\n return new YAMLException(\n message,\n new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart)));\n}\n\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n\n\nvar directiveHandlers = {\n\n YAML: function handleYamlDirective(state, name, args) {\n\n var match, major, minor;\n\n if (state.version !== null) {\n throwError(state, 'duplication of %YAML directive');\n }\n\n if (args.length !== 1) {\n throwError(state, 'YAML directive accepts exactly one argument');\n }\n\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n if (match === null) {\n throwError(state, 'ill-formed argument of the YAML directive');\n }\n\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n\n if (major !== 1) {\n throwError(state, 'unacceptable YAML version of the document');\n }\n\n state.version = args[0];\n state.checkLineBreaks = (minor < 2);\n\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, 'unsupported YAML version of the document');\n }\n },\n\n TAG: function handleTagDirective(state, name, args) {\n\n var handle, prefix;\n\n if (args.length !== 2) {\n throwError(state, 'TAG directive accepts exactly two arguments');\n }\n\n handle = args[0];\n prefix = args[1];\n\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n }\n\n if (_hasOwnProperty.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n }\n\n state.tagMap[handle] = prefix;\n }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n\n if (start < end) {\n _result = state.input.slice(start, end);\n\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 0x09 ||\n (0x20 <= _character && _character <= 0x10FFFF))) {\n throwError(state, 'expected valid JSON character');\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, 'the stream contains non-printable characters');\n }\n\n state.result += _result;\n }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n\n if (!common.isObject(source)) {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n }\n\n sourceKeys = Object.keys(source);\n\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n\n if (!_hasOwnProperty.call(destination, key)) {\n destination[key] = source[key];\n overridableKeys[key] = true;\n }\n }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) {\n var index, quantity;\n\n // The output is a plain object here, so keys can only be strings.\n // We need to convert keyNode to a string, but doing so can hang the process\n // (deeply nested arrays that explode exponentially using aliases).\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, 'nested arrays are not supported inside keys');\n }\n\n if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {\n keyNode[index] = '[object Object]';\n }\n }\n }\n\n // Avoid code execution in load() via toString property\n // (still use its own toString for arrays, timestamps,\n // and whatever user schema extensions happen to have @@toStringTag)\n if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {\n keyNode = '[object Object]';\n }\n\n\n keyNode = String(keyNode);\n\n if (_result === null) {\n _result = {};\n }\n\n if (keyTag === 'tag:yaml.org,2002:merge') {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json &&\n !_hasOwnProperty.call(overridableKeys, keyNode) &&\n _hasOwnProperty.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.position = startPos || state.position;\n throwError(state, 'duplicated mapping key');\n }\n _result[keyNode] = valueNode;\n delete overridableKeys[keyNode];\n }\n\n return _result;\n}\n\nfunction readLineBreak(state) {\n var ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x0A/* LF */) {\n state.position++;\n } else if (ch === 0x0D/* CR */) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n state.position++;\n }\n } else {\n throwError(state, 'a line break is expected');\n }\n\n state.line += 1;\n state.lineStart = state.position;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0,\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (allowComments && ch === 0x23/* # */) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n }\n\n if (is_EOL(ch)) {\n readLineBreak(state);\n\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n\n while (ch === 0x20/* Space */) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, 'deficient indentation');\n }\n\n return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n var _position = state.position,\n ch;\n\n ch = state.input.charCodeAt(_position);\n\n // Condition state.position === state.lineStart is tested\n // in parent on each call, for efficiency. No needs to test here again.\n if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n ch === state.input.charCodeAt(_position + 1) &&\n ch === state.input.charCodeAt(_position + 2)) {\n\n _position += 3;\n\n ch = state.input.charCodeAt(_position);\n\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += ' ';\n } else if (count > 1) {\n state.result += common.repeat('\\n', count - 1);\n }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding,\n following,\n captureStart,\n captureEnd,\n hasPendingContent,\n _line,\n _lineStart,\n _lineIndent,\n _kind = state.kind,\n _result = state.result,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (is_WS_OR_EOL(ch) ||\n is_FLOW_INDICATOR(ch) ||\n ch === 0x23/* # */ ||\n ch === 0x26/* & */ ||\n ch === 0x2A/* * */ ||\n ch === 0x21/* ! */ ||\n ch === 0x7C/* | */ ||\n ch === 0x3E/* > */ ||\n ch === 0x27/* ' */ ||\n ch === 0x22/* \" */ ||\n ch === 0x25/* % */ ||\n ch === 0x40/* @ */ ||\n ch === 0x60/* ` */) {\n return false;\n }\n\n if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n\n state.kind = 'scalar';\n state.result = '';\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n\n while (ch !== 0) {\n if (ch === 0x3A/* : */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n\n } else if (ch === 0x23/* # */) {\n preceding = state.input.charCodeAt(state.position - 1);\n\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n\n } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, captureEnd, false);\n\n if (state.result) {\n return true;\n }\n\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch,\n captureStart, captureEnd;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x27/* ' */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x27/* ' */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x27/* ' */) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart,\n captureEnd,\n hexLength,\n hexResult,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x22/* \" */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x22/* \" */) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n\n } else if (ch === 0x5C/* \\ */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n\n // TODO: rework to inline fn with no type cast?\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n\n } else {\n throwError(state, 'expected hexadecimal character');\n }\n }\n\n state.result += charFromCodepoint(hexResult);\n\n state.position++;\n\n } else {\n throwError(state, 'unknown escape sequence');\n }\n\n captureStart = captureEnd = state.position;\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true,\n _line,\n _tag = state.tag,\n _result,\n _anchor = state.anchor,\n following,\n terminator,\n isPair,\n isExplicitPair,\n isMapping,\n overridableKeys = {},\n keyNode,\n keyTag,\n valueNode,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x5B/* [ */) {\n terminator = 0x5D;/* ] */\n isMapping = false;\n _result = [];\n } else if (ch === 0x7B/* { */) {\n terminator = 0x7D;/* } */\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? 'mapping' : 'sequence';\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, 'missed comma between flow collection entries');\n }\n\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n\n if (ch === 0x3F/* ? */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode));\n } else {\n _result.push(keyNode);\n }\n\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x2C/* , */) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart,\n folding,\n chomping = CHOMPING_CLIP,\n didReadContent = false,\n detectedIndent = false,\n textIndent = nodeIndent,\n emptyLines = 0,\n atMoreIndented = false,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x7C/* | */) {\n folding = false;\n } else if (ch === 0x3E/* > */) {\n folding = true;\n } else {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n if (CHOMPING_CLIP === chomping) {\n chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, 'repeat of a chomping mode identifier');\n }\n\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, 'repeat of an indentation width identifier');\n }\n\n } else {\n break;\n }\n }\n\n if (is_WHITE_SPACE(ch)) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (is_WHITE_SPACE(ch));\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (!is_EOL(ch) && (ch !== 0));\n }\n }\n\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n\n ch = state.input.charCodeAt(state.position);\n\n while ((!detectedIndent || state.lineIndent < textIndent) &&\n (ch === 0x20/* Space */)) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n\n // End of the scalar.\n if (state.lineIndent < textIndent) {\n\n // Perform the chomping.\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) { // i.e. only if the scalar is not empty.\n state.result += '\\n';\n }\n }\n\n // Break this `while` cycle and go to the funciton's epilogue.\n break;\n }\n\n // Folded style: use fancy rules to handle line breaks.\n if (folding) {\n\n // Lines starting with white space characters (more-indented lines) are not folded.\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n // except for the first content line (cf. Example 8.1)\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n\n // End of more-indented block.\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat('\\n', emptyLines + 1);\n\n // Just one line break - perceive as the same line.\n } else if (emptyLines === 0) {\n if (didReadContent) { // i.e. only if we have already read some scalar content.\n state.result += ' ';\n }\n\n // Several line breaks - perceive as different lines.\n } else {\n state.result += common.repeat('\\n', emptyLines);\n }\n\n // Literal style: just add exact number of line breaks between content lines.\n } else {\n // Keep all line breaks except the header line break.\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n }\n\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n\n while (!is_EOL(ch) && (ch !== 0)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, state.position, false);\n }\n\n return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n var _line,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = [],\n following,\n detected = false,\n ch;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n\n if (ch !== 0x2D/* - */) {\n break;\n }\n\n following = state.input.charCodeAt(state.position + 1);\n\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n\n detected = true;\n state.position++;\n\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a sequence entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'sequence';\n state.result = _result;\n return true;\n }\n return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following,\n allowCompact,\n _line,\n _pos,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = {},\n overridableKeys = {},\n keyTag = null,\n keyNode = null,\n valueNode = null,\n atExplicitKey = false,\n detected = false,\n ch;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line; // Save the current line.\n _pos = state.position;\n\n //\n // Explicit notation case. There are two separate blocks:\n // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n //\n if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n if (ch === 0x3F/* ? */) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n\n } else if (atExplicitKey) {\n // i.e. 0x3A/* : */ === character after the explicit key.\n atExplicitKey = false;\n allowCompact = true;\n\n } else {\n throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');\n }\n\n state.position += 1;\n ch = following;\n\n //\n // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n //\n } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x3A/* : */) {\n ch = state.input.charCodeAt(++state.position);\n\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n }\n\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n\n } else if (detected) {\n throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else if (detected) {\n throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else {\n break; // Reading is done. Go to the epilogue.\n }\n\n //\n // Common reading code for both explicit and implicit notations.\n //\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos);\n keyTag = keyNode = valueNode = null;\n }\n\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n\n if (state.lineIndent > nodeIndent && (ch !== 0)) {\n throwError(state, 'bad indentation of a mapping entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n //\n // Epilogue.\n //\n\n // Special case: last mapping's node contains only the key in explicit notation.\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n }\n\n // Expose the resulting mapping.\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'mapping';\n state.result = _result;\n }\n\n return detected;\n}\n\nfunction readTagProperty(state) {\n var _position,\n isVerbatim = false,\n isNamed = false,\n tagHandle,\n tagName,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x21/* ! */) return false;\n\n if (state.tag !== null) {\n throwError(state, 'duplication of a tag property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x3C/* < */) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n\n } else if (ch === 0x21/* ! */) {\n isNamed = true;\n tagHandle = '!!';\n ch = state.input.charCodeAt(++state.position);\n\n } else {\n tagHandle = '!';\n }\n\n _position = state.position;\n\n if (isVerbatim) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && ch !== 0x3E/* > */);\n\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, 'unexpected end of the stream within a verbatim tag');\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n if (ch === 0x21/* ! */) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, 'named tag handle cannot contain such characters');\n }\n\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, 'tag suffix cannot contain exclamation marks');\n }\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n tagName = state.input.slice(_position, state.position);\n\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, 'tag suffix cannot contain flow indicator characters');\n }\n }\n\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, 'tag name cannot contain such characters: ' + tagName);\n }\n\n if (isVerbatim) {\n state.tag = tagName;\n\n } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n\n } else if (tagHandle === '!') {\n state.tag = '!' + tagName;\n\n } else if (tagHandle === '!!') {\n state.tag = 'tag:yaml.org,2002:' + tagName;\n\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n\n return true;\n}\n\nfunction readAnchorProperty(state) {\n var _position,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x26/* & */) return false;\n\n if (state.anchor !== null) {\n throwError(state, 'duplication of an anchor property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an anchor node must contain at least one character');\n }\n\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n\nfunction readAlias(state) {\n var _position, alias,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x2A/* * */) return false;\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an alias node must contain at least one character');\n }\n\n alias = state.input.slice(_position, state.position);\n\n if (!state.anchorMap.hasOwnProperty(alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles,\n allowBlockScalars,\n allowBlockCollections,\n indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent\n atNewLine = false,\n hasContent = false,\n typeIndex,\n typeQuantity,\n type,\n flowIndent,\n blockIndent;\n\n if (state.listener !== null) {\n state.listener('open', state);\n }\n\n state.tag = null;\n state.anchor = null;\n state.kind = null;\n state.result = null;\n\n allowBlockStyles = allowBlockScalars = allowBlockCollections =\n CONTEXT_BLOCK_OUT === nodeContext ||\n CONTEXT_BLOCK_IN === nodeContext;\n\n if (allowToSeek) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n\n blockIndent = state.position - state.lineStart;\n\n if (indentStatus === 1) {\n if (allowBlockCollections &&\n (readBlockSequence(state, blockIndent) ||\n readBlockMapping(state, blockIndent, flowIndent)) ||\n readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n readSingleQuotedScalar(state, flowIndent) ||\n readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n\n } else if (readAlias(state)) {\n hasContent = true;\n\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, 'alias node should not have any properties');\n }\n\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n\n if (state.tag === null) {\n state.tag = '?';\n }\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n // Special case: block sequences are allowed to have same indentation level as the parent.\n // http://www.yaml.org/spec/1.2/spec.html#id2799784\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n\n if (state.tag !== null && state.tag !== '!') {\n if (state.tag === '?') {\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type = state.implicitTypes[typeIndex];\n\n // Implicit resolving is not allowed for non-scalar types, and '?'\n // non-specific tag is only assigned to plain scalars. So, it isn't\n // needed to check for 'kind' conformity.\n\n if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n state.result = type.construct(state.result);\n state.tag = type.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) {\n type = state.typeMap[state.kind || 'fallback'][state.tag];\n\n if (state.result !== null && type.kind !== state.kind) {\n throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n }\n\n if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched\n throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n } else {\n state.result = type.construct(state.result);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else {\n throwError(state, 'unknown tag !<' + state.tag + '>');\n }\n }\n\n if (state.listener !== null) {\n state.listener('close', state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n var documentStart = state.position,\n _position,\n directiveName,\n directiveArgs,\n hasDirectives = false,\n ch;\n\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = {};\n state.anchorMap = {};\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n break;\n }\n\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n\n if (directiveName.length < 1) {\n throwError(state, 'directive name must not be less than one character in length');\n }\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && !is_EOL(ch));\n break;\n }\n\n if (is_EOL(ch)) break;\n\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n\n if (ch !== 0) readLineBreak(state);\n\n if (_hasOwnProperty.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n\n skipSeparationSpace(state, true, -1);\n\n if (state.lineIndent === 0 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n\n } else if (hasDirectives) {\n throwError(state, 'directives end mark is expected');\n }\n\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n\n if (state.checkLineBreaks &&\n PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n }\n\n state.documents.push(state.result);\n\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n\n if (state.position < (state.length - 1)) {\n throwError(state, 'end of the stream or a document separator is expected');\n } else {\n return;\n }\n}\n\n\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n\n if (input.length !== 0) {\n\n // Add tailing `\\n` if not exists\n if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n input += '\\n';\n }\n\n // Strip BOM\n if (input.charCodeAt(0) === 0xFEFF) {\n input = input.slice(1);\n }\n }\n\n var state = new State(input, options);\n\n // Use 0 as string terminator. That significantly simplifies bounds check.\n state.input += '\\0';\n\n while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n state.lineIndent += 1;\n state.position += 1;\n }\n\n while (state.position < (state.length - 1)) {\n readDocument(state);\n }\n\n return state.documents;\n}\n\n\nfunction loadAll(input, iterator, options) {\n var documents = loadDocuments(input, options), index, length;\n\n if (typeof iterator !== 'function') {\n return documents;\n }\n\n for (index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n\n\nfunction load(input, options) {\n var documents = loadDocuments(input, options);\n\n if (documents.length === 0) {\n /*eslint-disable no-undefined*/\n return undefined;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new YAMLException('expected a single document in the stream, but found more');\n}\n\n\nfunction safeLoadAll(input, output, options) {\n if (typeof output === 'function') {\n loadAll(input, output, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n } else {\n return loadAll(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n }\n}\n\n\nfunction safeLoad(input, options) {\n return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n}\n\n\nmodule.exports.loadAll = loadAll;\nmodule.exports.load = load;\nmodule.exports.safeLoadAll = safeLoadAll;\nmodule.exports.safeLoad = safeLoad;\n","'use strict';\n\n\nvar common = require('./common');\n\n\nfunction Mark(name, buffer, position, line, column) {\n this.name = name;\n this.buffer = buffer;\n this.position = position;\n this.line = line;\n this.column = column;\n}\n\n\nMark.prototype.getSnippet = function getSnippet(indent, maxLength) {\n var head, start, tail, end, snippet;\n\n if (!this.buffer) return null;\n\n indent = indent || 4;\n maxLength = maxLength || 75;\n\n head = '';\n start = this.position;\n\n while (start > 0 && '\\x00\\r\\n\\x85\\u2028\\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) {\n start -= 1;\n if (this.position - start > (maxLength / 2 - 1)) {\n head = ' ... ';\n start += 5;\n break;\n }\n }\n\n tail = '';\n end = this.position;\n\n while (end < this.buffer.length && '\\x00\\r\\n\\x85\\u2028\\u2029'.indexOf(this.buffer.charAt(end)) === -1) {\n end += 1;\n if (end - this.position > (maxLength / 2 - 1)) {\n tail = ' ... ';\n end -= 5;\n break;\n }\n }\n\n snippet = this.buffer.slice(start, end);\n\n return common.repeat(' ', indent) + head + snippet + tail + '\\n' +\n common.repeat(' ', indent + this.position - start + head.length) + '^';\n};\n\n\nMark.prototype.toString = function toString(compact) {\n var snippet, where = '';\n\n if (this.name) {\n where += 'in \"' + this.name + '\" ';\n }\n\n where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1);\n\n if (!compact) {\n snippet = this.getSnippet();\n\n if (snippet) {\n where += ':\\n' + snippet;\n }\n }\n\n return where;\n};\n\n\nmodule.exports = Mark;\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:str', {\n kind: 'scalar',\n construct: function (data) { return data !== null ? data : ''; }\n});\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:seq', {\n kind: 'sequence',\n construct: function (data) { return data !== null ? data : []; }\n});\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:map', {\n kind: 'mapping',\n construct: function (data) { return data !== null ? data : {}; }\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n\n var max = data.length;\n\n return (max === 1 && data === '~') ||\n (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n return null;\n}\n\nfunction isNull(object) {\n return object === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:null', {\n kind: 'scalar',\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function () { return '~'; },\n lowercase: function () { return 'null'; },\n uppercase: function () { return 'NULL'; },\n camelcase: function () { return 'Null'; }\n },\n defaultStyle: 'lowercase'\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n\n var max = data.length;\n\n return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n return data === 'true' ||\n data === 'True' ||\n data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:bool', {\n kind: 'scalar',\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function (object) { return object ? 'true' : 'false'; },\n uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n camelcase: function (object) { return object ? 'True' : 'False'; }\n },\n defaultStyle: 'lowercase'\n});\n","'use strict';\n\nvar common = require('../common');\nvar Type = require('../type');\n\nfunction isHexCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||\n ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||\n ((0x61/* a */ <= c) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n\n var max = data.length,\n index = 0,\n hasDigits = false,\n ch;\n\n if (!max) return false;\n\n ch = data[index];\n\n // sign\n if (ch === '-' || ch === '+') {\n ch = data[++index];\n }\n\n if (ch === '0') {\n // 0\n if (index + 1 === max) return true;\n ch = data[++index];\n\n // base 2, base 8, base 16\n\n if (ch === 'b') {\n // base 2\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch !== '0' && ch !== '1') return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'x') {\n // base 16\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n // base 8\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n // base 10 (except 0) or base 60\n\n // value should not start with `_`;\n if (ch === '_') return false;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch === ':') break;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n\n // Should have digits and should not end with `_`\n if (!hasDigits || ch === '_') return false;\n\n // if !base60 - done;\n if (ch !== ':') return true;\n\n // base60 almost not used, no needs to optimize\n return /^(:[0-5]?[0-9])+$/.test(data.slice(index));\n}\n\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch, base, digits = [];\n\n if (value.indexOf('_') !== -1) {\n value = value.replace(/_/g, '');\n }\n\n ch = value[0];\n\n if (ch === '-' || ch === '+') {\n if (ch === '-') sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n\n if (value === '0') return 0;\n\n if (ch === '0') {\n if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n if (value[1] === 'x') return sign * parseInt(value, 16);\n return sign * parseInt(value, 8);\n }\n\n if (value.indexOf(':') !== -1) {\n value.split(':').forEach(function (v) {\n digits.unshift(parseInt(v, 10));\n });\n\n value = 0;\n base = 1;\n\n digits.forEach(function (d) {\n value += (d * base);\n base *= 60;\n });\n\n return sign * value;\n\n }\n\n return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n return (Object.prototype.toString.call(object)) === '[object Number]' &&\n (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:int', {\n kind: 'scalar',\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },\n octal: function (obj) { return obj >= 0 ? '0' + obj.toString(8) : '-0' + obj.toString(8).slice(1); },\n decimal: function (obj) { return obj.toString(10); },\n /* eslint-disable max-len */\n hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }\n },\n defaultStyle: 'decimal',\n styleAliases: {\n binary: [ 2, 'bin' ],\n octal: [ 8, 'oct' ],\n decimal: [ 10, 'dec' ],\n hexadecimal: [ 16, 'hex' ]\n }\n});\n","'use strict';\n\nvar common = require('../common');\nvar Type = require('../type');\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n // special case, seems not from spec\n '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n // 20:59\n '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n\n if (!YAML_FLOAT_PATTERN.test(data) ||\n // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === '_') {\n return false;\n }\n\n return true;\n}\n\nfunction constructYamlFloat(data) {\n var value, sign, base, digits;\n\n value = data.replace(/_/g, '').toLowerCase();\n sign = value[0] === '-' ? -1 : 1;\n digits = [];\n\n if ('+-'.indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n\n if (value === '.inf') {\n return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n } else if (value === '.nan') {\n return NaN;\n\n } else if (value.indexOf(':') >= 0) {\n value.split(':').forEach(function (v) {\n digits.unshift(parseFloat(v, 10));\n });\n\n value = 0.0;\n base = 1;\n\n digits.forEach(function (d) {\n value += d * base;\n base *= 60;\n });\n\n return sign * value;\n\n }\n return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n var res;\n\n if (isNaN(object)) {\n switch (style) {\n case 'lowercase': return '.nan';\n case 'uppercase': return '.NAN';\n case 'camelcase': return '.NaN';\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '.inf';\n case 'uppercase': return '.INF';\n case 'camelcase': return '.Inf';\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '-.inf';\n case 'uppercase': return '-.INF';\n case 'camelcase': return '-.Inf';\n }\n } else if (common.isNegativeZero(object)) {\n return '-0.0';\n }\n\n res = object.toString(10);\n\n // JS stringifier can build scientific format without dots: 5e-100,\n // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n return (Object.prototype.toString.call(object) === '[object Number]') &&\n (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:float', {\n kind: 'scalar',\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: 'lowercase'\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar YAML_DATE_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9])' + // [2] month\n '-([0-9][0-9])$'); // [3] day\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9]?)' + // [2] month\n '-([0-9][0-9]?)' + // [3] day\n '(?:[Tt]|[ \\\\t]+)' + // ...\n '([0-9][0-9]?)' + // [4] hour\n ':([0-9][0-9])' + // [5] minute\n ':([0-9][0-9])' + // [6] second\n '(?:\\\\.([0-9]*))?' + // [7] fraction\n '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n '(?::([0-9][0-9]))?))?$'); // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0,\n delta = null, tz_hour, tz_minute, date;\n\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n if (match === null) throw new Error('Date resolve error');\n\n // match: [1] year [2] month [3] day\n\n year = +(match[1]);\n month = +(match[2]) - 1; // JS month starts with 0\n day = +(match[3]);\n\n if (!match[4]) { // no hour\n return new Date(Date.UTC(year, month, day));\n }\n\n // match: [4] hour [5] minute [6] second [7] fraction\n\n hour = +(match[4]);\n minute = +(match[5]);\n second = +(match[6]);\n\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) { // milli-seconds\n fraction += '0';\n }\n fraction = +fraction;\n }\n\n // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n\n if (match[9]) {\n tz_hour = +(match[10]);\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n if (match[9] === '-') delta = -delta;\n }\n\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n if (delta) date.setTime(date.getTime() - delta);\n\n return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n return object.toISOString();\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:timestamp', {\n kind: 'scalar',\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlMerge(data) {\n return data === '<<' || data === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:merge', {\n kind: 'scalar',\n resolve: resolveYamlMerge\n});\n","'use strict';\n\n/*eslint-disable no-bitwise*/\n\nvar NodeBuffer;\n\ntry {\n // A trick for browserified version, to not include `Buffer` shim\n var _require = require;\n NodeBuffer = _require('buffer').Buffer;\n} catch (__) {}\n\nvar Type = require('../type');\n\n\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n\n var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n\n // Convert one by one.\n for (idx = 0; idx < max; idx++) {\n code = map.indexOf(data.charAt(idx));\n\n // Skip CR/LF\n if (code > 64) continue;\n\n // Fail on illegal characters\n if (code < 0) return false;\n\n bitlen += 6;\n }\n\n // If there are any bits left, source was corrupted\n return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n var idx, tailbits,\n input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length,\n map = BASE64_MAP,\n bits = 0,\n result = [];\n\n // Collect by 6*4 bits (3 bytes)\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n }\n\n bits = (bits << 6) | map.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n } else if (tailbits === 18) {\n result.push((bits >> 10) & 0xFF);\n result.push((bits >> 2) & 0xFF);\n } else if (tailbits === 12) {\n result.push((bits >> 4) & 0xFF);\n }\n\n // Wrap into Buffer for NodeJS and leave Array for browser\n if (NodeBuffer) {\n // Support node 6.+ Buffer API when available\n return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result);\n }\n\n return result;\n}\n\nfunction representYamlBinary(object /*, style*/) {\n var result = '', bits = 0, idx, tail,\n max = object.length,\n map = BASE64_MAP;\n\n // Convert every three bytes to 4 ASCII characters.\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 3 === 0) && idx) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n }\n\n bits = (bits << 8) + object[idx];\n }\n\n // Dump tail\n\n tail = max % 3;\n\n if (tail === 0) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n } else if (tail === 2) {\n result += map[(bits >> 10) & 0x3F];\n result += map[(bits >> 4) & 0x3F];\n result += map[(bits << 2) & 0x3F];\n result += map[64];\n } else if (tail === 1) {\n result += map[(bits >> 2) & 0x3F];\n result += map[(bits << 4) & 0x3F];\n result += map[64];\n result += map[64];\n }\n\n return result;\n}\n\nfunction isBinary(object) {\n return NodeBuffer && NodeBuffer.isBuffer(object);\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:binary', {\n kind: 'scalar',\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\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","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","'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar _toString = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n\n var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n object = data;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n\n if (_toString.call(pair) !== '[object Object]') return false;\n\n for (pairKey in pair) {\n if (_hasOwnProperty.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n\n if (!pairHasKey) return false;\n\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n\n return true;\n}\n\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:omap', {\n kind: 'sequence',\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar _toString = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n if (_toString.call(pair) !== '[object Object]') return false;\n\n keys = Object.keys(pair);\n\n if (keys.length !== 1) return false;\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return true;\n}\n\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n keys = Object.keys(pair);\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return result;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:pairs', {\n kind: 'sequence',\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n\n var key, object = data;\n\n for (key in object) {\n if (_hasOwnProperty.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n\n return true;\n}\n\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:set', {\n kind: 'mapping',\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\n","'use strict';\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptUndefined() {\n return true;\n}\n\nfunction constructJavascriptUndefined() {\n /*eslint-disable no-undefined*/\n return undefined;\n}\n\nfunction representJavascriptUndefined() {\n return '';\n}\n\nfunction isUndefined(object) {\n return typeof object === 'undefined';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/undefined', {\n kind: 'scalar',\n resolve: resolveJavascriptUndefined,\n construct: constructJavascriptUndefined,\n predicate: isUndefined,\n represent: representJavascriptUndefined\n});\n","'use strict';\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptRegExp(data) {\n if (data === null) return false;\n if (data.length === 0) return false;\n\n var regexp = data,\n tail = /\\/([gim]*)$/.exec(data),\n modifiers = '';\n\n // if regexp starts with '/' it can have modifiers and must be properly closed\n // `/foo/gim` - modifiers tail can be maximum 3 chars\n if (regexp[0] === '/') {\n if (tail) modifiers = tail[1];\n\n if (modifiers.length > 3) return false;\n // if expression starts with /, is should be properly terminated\n if (regexp[regexp.length - modifiers.length - 1] !== '/') return false;\n }\n\n return true;\n}\n\nfunction constructJavascriptRegExp(data) {\n var regexp = data,\n tail = /\\/([gim]*)$/.exec(data),\n modifiers = '';\n\n // `/foo/gim` - tail can be maximum 4 chars\n if (regexp[0] === '/') {\n if (tail) modifiers = tail[1];\n regexp = regexp.slice(1, regexp.length - modifiers.length - 1);\n }\n\n return new RegExp(regexp, modifiers);\n}\n\nfunction representJavascriptRegExp(object /*, style*/) {\n var result = '/' + object.source + '/';\n\n if (object.global) result += 'g';\n if (object.multiline) result += 'm';\n if (object.ignoreCase) result += 'i';\n\n return result;\n}\n\nfunction isRegExp(object) {\n return Object.prototype.toString.call(object) === '[object RegExp]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/regexp', {\n kind: 'scalar',\n resolve: resolveJavascriptRegExp,\n construct: constructJavascriptRegExp,\n predicate: isRegExp,\n represent: representJavascriptRegExp\n});\n","'use strict';\n\nvar esprima;\n\n// Browserified version does not have esprima\n//\n// 1. For node.js just require module as deps\n// 2. For browser try to require mudule via external AMD system.\n// If not found - try to fallback to window.esprima. If not\n// found too - then fail to parse.\n//\ntry {\n // workaround to exclude package from browserify list.\n var _require = require;\n esprima = _require('esprima');\n} catch (_) {\n /*global window */\n if (typeof window !== 'undefined') esprima = window.esprima;\n}\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptFunction(data) {\n if (data === null) return false;\n\n try {\n var source = '(' + data + ')',\n ast = esprima.parse(source, { range: true });\n\n if (ast.type !== 'Program' ||\n ast.body.length !== 1 ||\n ast.body[0].type !== 'ExpressionStatement' ||\n (ast.body[0].expression.type !== 'ArrowFunctionExpression' &&\n ast.body[0].expression.type !== 'FunctionExpression')) {\n return false;\n }\n\n return true;\n } catch (err) {\n return false;\n }\n}\n\nfunction constructJavascriptFunction(data) {\n /*jslint evil:true*/\n\n var source = '(' + data + ')',\n ast = esprima.parse(source, { range: true }),\n params = [],\n body;\n\n if (ast.type !== 'Program' ||\n ast.body.length !== 1 ||\n ast.body[0].type !== 'ExpressionStatement' ||\n (ast.body[0].expression.type !== 'ArrowFunctionExpression' &&\n ast.body[0].expression.type !== 'FunctionExpression')) {\n throw new Error('Failed to resolve function');\n }\n\n ast.body[0].expression.params.forEach(function (param) {\n params.push(param.name);\n });\n\n body = ast.body[0].expression.body.range;\n\n // Esprima's ranges include the first '{' and the last '}' characters on\n // function expressions. So cut them out.\n if (ast.body[0].expression.body.type === 'BlockStatement') {\n /*eslint-disable no-new-func*/\n return new Function(params, source.slice(body[0] + 1, body[1] - 1));\n }\n // ES6 arrow functions can omit the BlockStatement. In that case, just return\n // the body.\n /*eslint-disable no-new-func*/\n return new Function(params, 'return ' + source.slice(body[0], body[1]));\n}\n\nfunction representJavascriptFunction(object /*, style*/) {\n return object.toString();\n}\n\nfunction isFunction(object) {\n return Object.prototype.toString.call(object) === '[object Function]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/function', {\n kind: 'scalar',\n resolve: resolveJavascriptFunction,\n construct: constructJavascriptFunction,\n predicate: isFunction,\n represent: representJavascriptFunction\n});\n","(function webpackUniversalModuleDefinition(root, factory) {\n/* istanbul ignore next */\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n/* istanbul ignore next */\n\telse if(typeof exports === 'object')\n\t\texports[\"esprima\"] = factory();\n\telse\n\t\troot[\"esprima\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \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/* istanbul ignore if */\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t/*\n\t Copyright JS Foundation and other contributors, https://js.foundation/\n\n\t Redistribution and use in source and binary forms, with or without\n\t modification, are permitted provided that the following conditions are met:\n\n\t * Redistributions of source code must retain the above copyright\n\t notice, this list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright\n\t notice, this list of conditions and the following disclaimer in the\n\t documentation and/or other materials provided with the distribution.\n\n\t THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n\t AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\t IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n\t DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\t LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n\t ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n\t THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar comment_handler_1 = __webpack_require__(1);\n\tvar jsx_parser_1 = __webpack_require__(3);\n\tvar parser_1 = __webpack_require__(8);\n\tvar tokenizer_1 = __webpack_require__(15);\n\tfunction parse(code, options, delegate) {\n\t var commentHandler = null;\n\t var proxyDelegate = function (node, metadata) {\n\t if (delegate) {\n\t delegate(node, metadata);\n\t }\n\t if (commentHandler) {\n\t commentHandler.visit(node, metadata);\n\t }\n\t };\n\t var parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null;\n\t var collectComment = false;\n\t if (options) {\n\t collectComment = (typeof options.comment === 'boolean' && options.comment);\n\t var attachComment = (typeof options.attachComment === 'boolean' && options.attachComment);\n\t if (collectComment || attachComment) {\n\t commentHandler = new comment_handler_1.CommentHandler();\n\t commentHandler.attach = attachComment;\n\t options.comment = true;\n\t parserDelegate = proxyDelegate;\n\t }\n\t }\n\t var isModule = false;\n\t if (options && typeof options.sourceType === 'string') {\n\t isModule = (options.sourceType === 'module');\n\t }\n\t var parser;\n\t if (options && typeof options.jsx === 'boolean' && options.jsx) {\n\t parser = new jsx_parser_1.JSXParser(code, options, parserDelegate);\n\t }\n\t else {\n\t parser = new parser_1.Parser(code, options, parserDelegate);\n\t }\n\t var program = isModule ? parser.parseModule() : parser.parseScript();\n\t var ast = program;\n\t if (collectComment && commentHandler) {\n\t ast.comments = commentHandler.comments;\n\t }\n\t if (parser.config.tokens) {\n\t ast.tokens = parser.tokens;\n\t }\n\t if (parser.config.tolerant) {\n\t ast.errors = parser.errorHandler.errors;\n\t }\n\t return ast;\n\t}\n\texports.parse = parse;\n\tfunction parseModule(code, options, delegate) {\n\t var parsingOptions = options || {};\n\t parsingOptions.sourceType = 'module';\n\t return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseModule = parseModule;\n\tfunction parseScript(code, options, delegate) {\n\t var parsingOptions = options || {};\n\t parsingOptions.sourceType = 'script';\n\t return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseScript = parseScript;\n\tfunction tokenize(code, options, delegate) {\n\t var tokenizer = new tokenizer_1.Tokenizer(code, options);\n\t var tokens;\n\t tokens = [];\n\t try {\n\t while (true) {\n\t var token = tokenizer.getNextToken();\n\t if (!token) {\n\t break;\n\t }\n\t if (delegate) {\n\t token = delegate(token);\n\t }\n\t tokens.push(token);\n\t }\n\t }\n\t catch (e) {\n\t tokenizer.errorHandler.tolerate(e);\n\t }\n\t if (tokenizer.errorHandler.tolerant) {\n\t tokens.errors = tokenizer.errors();\n\t }\n\t return tokens;\n\t}\n\texports.tokenize = tokenize;\n\tvar syntax_1 = __webpack_require__(2);\n\texports.Syntax = syntax_1.Syntax;\n\t// Sync with *.json manifests.\n\texports.version = '4.0.1';\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __webpack_require__(2);\n\tvar CommentHandler = (function () {\n\t function CommentHandler() {\n\t this.attach = false;\n\t this.comments = [];\n\t this.stack = [];\n\t this.leading = [];\n\t this.trailing = [];\n\t }\n\t CommentHandler.prototype.insertInnerComments = function (node, metadata) {\n\t // innnerComments for properties empty block\n\t // `function a() {/** comments **\\/}`\n\t if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) {\n\t var innerComments = [];\n\t for (var i = this.leading.length - 1; i >= 0; --i) {\n\t var entry = this.leading[i];\n\t if (metadata.end.offset >= entry.start) {\n\t innerComments.unshift(entry.comment);\n\t this.leading.splice(i, 1);\n\t this.trailing.splice(i, 1);\n\t }\n\t }\n\t if (innerComments.length) {\n\t node.innerComments = innerComments;\n\t }\n\t }\n\t };\n\t CommentHandler.prototype.findTrailingComments = function (metadata) {\n\t var trailingComments = [];\n\t if (this.trailing.length > 0) {\n\t for (var i = this.trailing.length - 1; i >= 0; --i) {\n\t var entry_1 = this.trailing[i];\n\t if (entry_1.start >= metadata.end.offset) {\n\t trailingComments.unshift(entry_1.comment);\n\t }\n\t }\n\t this.trailing.length = 0;\n\t return trailingComments;\n\t }\n\t var entry = this.stack[this.stack.length - 1];\n\t if (entry && entry.node.trailingComments) {\n\t var firstComment = entry.node.trailingComments[0];\n\t if (firstComment && firstComment.range[0] >= metadata.end.offset) {\n\t trailingComments = entry.node.trailingComments;\n\t delete entry.node.trailingComments;\n\t }\n\t }\n\t return trailingComments;\n\t };\n\t CommentHandler.prototype.findLeadingComments = function (metadata) {\n\t var leadingComments = [];\n\t var target;\n\t while (this.stack.length > 0) {\n\t var entry = this.stack[this.stack.length - 1];\n\t if (entry && entry.start >= metadata.start.offset) {\n\t target = entry.node;\n\t this.stack.pop();\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t if (target) {\n\t var count = target.leadingComments ? target.leadingComments.length : 0;\n\t for (var i = count - 1; i >= 0; --i) {\n\t var comment = target.leadingComments[i];\n\t if (comment.range[1] <= metadata.start.offset) {\n\t leadingComments.unshift(comment);\n\t target.leadingComments.splice(i, 1);\n\t }\n\t }\n\t if (target.leadingComments && target.leadingComments.length === 0) {\n\t delete target.leadingComments;\n\t }\n\t return leadingComments;\n\t }\n\t for (var i = this.leading.length - 1; i >= 0; --i) {\n\t var entry = this.leading[i];\n\t if (entry.start <= metadata.start.offset) {\n\t leadingComments.unshift(entry.comment);\n\t this.leading.splice(i, 1);\n\t }\n\t }\n\t return leadingComments;\n\t };\n\t CommentHandler.prototype.visitNode = function (node, metadata) {\n\t if (node.type === syntax_1.Syntax.Program && node.body.length > 0) {\n\t return;\n\t }\n\t this.insertInnerComments(node, metadata);\n\t var trailingComments = this.findTrailingComments(metadata);\n\t var leadingComments = this.findLeadingComments(metadata);\n\t if (leadingComments.length > 0) {\n\t node.leadingComments = leadingComments;\n\t }\n\t if (trailingComments.length > 0) {\n\t node.trailingComments = trailingComments;\n\t }\n\t this.stack.push({\n\t node: node,\n\t start: metadata.start.offset\n\t });\n\t };\n\t CommentHandler.prototype.visitComment = function (node, metadata) {\n\t var type = (node.type[0] === 'L') ? 'Line' : 'Block';\n\t var comment = {\n\t type: type,\n\t value: node.value\n\t };\n\t if (node.range) {\n\t comment.range = node.range;\n\t }\n\t if (node.loc) {\n\t comment.loc = node.loc;\n\t }\n\t this.comments.push(comment);\n\t if (this.attach) {\n\t var entry = {\n\t comment: {\n\t type: type,\n\t value: node.value,\n\t range: [metadata.start.offset, metadata.end.offset]\n\t },\n\t start: metadata.start.offset\n\t };\n\t if (node.loc) {\n\t entry.comment.loc = node.loc;\n\t }\n\t node.type = type;\n\t this.leading.push(entry);\n\t this.trailing.push(entry);\n\t }\n\t };\n\t CommentHandler.prototype.visit = function (node, metadata) {\n\t if (node.type === 'LineComment') {\n\t this.visitComment(node, metadata);\n\t }\n\t else if (node.type === 'BlockComment') {\n\t this.visitComment(node, metadata);\n\t }\n\t else if (this.attach) {\n\t this.visitNode(node, metadata);\n\t }\n\t };\n\t return CommentHandler;\n\t}());\n\texports.CommentHandler = CommentHandler;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.Syntax = {\n\t AssignmentExpression: 'AssignmentExpression',\n\t AssignmentPattern: 'AssignmentPattern',\n\t ArrayExpression: 'ArrayExpression',\n\t ArrayPattern: 'ArrayPattern',\n\t ArrowFunctionExpression: 'ArrowFunctionExpression',\n\t AwaitExpression: 'AwaitExpression',\n\t BlockStatement: 'BlockStatement',\n\t BinaryExpression: 'BinaryExpression',\n\t BreakStatement: 'BreakStatement',\n\t CallExpression: 'CallExpression',\n\t CatchClause: 'CatchClause',\n\t ClassBody: 'ClassBody',\n\t ClassDeclaration: 'ClassDeclaration',\n\t ClassExpression: 'ClassExpression',\n\t ConditionalExpression: 'ConditionalExpression',\n\t ContinueStatement: 'ContinueStatement',\n\t DoWhileStatement: 'DoWhileStatement',\n\t DebuggerStatement: 'DebuggerStatement',\n\t EmptyStatement: 'EmptyStatement',\n\t ExportAllDeclaration: 'ExportAllDeclaration',\n\t ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n\t ExportNamedDeclaration: 'ExportNamedDeclaration',\n\t ExportSpecifier: 'ExportSpecifier',\n\t ExpressionStatement: 'ExpressionStatement',\n\t ForStatement: 'ForStatement',\n\t ForOfStatement: 'ForOfStatement',\n\t ForInStatement: 'ForInStatement',\n\t FunctionDeclaration: 'FunctionDeclaration',\n\t FunctionExpression: 'FunctionExpression',\n\t Identifier: 'Identifier',\n\t IfStatement: 'IfStatement',\n\t ImportDeclaration: 'ImportDeclaration',\n\t ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n\t ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n\t ImportSpecifier: 'ImportSpecifier',\n\t Literal: 'Literal',\n\t LabeledStatement: 'LabeledStatement',\n\t LogicalExpression: 'LogicalExpression',\n\t MemberExpression: 'MemberExpression',\n\t MetaProperty: 'MetaProperty',\n\t MethodDefinition: 'MethodDefinition',\n\t NewExpression: 'NewExpression',\n\t ObjectExpression: 'ObjectExpression',\n\t ObjectPattern: 'ObjectPattern',\n\t Program: 'Program',\n\t Property: 'Property',\n\t RestElement: 'RestElement',\n\t ReturnStatement: 'ReturnStatement',\n\t SequenceExpression: 'SequenceExpression',\n\t SpreadElement: 'SpreadElement',\n\t Super: 'Super',\n\t SwitchCase: 'SwitchCase',\n\t SwitchStatement: 'SwitchStatement',\n\t TaggedTemplateExpression: 'TaggedTemplateExpression',\n\t TemplateElement: 'TemplateElement',\n\t TemplateLiteral: 'TemplateLiteral',\n\t ThisExpression: 'ThisExpression',\n\t ThrowStatement: 'ThrowStatement',\n\t TryStatement: 'TryStatement',\n\t UnaryExpression: 'UnaryExpression',\n\t UpdateExpression: 'UpdateExpression',\n\t VariableDeclaration: 'VariableDeclaration',\n\t VariableDeclarator: 'VariableDeclarator',\n\t WhileStatement: 'WhileStatement',\n\t WithStatement: 'WithStatement',\n\t YieldExpression: 'YieldExpression'\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n/* istanbul ignore next */\n\tvar __extends = (this && this.__extends) || (function () {\n\t var extendStatics = Object.setPrototypeOf ||\n\t ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t return function (d, b) {\n\t extendStatics(d, b);\n\t function __() { this.constructor = d; }\n\t d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar character_1 = __webpack_require__(4);\n\tvar JSXNode = __webpack_require__(5);\n\tvar jsx_syntax_1 = __webpack_require__(6);\n\tvar Node = __webpack_require__(7);\n\tvar parser_1 = __webpack_require__(8);\n\tvar token_1 = __webpack_require__(13);\n\tvar xhtml_entities_1 = __webpack_require__(14);\n\ttoken_1.TokenName[100 /* Identifier */] = 'JSXIdentifier';\n\ttoken_1.TokenName[101 /* Text */] = 'JSXText';\n\t// Fully qualified element name, e.g. <svg:path> returns \"svg:path\"\n\tfunction getQualifiedElementName(elementName) {\n\t var qualifiedName;\n\t switch (elementName.type) {\n\t case jsx_syntax_1.JSXSyntax.JSXIdentifier:\n\t var id = elementName;\n\t qualifiedName = id.name;\n\t break;\n\t case jsx_syntax_1.JSXSyntax.JSXNamespacedName:\n\t var ns = elementName;\n\t qualifiedName = getQualifiedElementName(ns.namespace) + ':' +\n\t getQualifiedElementName(ns.name);\n\t break;\n\t case jsx_syntax_1.JSXSyntax.JSXMemberExpression:\n\t var expr = elementName;\n\t qualifiedName = getQualifiedElementName(expr.object) + '.' +\n\t getQualifiedElementName(expr.property);\n\t break;\n\t /* istanbul ignore next */\n\t default:\n\t break;\n\t }\n\t return qualifiedName;\n\t}\n\tvar JSXParser = (function (_super) {\n\t __extends(JSXParser, _super);\n\t function JSXParser(code, options, delegate) {\n\t return _super.call(this, code, options, delegate) || this;\n\t }\n\t JSXParser.prototype.parsePrimaryExpression = function () {\n\t return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this);\n\t };\n\t JSXParser.prototype.startJSX = function () {\n\t // Unwind the scanner before the lookahead token.\n\t this.scanner.index = this.startMarker.index;\n\t this.scanner.lineNumber = this.startMarker.line;\n\t this.scanner.lineStart = this.startMarker.index - this.startMarker.column;\n\t };\n\t JSXParser.prototype.finishJSX = function () {\n\t // Prime the next lookahead.\n\t this.nextToken();\n\t };\n\t JSXParser.prototype.reenterJSX = function () {\n\t this.startJSX();\n\t this.expectJSX('}');\n\t // Pop the closing '}' added from the lookahead.\n\t if (this.config.tokens) {\n\t this.tokens.pop();\n\t }\n\t };\n\t JSXParser.prototype.createJSXNode = function () {\n\t this.collectComments();\n\t return {\n\t index: this.scanner.index,\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t };\n\t };\n\t JSXParser.prototype.createJSXChildNode = function () {\n\t return {\n\t index: this.scanner.index,\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t };\n\t };\n\t JSXParser.prototype.scanXHTMLEntity = function (quote) {\n\t var result = '&';\n\t var valid = true;\n\t var terminated = false;\n\t var numeric = false;\n\t var hex = false;\n\t while (!this.scanner.eof() && valid && !terminated) {\n\t var ch = this.scanner.source[this.scanner.index];\n\t if (ch === quote) {\n\t break;\n\t }\n\t terminated = (ch === ';');\n\t result += ch;\n\t ++this.scanner.index;\n\t if (!terminated) {\n\t switch (result.length) {\n\t case 2:\n\t // e.g. '{'\n\t numeric = (ch === '#');\n\t break;\n\t case 3:\n\t if (numeric) {\n\t // e.g. 'A'\n\t hex = (ch === 'x');\n\t valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0));\n\t numeric = numeric && !hex;\n\t }\n\t break;\n\t default:\n\t valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0)));\n\t valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0)));\n\t break;\n\t }\n\t }\n\t }\n\t if (valid && terminated && result.length > 2) {\n\t // e.g. 'A' becomes just '#x41'\n\t var str = result.substr(1, result.length - 2);\n\t if (numeric && str.length > 1) {\n\t result = String.fromCharCode(parseInt(str.substr(1), 10));\n\t }\n\t else if (hex && str.length > 2) {\n\t result = String.fromCharCode(parseInt('0' + str.substr(1), 16));\n\t }\n\t else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) {\n\t result = xhtml_entities_1.XHTMLEntities[str];\n\t }\n\t }\n\t return result;\n\t };\n\t // Scan the next JSX token. This replaces Scanner#lex when in JSX mode.\n\t JSXParser.prototype.lexJSX = function () {\n\t var cp = this.scanner.source.charCodeAt(this.scanner.index);\n\t // < > / : = { }\n\t if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) {\n\t var value = this.scanner.source[this.scanner.index++];\n\t return {\n\t type: 7 /* Punctuator */,\n\t value: value,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: this.scanner.index - 1,\n\t end: this.scanner.index\n\t };\n\t }\n\t // \" '\n\t if (cp === 34 || cp === 39) {\n\t var start = this.scanner.index;\n\t var quote = this.scanner.source[this.scanner.index++];\n\t var str = '';\n\t while (!this.scanner.eof()) {\n\t var ch = this.scanner.source[this.scanner.index++];\n\t if (ch === quote) {\n\t break;\n\t }\n\t else if (ch === '&') {\n\t str += this.scanXHTMLEntity(quote);\n\t }\n\t else {\n\t str += ch;\n\t }\n\t }\n\t return {\n\t type: 8 /* StringLiteral */,\n\t value: str,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t }\n\t // ... or .\n\t if (cp === 46) {\n\t var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1);\n\t var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2);\n\t var value = (n1 === 46 && n2 === 46) ? '...' : '.';\n\t var start = this.scanner.index;\n\t this.scanner.index += value.length;\n\t return {\n\t type: 7 /* Punctuator */,\n\t value: value,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t }\n\t // `\n\t if (cp === 96) {\n\t // Only placeholder, since it will be rescanned as a real assignment expression.\n\t return {\n\t type: 10 /* Template */,\n\t value: '',\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: this.scanner.index,\n\t end: this.scanner.index\n\t };\n\t }\n\t // Identifer can not contain backslash (char code 92).\n\t if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) {\n\t var start = this.scanner.index;\n\t ++this.scanner.index;\n\t while (!this.scanner.eof()) {\n\t var ch = this.scanner.source.charCodeAt(this.scanner.index);\n\t if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) {\n\t ++this.scanner.index;\n\t }\n\t else if (ch === 45) {\n\t // Hyphen (char code 45) can be part of an identifier.\n\t ++this.scanner.index;\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t var id = this.scanner.source.slice(start, this.scanner.index);\n\t return {\n\t type: 100 /* Identifier */,\n\t value: id,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t }\n\t return this.scanner.lex();\n\t };\n\t JSXParser.prototype.nextJSXToken = function () {\n\t this.collectComments();\n\t this.startMarker.index = this.scanner.index;\n\t this.startMarker.line = this.scanner.lineNumber;\n\t this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t var token = this.lexJSX();\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t if (this.config.tokens) {\n\t this.tokens.push(this.convertToken(token));\n\t }\n\t return token;\n\t };\n\t JSXParser.prototype.nextJSXText = function () {\n\t this.startMarker.index = this.scanner.index;\n\t this.startMarker.line = this.scanner.lineNumber;\n\t this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t var start = this.scanner.index;\n\t var text = '';\n\t while (!this.scanner.eof()) {\n\t var ch = this.scanner.source[this.scanner.index];\n\t if (ch === '{' || ch === '<') {\n\t break;\n\t }\n\t ++this.scanner.index;\n\t text += ch;\n\t if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t ++this.scanner.lineNumber;\n\t if (ch === '\\r' && this.scanner.source[this.scanner.index] === '\\n') {\n\t ++this.scanner.index;\n\t }\n\t this.scanner.lineStart = this.scanner.index;\n\t }\n\t }\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t var token = {\n\t type: 101 /* Text */,\n\t value: text,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t if ((text.length > 0) && this.config.tokens) {\n\t this.tokens.push(this.convertToken(token));\n\t }\n\t return token;\n\t };\n\t JSXParser.prototype.peekJSXToken = function () {\n\t var state = this.scanner.saveState();\n\t this.scanner.scanComments();\n\t var next = this.lexJSX();\n\t this.scanner.restoreState(state);\n\t return next;\n\t };\n\t // Expect the next JSX token to match the specified punctuator.\n\t // If not, an exception will be thrown.\n\t JSXParser.prototype.expectJSX = function (value) {\n\t var token = this.nextJSXToken();\n\t if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t };\n\t // Return true if the next JSX token matches the specified punctuator.\n\t JSXParser.prototype.matchJSX = function (value) {\n\t var next = this.peekJSXToken();\n\t return next.type === 7 /* Punctuator */ && next.value === value;\n\t };\n\t JSXParser.prototype.parseJSXIdentifier = function () {\n\t var node = this.createJSXNode();\n\t var token = this.nextJSXToken();\n\t if (token.type !== 100 /* Identifier */) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t return this.finalize(node, new JSXNode.JSXIdentifier(token.value));\n\t };\n\t JSXParser.prototype.parseJSXElementName = function () {\n\t var node = this.createJSXNode();\n\t var elementName = this.parseJSXIdentifier();\n\t if (this.matchJSX(':')) {\n\t var namespace = elementName;\n\t this.expectJSX(':');\n\t var name_1 = this.parseJSXIdentifier();\n\t elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1));\n\t }\n\t else if (this.matchJSX('.')) {\n\t while (this.matchJSX('.')) {\n\t var object = elementName;\n\t this.expectJSX('.');\n\t var property = this.parseJSXIdentifier();\n\t elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property));\n\t }\n\t }\n\t return elementName;\n\t };\n\t JSXParser.prototype.parseJSXAttributeName = function () {\n\t var node = this.createJSXNode();\n\t var attributeName;\n\t var identifier = this.parseJSXIdentifier();\n\t if (this.matchJSX(':')) {\n\t var namespace = identifier;\n\t this.expectJSX(':');\n\t var name_2 = this.parseJSXIdentifier();\n\t attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2));\n\t }\n\t else {\n\t attributeName = identifier;\n\t }\n\t return attributeName;\n\t };\n\t JSXParser.prototype.parseJSXStringLiteralAttribute = function () {\n\t var node = this.createJSXNode();\n\t var token = this.nextJSXToken();\n\t if (token.type !== 8 /* StringLiteral */) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t var raw = this.getTokenRaw(token);\n\t return this.finalize(node, new Node.Literal(token.value, raw));\n\t };\n\t JSXParser.prototype.parseJSXExpressionAttribute = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('{');\n\t this.finishJSX();\n\t if (this.match('}')) {\n\t this.tolerateError('JSX attributes must only be assigned a non-empty expression');\n\t }\n\t var expression = this.parseAssignmentExpression();\n\t this.reenterJSX();\n\t return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t };\n\t JSXParser.prototype.parseJSXAttributeValue = function () {\n\t return this.matchJSX('{') ? this.parseJSXExpressionAttribute() :\n\t this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute();\n\t };\n\t JSXParser.prototype.parseJSXNameValueAttribute = function () {\n\t var node = this.createJSXNode();\n\t var name = this.parseJSXAttributeName();\n\t var value = null;\n\t if (this.matchJSX('=')) {\n\t this.expectJSX('=');\n\t value = this.parseJSXAttributeValue();\n\t }\n\t return this.finalize(node, new JSXNode.JSXAttribute(name, value));\n\t };\n\t JSXParser.prototype.parseJSXSpreadAttribute = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('{');\n\t this.expectJSX('...');\n\t this.finishJSX();\n\t var argument = this.parseAssignmentExpression();\n\t this.reenterJSX();\n\t return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument));\n\t };\n\t JSXParser.prototype.parseJSXAttributes = function () {\n\t var attributes = [];\n\t while (!this.matchJSX('/') && !this.matchJSX('>')) {\n\t var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() :\n\t this.parseJSXNameValueAttribute();\n\t attributes.push(attribute);\n\t }\n\t return attributes;\n\t };\n\t JSXParser.prototype.parseJSXOpeningElement = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('<');\n\t var name = this.parseJSXElementName();\n\t var attributes = this.parseJSXAttributes();\n\t var selfClosing = this.matchJSX('/');\n\t if (selfClosing) {\n\t this.expectJSX('/');\n\t }\n\t this.expectJSX('>');\n\t return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t };\n\t JSXParser.prototype.parseJSXBoundaryElement = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('<');\n\t if (this.matchJSX('/')) {\n\t this.expectJSX('/');\n\t var name_3 = this.parseJSXElementName();\n\t this.expectJSX('>');\n\t return this.finalize(node, new JSXNode.JSXClosingElement(name_3));\n\t }\n\t var name = this.parseJSXElementName();\n\t var attributes = this.parseJSXAttributes();\n\t var selfClosing = this.matchJSX('/');\n\t if (selfClosing) {\n\t this.expectJSX('/');\n\t }\n\t this.expectJSX('>');\n\t return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t };\n\t JSXParser.prototype.parseJSXEmptyExpression = function () {\n\t var node = this.createJSXChildNode();\n\t this.collectComments();\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t return this.finalize(node, new JSXNode.JSXEmptyExpression());\n\t };\n\t JSXParser.prototype.parseJSXExpressionContainer = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('{');\n\t var expression;\n\t if (this.matchJSX('}')) {\n\t expression = this.parseJSXEmptyExpression();\n\t this.expectJSX('}');\n\t }\n\t else {\n\t this.finishJSX();\n\t expression = this.parseAssignmentExpression();\n\t this.reenterJSX();\n\t }\n\t return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t };\n\t JSXParser.prototype.parseJSXChildren = function () {\n\t var children = [];\n\t while (!this.scanner.eof()) {\n\t var node = this.createJSXChildNode();\n\t var token = this.nextJSXText();\n\t if (token.start < token.end) {\n\t var raw = this.getTokenRaw(token);\n\t var child = this.finalize(node, new JSXNode.JSXText(token.value, raw));\n\t children.push(child);\n\t }\n\t if (this.scanner.source[this.scanner.index] === '{') {\n\t var container = this.parseJSXExpressionContainer();\n\t children.push(container);\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t return children;\n\t };\n\t JSXParser.prototype.parseComplexJSXElement = function (el) {\n\t var stack = [];\n\t while (!this.scanner.eof()) {\n\t el.children = el.children.concat(this.parseJSXChildren());\n\t var node = this.createJSXChildNode();\n\t var element = this.parseJSXBoundaryElement();\n\t if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) {\n\t var opening = element;\n\t if (opening.selfClosing) {\n\t var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null));\n\t el.children.push(child);\n\t }\n\t else {\n\t stack.push(el);\n\t el = { node: node, opening: opening, closing: null, children: [] };\n\t }\n\t }\n\t if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) {\n\t el.closing = element;\n\t var open_1 = getQualifiedElementName(el.opening.name);\n\t var close_1 = getQualifiedElementName(el.closing.name);\n\t if (open_1 !== close_1) {\n\t this.tolerateError('Expected corresponding JSX closing tag for %0', open_1);\n\t }\n\t if (stack.length > 0) {\n\t var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing));\n\t el = stack[stack.length - 1];\n\t el.children.push(child);\n\t stack.pop();\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t }\n\t return el;\n\t };\n\t JSXParser.prototype.parseJSXElement = function () {\n\t var node = this.createJSXNode();\n\t var opening = this.parseJSXOpeningElement();\n\t var children = [];\n\t var closing = null;\n\t if (!opening.selfClosing) {\n\t var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children });\n\t children = el.children;\n\t closing = el.closing;\n\t }\n\t return this.finalize(node, new JSXNode.JSXElement(opening, children, closing));\n\t };\n\t JSXParser.prototype.parseJSXRoot = function () {\n\t // Pop the opening '<' added from the lookahead.\n\t if (this.config.tokens) {\n\t this.tokens.pop();\n\t }\n\t this.startJSX();\n\t var element = this.parseJSXElement();\n\t this.finishJSX();\n\t return element;\n\t };\n\t JSXParser.prototype.isStartOfExpression = function () {\n\t return _super.prototype.isStartOfExpression.call(this) || this.match('<');\n\t };\n\t return JSXParser;\n\t}(parser_1.Parser));\n\texports.JSXParser = JSXParser;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// See also tools/generate-unicode-regex.js.\n\tvar Regex = {\n\t // Unicode v8.0.0 NonAsciiIdentifierStart:\n\t NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]/,\n\t // Unicode v8.0.0 NonAsciiIdentifierPart:\n\t NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B4\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n\t};\n\texports.Character = {\n\t /* tslint:disable:no-bitwise */\n\t fromCodePoint: function (cp) {\n\t return (cp < 0x10000) ? String.fromCharCode(cp) :\n\t String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +\n\t String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));\n\t },\n\t // https://tc39.github.io/ecma262/#sec-white-space\n\t isWhiteSpace: function (cp) {\n\t return (cp === 0x20) || (cp === 0x09) || (cp === 0x0B) || (cp === 0x0C) || (cp === 0xA0) ||\n\t (cp >= 0x1680 && [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(cp) >= 0);\n\t },\n\t // https://tc39.github.io/ecma262/#sec-line-terminators\n\t isLineTerminator: function (cp) {\n\t return (cp === 0x0A) || (cp === 0x0D) || (cp === 0x2028) || (cp === 0x2029);\n\t },\n\t // https://tc39.github.io/ecma262/#sec-names-and-keywords\n\t isIdentifierStart: function (cp) {\n\t return (cp === 0x24) || (cp === 0x5F) ||\n\t (cp >= 0x41 && cp <= 0x5A) ||\n\t (cp >= 0x61 && cp <= 0x7A) ||\n\t (cp === 0x5C) ||\n\t ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp)));\n\t },\n\t isIdentifierPart: function (cp) {\n\t return (cp === 0x24) || (cp === 0x5F) ||\n\t (cp >= 0x41 && cp <= 0x5A) ||\n\t (cp >= 0x61 && cp <= 0x7A) ||\n\t (cp >= 0x30 && cp <= 0x39) ||\n\t (cp === 0x5C) ||\n\t ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp)));\n\t },\n\t // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n\t isDecimalDigit: function (cp) {\n\t return (cp >= 0x30 && cp <= 0x39); // 0..9\n\t },\n\t isHexDigit: function (cp) {\n\t return (cp >= 0x30 && cp <= 0x39) ||\n\t (cp >= 0x41 && cp <= 0x46) ||\n\t (cp >= 0x61 && cp <= 0x66); // a..f\n\t },\n\t isOctalDigit: function (cp) {\n\t return (cp >= 0x30 && cp <= 0x37); // 0..7\n\t }\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar jsx_syntax_1 = __webpack_require__(6);\n\t/* tslint:disable:max-classes-per-file */\n\tvar JSXClosingElement = (function () {\n\t function JSXClosingElement(name) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement;\n\t this.name = name;\n\t }\n\t return JSXClosingElement;\n\t}());\n\texports.JSXClosingElement = JSXClosingElement;\n\tvar JSXElement = (function () {\n\t function JSXElement(openingElement, children, closingElement) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXElement;\n\t this.openingElement = openingElement;\n\t this.children = children;\n\t this.closingElement = closingElement;\n\t }\n\t return JSXElement;\n\t}());\n\texports.JSXElement = JSXElement;\n\tvar JSXEmptyExpression = (function () {\n\t function JSXEmptyExpression() {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression;\n\t }\n\t return JSXEmptyExpression;\n\t}());\n\texports.JSXEmptyExpression = JSXEmptyExpression;\n\tvar JSXExpressionContainer = (function () {\n\t function JSXExpressionContainer(expression) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer;\n\t this.expression = expression;\n\t }\n\t return JSXExpressionContainer;\n\t}());\n\texports.JSXExpressionContainer = JSXExpressionContainer;\n\tvar JSXIdentifier = (function () {\n\t function JSXIdentifier(name) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier;\n\t this.name = name;\n\t }\n\t return JSXIdentifier;\n\t}());\n\texports.JSXIdentifier = JSXIdentifier;\n\tvar JSXMemberExpression = (function () {\n\t function JSXMemberExpression(object, property) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression;\n\t this.object = object;\n\t this.property = property;\n\t }\n\t return JSXMemberExpression;\n\t}());\n\texports.JSXMemberExpression = JSXMemberExpression;\n\tvar JSXAttribute = (function () {\n\t function JSXAttribute(name, value) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXAttribute;\n\t this.name = name;\n\t this.value = value;\n\t }\n\t return JSXAttribute;\n\t}());\n\texports.JSXAttribute = JSXAttribute;\n\tvar JSXNamespacedName = (function () {\n\t function JSXNamespacedName(namespace, name) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName;\n\t this.namespace = namespace;\n\t this.name = name;\n\t }\n\t return JSXNamespacedName;\n\t}());\n\texports.JSXNamespacedName = JSXNamespacedName;\n\tvar JSXOpeningElement = (function () {\n\t function JSXOpeningElement(name, selfClosing, attributes) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement;\n\t this.name = name;\n\t this.selfClosing = selfClosing;\n\t this.attributes = attributes;\n\t }\n\t return JSXOpeningElement;\n\t}());\n\texports.JSXOpeningElement = JSXOpeningElement;\n\tvar JSXSpreadAttribute = (function () {\n\t function JSXSpreadAttribute(argument) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute;\n\t this.argument = argument;\n\t }\n\t return JSXSpreadAttribute;\n\t}());\n\texports.JSXSpreadAttribute = JSXSpreadAttribute;\n\tvar JSXText = (function () {\n\t function JSXText(value, raw) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXText;\n\t this.value = value;\n\t this.raw = raw;\n\t }\n\t return JSXText;\n\t}());\n\texports.JSXText = JSXText;\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.JSXSyntax = {\n\t JSXAttribute: 'JSXAttribute',\n\t JSXClosingElement: 'JSXClosingElement',\n\t JSXElement: 'JSXElement',\n\t JSXEmptyExpression: 'JSXEmptyExpression',\n\t JSXExpressionContainer: 'JSXExpressionContainer',\n\t JSXIdentifier: 'JSXIdentifier',\n\t JSXMemberExpression: 'JSXMemberExpression',\n\t JSXNamespacedName: 'JSXNamespacedName',\n\t JSXOpeningElement: 'JSXOpeningElement',\n\t JSXSpreadAttribute: 'JSXSpreadAttribute',\n\t JSXText: 'JSXText'\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __webpack_require__(2);\n\t/* tslint:disable:max-classes-per-file */\n\tvar ArrayExpression = (function () {\n\t function ArrayExpression(elements) {\n\t this.type = syntax_1.Syntax.ArrayExpression;\n\t this.elements = elements;\n\t }\n\t return ArrayExpression;\n\t}());\n\texports.ArrayExpression = ArrayExpression;\n\tvar ArrayPattern = (function () {\n\t function ArrayPattern(elements) {\n\t this.type = syntax_1.Syntax.ArrayPattern;\n\t this.elements = elements;\n\t }\n\t return ArrayPattern;\n\t}());\n\texports.ArrayPattern = ArrayPattern;\n\tvar ArrowFunctionExpression = (function () {\n\t function ArrowFunctionExpression(params, body, expression) {\n\t this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t this.id = null;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = expression;\n\t this.async = false;\n\t }\n\t return ArrowFunctionExpression;\n\t}());\n\texports.ArrowFunctionExpression = ArrowFunctionExpression;\n\tvar AssignmentExpression = (function () {\n\t function AssignmentExpression(operator, left, right) {\n\t this.type = syntax_1.Syntax.AssignmentExpression;\n\t this.operator = operator;\n\t this.left = left;\n\t this.right = right;\n\t }\n\t return AssignmentExpression;\n\t}());\n\texports.AssignmentExpression = AssignmentExpression;\n\tvar AssignmentPattern = (function () {\n\t function AssignmentPattern(left, right) {\n\t this.type = syntax_1.Syntax.AssignmentPattern;\n\t this.left = left;\n\t this.right = right;\n\t }\n\t return AssignmentPattern;\n\t}());\n\texports.AssignmentPattern = AssignmentPattern;\n\tvar AsyncArrowFunctionExpression = (function () {\n\t function AsyncArrowFunctionExpression(params, body, expression) {\n\t this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t this.id = null;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = expression;\n\t this.async = true;\n\t }\n\t return AsyncArrowFunctionExpression;\n\t}());\n\texports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression;\n\tvar AsyncFunctionDeclaration = (function () {\n\t function AsyncFunctionDeclaration(id, params, body) {\n\t this.type = syntax_1.Syntax.FunctionDeclaration;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = false;\n\t this.async = true;\n\t }\n\t return AsyncFunctionDeclaration;\n\t}());\n\texports.AsyncFunctionDeclaration = AsyncFunctionDeclaration;\n\tvar AsyncFunctionExpression = (function () {\n\t function AsyncFunctionExpression(id, params, body) {\n\t this.type = syntax_1.Syntax.FunctionExpression;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = false;\n\t this.async = true;\n\t }\n\t return AsyncFunctionExpression;\n\t}());\n\texports.AsyncFunctionExpression = AsyncFunctionExpression;\n\tvar AwaitExpression = (function () {\n\t function AwaitExpression(argument) {\n\t this.type = syntax_1.Syntax.AwaitExpression;\n\t this.argument = argument;\n\t }\n\t return AwaitExpression;\n\t}());\n\texports.AwaitExpression = AwaitExpression;\n\tvar BinaryExpression = (function () {\n\t function BinaryExpression(operator, left, right) {\n\t var logical = (operator === '||' || operator === '&&');\n\t this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression;\n\t this.operator = operator;\n\t this.left = left;\n\t this.right = right;\n\t }\n\t return BinaryExpression;\n\t}());\n\texports.BinaryExpression = BinaryExpression;\n\tvar BlockStatement = (function () {\n\t function BlockStatement(body) {\n\t this.type = syntax_1.Syntax.BlockStatement;\n\t this.body = body;\n\t }\n\t return BlockStatement;\n\t}());\n\texports.BlockStatement = BlockStatement;\n\tvar BreakStatement = (function () {\n\t function BreakStatement(label) {\n\t this.type = syntax_1.Syntax.BreakStatement;\n\t this.label = label;\n\t }\n\t return BreakStatement;\n\t}());\n\texports.BreakStatement = BreakStatement;\n\tvar CallExpression = (function () {\n\t function CallExpression(callee, args) {\n\t this.type = syntax_1.Syntax.CallExpression;\n\t this.callee = callee;\n\t this.arguments = args;\n\t }\n\t return CallExpression;\n\t}());\n\texports.CallExpression = CallExpression;\n\tvar CatchClause = (function () {\n\t function CatchClause(param, body) {\n\t this.type = syntax_1.Syntax.CatchClause;\n\t this.param = param;\n\t this.body = body;\n\t }\n\t return CatchClause;\n\t}());\n\texports.CatchClause = CatchClause;\n\tvar ClassBody = (function () {\n\t function ClassBody(body) {\n\t this.type = syntax_1.Syntax.ClassBody;\n\t this.body = body;\n\t }\n\t return ClassBody;\n\t}());\n\texports.ClassBody = ClassBody;\n\tvar ClassDeclaration = (function () {\n\t function ClassDeclaration(id, superClass, body) {\n\t this.type = syntax_1.Syntax.ClassDeclaration;\n\t this.id = id;\n\t this.superClass = superClass;\n\t this.body = body;\n\t }\n\t return ClassDeclaration;\n\t}());\n\texports.ClassDeclaration = ClassDeclaration;\n\tvar ClassExpression = (function () {\n\t function ClassExpression(id, superClass, body) {\n\t this.type = syntax_1.Syntax.ClassExpression;\n\t this.id = id;\n\t this.superClass = superClass;\n\t this.body = body;\n\t }\n\t return ClassExpression;\n\t}());\n\texports.ClassExpression = ClassExpression;\n\tvar ComputedMemberExpression = (function () {\n\t function ComputedMemberExpression(object, property) {\n\t this.type = syntax_1.Syntax.MemberExpression;\n\t this.computed = true;\n\t this.object = object;\n\t this.property = property;\n\t }\n\t return ComputedMemberExpression;\n\t}());\n\texports.ComputedMemberExpression = ComputedMemberExpression;\n\tvar ConditionalExpression = (function () {\n\t function ConditionalExpression(test, consequent, alternate) {\n\t this.type = syntax_1.Syntax.ConditionalExpression;\n\t this.test = test;\n\t this.consequent = consequent;\n\t this.alternate = alternate;\n\t }\n\t return ConditionalExpression;\n\t}());\n\texports.ConditionalExpression = ConditionalExpression;\n\tvar ContinueStatement = (function () {\n\t function ContinueStatement(label) {\n\t this.type = syntax_1.Syntax.ContinueStatement;\n\t this.label = label;\n\t }\n\t return ContinueStatement;\n\t}());\n\texports.ContinueStatement = ContinueStatement;\n\tvar DebuggerStatement = (function () {\n\t function DebuggerStatement() {\n\t this.type = syntax_1.Syntax.DebuggerStatement;\n\t }\n\t return DebuggerStatement;\n\t}());\n\texports.DebuggerStatement = DebuggerStatement;\n\tvar Directive = (function () {\n\t function Directive(expression, directive) {\n\t this.type = syntax_1.Syntax.ExpressionStatement;\n\t this.expression = expression;\n\t this.directive = directive;\n\t }\n\t return Directive;\n\t}());\n\texports.Directive = Directive;\n\tvar DoWhileStatement = (function () {\n\t function DoWhileStatement(body, test) {\n\t this.type = syntax_1.Syntax.DoWhileStatement;\n\t this.body = body;\n\t this.test = test;\n\t }\n\t return DoWhileStatement;\n\t}());\n\texports.DoWhileStatement = DoWhileStatement;\n\tvar EmptyStatement = (function () {\n\t function EmptyStatement() {\n\t this.type = syntax_1.Syntax.EmptyStatement;\n\t }\n\t return EmptyStatement;\n\t}());\n\texports.EmptyStatement = EmptyStatement;\n\tvar ExportAllDeclaration = (function () {\n\t function ExportAllDeclaration(source) {\n\t this.type = syntax_1.Syntax.ExportAllDeclaration;\n\t this.source = source;\n\t }\n\t return ExportAllDeclaration;\n\t}());\n\texports.ExportAllDeclaration = ExportAllDeclaration;\n\tvar ExportDefaultDeclaration = (function () {\n\t function ExportDefaultDeclaration(declaration) {\n\t this.type = syntax_1.Syntax.ExportDefaultDeclaration;\n\t this.declaration = declaration;\n\t }\n\t return ExportDefaultDeclaration;\n\t}());\n\texports.ExportDefaultDeclaration = ExportDefaultDeclaration;\n\tvar ExportNamedDeclaration = (function () {\n\t function ExportNamedDeclaration(declaration, specifiers, source) {\n\t this.type = syntax_1.Syntax.ExportNamedDeclaration;\n\t this.declaration = declaration;\n\t this.specifiers = specifiers;\n\t this.source = source;\n\t }\n\t return ExportNamedDeclaration;\n\t}());\n\texports.ExportNamedDeclaration = ExportNamedDeclaration;\n\tvar ExportSpecifier = (function () {\n\t function ExportSpecifier(local, exported) {\n\t this.type = syntax_1.Syntax.ExportSpecifier;\n\t this.exported = exported;\n\t this.local = local;\n\t }\n\t return ExportSpecifier;\n\t}());\n\texports.ExportSpecifier = ExportSpecifier;\n\tvar ExpressionStatement = (function () {\n\t function ExpressionStatement(expression) {\n\t this.type = syntax_1.Syntax.ExpressionStatement;\n\t this.expression = expression;\n\t }\n\t return ExpressionStatement;\n\t}());\n\texports.ExpressionStatement = ExpressionStatement;\n\tvar ForInStatement = (function () {\n\t function ForInStatement(left, right, body) {\n\t this.type = syntax_1.Syntax.ForInStatement;\n\t this.left = left;\n\t this.right = right;\n\t this.body = body;\n\t this.each = false;\n\t }\n\t return ForInStatement;\n\t}());\n\texports.ForInStatement = ForInStatement;\n\tvar ForOfStatement = (function () {\n\t function ForOfStatement(left, right, body) {\n\t this.type = syntax_1.Syntax.ForOfStatement;\n\t this.left = left;\n\t this.right = right;\n\t this.body = body;\n\t }\n\t return ForOfStatement;\n\t}());\n\texports.ForOfStatement = ForOfStatement;\n\tvar ForStatement = (function () {\n\t function ForStatement(init, test, update, body) {\n\t this.type = syntax_1.Syntax.ForStatement;\n\t this.init = init;\n\t this.test = test;\n\t this.update = update;\n\t this.body = body;\n\t }\n\t return ForStatement;\n\t}());\n\texports.ForStatement = ForStatement;\n\tvar FunctionDeclaration = (function () {\n\t function FunctionDeclaration(id, params, body, generator) {\n\t this.type = syntax_1.Syntax.FunctionDeclaration;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = generator;\n\t this.expression = false;\n\t this.async = false;\n\t }\n\t return FunctionDeclaration;\n\t}());\n\texports.FunctionDeclaration = FunctionDeclaration;\n\tvar FunctionExpression = (function () {\n\t function FunctionExpression(id, params, body, generator) {\n\t this.type = syntax_1.Syntax.FunctionExpression;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = generator;\n\t this.expression = false;\n\t this.async = false;\n\t }\n\t return FunctionExpression;\n\t}());\n\texports.FunctionExpression = FunctionExpression;\n\tvar Identifier = (function () {\n\t function Identifier(name) {\n\t this.type = syntax_1.Syntax.Identifier;\n\t this.name = name;\n\t }\n\t return Identifier;\n\t}());\n\texports.Identifier = Identifier;\n\tvar IfStatement = (function () {\n\t function IfStatement(test, consequent, alternate) {\n\t this.type = syntax_1.Syntax.IfStatement;\n\t this.test = test;\n\t this.consequent = consequent;\n\t this.alternate = alternate;\n\t }\n\t return IfStatement;\n\t}());\n\texports.IfStatement = IfStatement;\n\tvar ImportDeclaration = (function () {\n\t function ImportDeclaration(specifiers, source) {\n\t this.type = syntax_1.Syntax.ImportDeclaration;\n\t this.specifiers = specifiers;\n\t this.source = source;\n\t }\n\t return ImportDeclaration;\n\t}());\n\texports.ImportDeclaration = ImportDeclaration;\n\tvar ImportDefaultSpecifier = (function () {\n\t function ImportDefaultSpecifier(local) {\n\t this.type = syntax_1.Syntax.ImportDefaultSpecifier;\n\t this.local = local;\n\t }\n\t return ImportDefaultSpecifier;\n\t}());\n\texports.ImportDefaultSpecifier = ImportDefaultSpecifier;\n\tvar ImportNamespaceSpecifier = (function () {\n\t function ImportNamespaceSpecifier(local) {\n\t this.type = syntax_1.Syntax.ImportNamespaceSpecifier;\n\t this.local = local;\n\t }\n\t return ImportNamespaceSpecifier;\n\t}());\n\texports.ImportNamespaceSpecifier = ImportNamespaceSpecifier;\n\tvar ImportSpecifier = (function () {\n\t function ImportSpecifier(local, imported) {\n\t this.type = syntax_1.Syntax.ImportSpecifier;\n\t this.local = local;\n\t this.imported = imported;\n\t }\n\t return ImportSpecifier;\n\t}());\n\texports.ImportSpecifier = ImportSpecifier;\n\tvar LabeledStatement = (function () {\n\t function LabeledStatement(label, body) {\n\t this.type = syntax_1.Syntax.LabeledStatement;\n\t this.label = label;\n\t this.body = body;\n\t }\n\t return LabeledStatement;\n\t}());\n\texports.LabeledStatement = LabeledStatement;\n\tvar Literal = (function () {\n\t function Literal(value, raw) {\n\t this.type = syntax_1.Syntax.Literal;\n\t this.value = value;\n\t this.raw = raw;\n\t }\n\t return Literal;\n\t}());\n\texports.Literal = Literal;\n\tvar MetaProperty = (function () {\n\t function MetaProperty(meta, property) {\n\t this.type = syntax_1.Syntax.MetaProperty;\n\t this.meta = meta;\n\t this.property = property;\n\t }\n\t return MetaProperty;\n\t}());\n\texports.MetaProperty = MetaProperty;\n\tvar MethodDefinition = (function () {\n\t function MethodDefinition(key, computed, value, kind, isStatic) {\n\t this.type = syntax_1.Syntax.MethodDefinition;\n\t this.key = key;\n\t this.computed = computed;\n\t this.value = value;\n\t this.kind = kind;\n\t this.static = isStatic;\n\t }\n\t return MethodDefinition;\n\t}());\n\texports.MethodDefinition = MethodDefinition;\n\tvar Module = (function () {\n\t function Module(body) {\n\t this.type = syntax_1.Syntax.Program;\n\t this.body = body;\n\t this.sourceType = 'module';\n\t }\n\t return Module;\n\t}());\n\texports.Module = Module;\n\tvar NewExpression = (function () {\n\t function NewExpression(callee, args) {\n\t this.type = syntax_1.Syntax.NewExpression;\n\t this.callee = callee;\n\t this.arguments = args;\n\t }\n\t return NewExpression;\n\t}());\n\texports.NewExpression = NewExpression;\n\tvar ObjectExpression = (function () {\n\t function ObjectExpression(properties) {\n\t this.type = syntax_1.Syntax.ObjectExpression;\n\t this.properties = properties;\n\t }\n\t return ObjectExpression;\n\t}());\n\texports.ObjectExpression = ObjectExpression;\n\tvar ObjectPattern = (function () {\n\t function ObjectPattern(properties) {\n\t this.type = syntax_1.Syntax.ObjectPattern;\n\t this.properties = properties;\n\t }\n\t return ObjectPattern;\n\t}());\n\texports.ObjectPattern = ObjectPattern;\n\tvar Property = (function () {\n\t function Property(kind, key, computed, value, method, shorthand) {\n\t this.type = syntax_1.Syntax.Property;\n\t this.key = key;\n\t this.computed = computed;\n\t this.value = value;\n\t this.kind = kind;\n\t this.method = method;\n\t this.shorthand = shorthand;\n\t }\n\t return Property;\n\t}());\n\texports.Property = Property;\n\tvar RegexLiteral = (function () {\n\t function RegexLiteral(value, raw, pattern, flags) {\n\t this.type = syntax_1.Syntax.Literal;\n\t this.value = value;\n\t this.raw = raw;\n\t this.regex = { pattern: pattern, flags: flags };\n\t }\n\t return RegexLiteral;\n\t}());\n\texports.RegexLiteral = RegexLiteral;\n\tvar RestElement = (function () {\n\t function RestElement(argument) {\n\t this.type = syntax_1.Syntax.RestElement;\n\t this.argument = argument;\n\t }\n\t return RestElement;\n\t}());\n\texports.RestElement = RestElement;\n\tvar ReturnStatement = (function () {\n\t function ReturnStatement(argument) {\n\t this.type = syntax_1.Syntax.ReturnStatement;\n\t this.argument = argument;\n\t }\n\t return ReturnStatement;\n\t}());\n\texports.ReturnStatement = ReturnStatement;\n\tvar Script = (function () {\n\t function Script(body) {\n\t this.type = syntax_1.Syntax.Program;\n\t this.body = body;\n\t this.sourceType = 'script';\n\t }\n\t return Script;\n\t}());\n\texports.Script = Script;\n\tvar SequenceExpression = (function () {\n\t function SequenceExpression(expressions) {\n\t this.type = syntax_1.Syntax.SequenceExpression;\n\t this.expressions = expressions;\n\t }\n\t return SequenceExpression;\n\t}());\n\texports.SequenceExpression = SequenceExpression;\n\tvar SpreadElement = (function () {\n\t function SpreadElement(argument) {\n\t this.type = syntax_1.Syntax.SpreadElement;\n\t this.argument = argument;\n\t }\n\t return SpreadElement;\n\t}());\n\texports.SpreadElement = SpreadElement;\n\tvar StaticMemberExpression = (function () {\n\t function StaticMemberExpression(object, property) {\n\t this.type = syntax_1.Syntax.MemberExpression;\n\t this.computed = false;\n\t this.object = object;\n\t this.property = property;\n\t }\n\t return StaticMemberExpression;\n\t}());\n\texports.StaticMemberExpression = StaticMemberExpression;\n\tvar Super = (function () {\n\t function Super() {\n\t this.type = syntax_1.Syntax.Super;\n\t }\n\t return Super;\n\t}());\n\texports.Super = Super;\n\tvar SwitchCase = (function () {\n\t function SwitchCase(test, consequent) {\n\t this.type = syntax_1.Syntax.SwitchCase;\n\t this.test = test;\n\t this.consequent = consequent;\n\t }\n\t return SwitchCase;\n\t}());\n\texports.SwitchCase = SwitchCase;\n\tvar SwitchStatement = (function () {\n\t function SwitchStatement(discriminant, cases) {\n\t this.type = syntax_1.Syntax.SwitchStatement;\n\t this.discriminant = discriminant;\n\t this.cases = cases;\n\t }\n\t return SwitchStatement;\n\t}());\n\texports.SwitchStatement = SwitchStatement;\n\tvar TaggedTemplateExpression = (function () {\n\t function TaggedTemplateExpression(tag, quasi) {\n\t this.type = syntax_1.Syntax.TaggedTemplateExpression;\n\t this.tag = tag;\n\t this.quasi = quasi;\n\t }\n\t return TaggedTemplateExpression;\n\t}());\n\texports.TaggedTemplateExpression = TaggedTemplateExpression;\n\tvar TemplateElement = (function () {\n\t function TemplateElement(value, tail) {\n\t this.type = syntax_1.Syntax.TemplateElement;\n\t this.value = value;\n\t this.tail = tail;\n\t }\n\t return TemplateElement;\n\t}());\n\texports.TemplateElement = TemplateElement;\n\tvar TemplateLiteral = (function () {\n\t function TemplateLiteral(quasis, expressions) {\n\t this.type = syntax_1.Syntax.TemplateLiteral;\n\t this.quasis = quasis;\n\t this.expressions = expressions;\n\t }\n\t return TemplateLiteral;\n\t}());\n\texports.TemplateLiteral = TemplateLiteral;\n\tvar ThisExpression = (function () {\n\t function ThisExpression() {\n\t this.type = syntax_1.Syntax.ThisExpression;\n\t }\n\t return ThisExpression;\n\t}());\n\texports.ThisExpression = ThisExpression;\n\tvar ThrowStatement = (function () {\n\t function ThrowStatement(argument) {\n\t this.type = syntax_1.Syntax.ThrowStatement;\n\t this.argument = argument;\n\t }\n\t return ThrowStatement;\n\t}());\n\texports.ThrowStatement = ThrowStatement;\n\tvar TryStatement = (function () {\n\t function TryStatement(block, handler, finalizer) {\n\t this.type = syntax_1.Syntax.TryStatement;\n\t this.block = block;\n\t this.handler = handler;\n\t this.finalizer = finalizer;\n\t }\n\t return TryStatement;\n\t}());\n\texports.TryStatement = TryStatement;\n\tvar UnaryExpression = (function () {\n\t function UnaryExpression(operator, argument) {\n\t this.type = syntax_1.Syntax.UnaryExpression;\n\t this.operator = operator;\n\t this.argument = argument;\n\t this.prefix = true;\n\t }\n\t return UnaryExpression;\n\t}());\n\texports.UnaryExpression = UnaryExpression;\n\tvar UpdateExpression = (function () {\n\t function UpdateExpression(operator, argument, prefix) {\n\t this.type = syntax_1.Syntax.UpdateExpression;\n\t this.operator = operator;\n\t this.argument = argument;\n\t this.prefix = prefix;\n\t }\n\t return UpdateExpression;\n\t}());\n\texports.UpdateExpression = UpdateExpression;\n\tvar VariableDeclaration = (function () {\n\t function VariableDeclaration(declarations, kind) {\n\t this.type = syntax_1.Syntax.VariableDeclaration;\n\t this.declarations = declarations;\n\t this.kind = kind;\n\t }\n\t return VariableDeclaration;\n\t}());\n\texports.VariableDeclaration = VariableDeclaration;\n\tvar VariableDeclarator = (function () {\n\t function VariableDeclarator(id, init) {\n\t this.type = syntax_1.Syntax.VariableDeclarator;\n\t this.id = id;\n\t this.init = init;\n\t }\n\t return VariableDeclarator;\n\t}());\n\texports.VariableDeclarator = VariableDeclarator;\n\tvar WhileStatement = (function () {\n\t function WhileStatement(test, body) {\n\t this.type = syntax_1.Syntax.WhileStatement;\n\t this.test = test;\n\t this.body = body;\n\t }\n\t return WhileStatement;\n\t}());\n\texports.WhileStatement = WhileStatement;\n\tvar WithStatement = (function () {\n\t function WithStatement(object, body) {\n\t this.type = syntax_1.Syntax.WithStatement;\n\t this.object = object;\n\t this.body = body;\n\t }\n\t return WithStatement;\n\t}());\n\texports.WithStatement = WithStatement;\n\tvar YieldExpression = (function () {\n\t function YieldExpression(argument, delegate) {\n\t this.type = syntax_1.Syntax.YieldExpression;\n\t this.argument = argument;\n\t this.delegate = delegate;\n\t }\n\t return YieldExpression;\n\t}());\n\texports.YieldExpression = YieldExpression;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __webpack_require__(9);\n\tvar error_handler_1 = __webpack_require__(10);\n\tvar messages_1 = __webpack_require__(11);\n\tvar Node = __webpack_require__(7);\n\tvar scanner_1 = __webpack_require__(12);\n\tvar syntax_1 = __webpack_require__(2);\n\tvar token_1 = __webpack_require__(13);\n\tvar ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder';\n\tvar Parser = (function () {\n\t function Parser(code, options, delegate) {\n\t if (options === void 0) { options = {}; }\n\t this.config = {\n\t range: (typeof options.range === 'boolean') && options.range,\n\t loc: (typeof options.loc === 'boolean') && options.loc,\n\t source: null,\n\t tokens: (typeof options.tokens === 'boolean') && options.tokens,\n\t comment: (typeof options.comment === 'boolean') && options.comment,\n\t tolerant: (typeof options.tolerant === 'boolean') && options.tolerant\n\t };\n\t if (this.config.loc && options.source && options.source !== null) {\n\t this.config.source = String(options.source);\n\t }\n\t this.delegate = delegate;\n\t this.errorHandler = new error_handler_1.ErrorHandler();\n\t this.errorHandler.tolerant = this.config.tolerant;\n\t this.scanner = new scanner_1.Scanner(code, this.errorHandler);\n\t this.scanner.trackComment = this.config.comment;\n\t this.operatorPrecedence = {\n\t ')': 0,\n\t ';': 0,\n\t ',': 0,\n\t '=': 0,\n\t ']': 0,\n\t '||': 1,\n\t '&&': 2,\n\t '|': 3,\n\t '^': 4,\n\t '&': 5,\n\t '==': 6,\n\t '!=': 6,\n\t '===': 6,\n\t '!==': 6,\n\t '<': 7,\n\t '>': 7,\n\t '<=': 7,\n\t '>=': 7,\n\t '<<': 8,\n\t '>>': 8,\n\t '>>>': 8,\n\t '+': 9,\n\t '-': 9,\n\t '*': 11,\n\t '/': 11,\n\t '%': 11\n\t };\n\t this.lookahead = {\n\t type: 2 /* EOF */,\n\t value: '',\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: 0,\n\t start: 0,\n\t end: 0\n\t };\n\t this.hasLineTerminator = false;\n\t this.context = {\n\t isModule: false,\n\t await: false,\n\t allowIn: true,\n\t allowStrictDirective: true,\n\t allowYield: true,\n\t firstCoverInitializedNameError: null,\n\t isAssignmentTarget: false,\n\t isBindingElement: false,\n\t inFunctionBody: false,\n\t inIteration: false,\n\t inSwitch: false,\n\t labelSet: {},\n\t strict: false\n\t };\n\t this.tokens = [];\n\t this.startMarker = {\n\t index: 0,\n\t line: this.scanner.lineNumber,\n\t column: 0\n\t };\n\t this.lastMarker = {\n\t index: 0,\n\t line: this.scanner.lineNumber,\n\t column: 0\n\t };\n\t this.nextToken();\n\t this.lastMarker = {\n\t index: this.scanner.index,\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t };\n\t }\n\t Parser.prototype.throwError = function (messageFormat) {\n\t var values = [];\n\t for (var _i = 1; _i < arguments.length; _i++) {\n\t values[_i - 1] = arguments[_i];\n\t }\n\t var args = Array.prototype.slice.call(arguments, 1);\n\t var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t return args[idx];\n\t });\n\t var index = this.lastMarker.index;\n\t var line = this.lastMarker.line;\n\t var column = this.lastMarker.column + 1;\n\t throw this.errorHandler.createError(index, line, column, msg);\n\t };\n\t Parser.prototype.tolerateError = function (messageFormat) {\n\t var values = [];\n\t for (var _i = 1; _i < arguments.length; _i++) {\n\t values[_i - 1] = arguments[_i];\n\t }\n\t var args = Array.prototype.slice.call(arguments, 1);\n\t var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t return args[idx];\n\t });\n\t var index = this.lastMarker.index;\n\t var line = this.scanner.lineNumber;\n\t var column = this.lastMarker.column + 1;\n\t this.errorHandler.tolerateError(index, line, column, msg);\n\t };\n\t // Throw an exception because of the token.\n\t Parser.prototype.unexpectedTokenError = function (token, message) {\n\t var msg = message || messages_1.Messages.UnexpectedToken;\n\t var value;\n\t if (token) {\n\t if (!message) {\n\t msg = (token.type === 2 /* EOF */) ? messages_1.Messages.UnexpectedEOS :\n\t (token.type === 3 /* Identifier */) ? messages_1.Messages.UnexpectedIdentifier :\n\t (token.type === 6 /* NumericLiteral */) ? messages_1.Messages.UnexpectedNumber :\n\t (token.type === 8 /* StringLiteral */) ? messages_1.Messages.UnexpectedString :\n\t (token.type === 10 /* Template */) ? messages_1.Messages.UnexpectedTemplate :\n\t messages_1.Messages.UnexpectedToken;\n\t if (token.type === 4 /* Keyword */) {\n\t if (this.scanner.isFutureReservedWord(token.value)) {\n\t msg = messages_1.Messages.UnexpectedReserved;\n\t }\n\t else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) {\n\t msg = messages_1.Messages.StrictReservedWord;\n\t }\n\t }\n\t }\n\t value = token.value;\n\t }\n\t else {\n\t value = 'ILLEGAL';\n\t }\n\t msg = msg.replace('%0', value);\n\t if (token && typeof token.lineNumber === 'number') {\n\t var index = token.start;\n\t var line = token.lineNumber;\n\t var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column;\n\t var column = token.start - lastMarkerLineStart + 1;\n\t return this.errorHandler.createError(index, line, column, msg);\n\t }\n\t else {\n\t var index = this.lastMarker.index;\n\t var line = this.lastMarker.line;\n\t var column = this.lastMarker.column + 1;\n\t return this.errorHandler.createError(index, line, column, msg);\n\t }\n\t };\n\t Parser.prototype.throwUnexpectedToken = function (token, message) {\n\t throw this.unexpectedTokenError(token, message);\n\t };\n\t Parser.prototype.tolerateUnexpectedToken = function (token, message) {\n\t this.errorHandler.tolerate(this.unexpectedTokenError(token, message));\n\t };\n\t Parser.prototype.collectComments = function () {\n\t if (!this.config.comment) {\n\t this.scanner.scanComments();\n\t }\n\t else {\n\t var comments = this.scanner.scanComments();\n\t if (comments.length > 0 && this.delegate) {\n\t for (var i = 0; i < comments.length; ++i) {\n\t var e = comments[i];\n\t var node = void 0;\n\t node = {\n\t type: e.multiLine ? 'BlockComment' : 'LineComment',\n\t value: this.scanner.source.slice(e.slice[0], e.slice[1])\n\t };\n\t if (this.config.range) {\n\t node.range = e.range;\n\t }\n\t if (this.config.loc) {\n\t node.loc = e.loc;\n\t }\n\t var metadata = {\n\t start: {\n\t line: e.loc.start.line,\n\t column: e.loc.start.column,\n\t offset: e.range[0]\n\t },\n\t end: {\n\t line: e.loc.end.line,\n\t column: e.loc.end.column,\n\t offset: e.range[1]\n\t }\n\t };\n\t this.delegate(node, metadata);\n\t }\n\t }\n\t }\n\t };\n\t // From internal representation to an external structure\n\t Parser.prototype.getTokenRaw = function (token) {\n\t return this.scanner.source.slice(token.start, token.end);\n\t };\n\t Parser.prototype.convertToken = function (token) {\n\t var t = {\n\t type: token_1.TokenName[token.type],\n\t value: this.getTokenRaw(token)\n\t };\n\t if (this.config.range) {\n\t t.range = [token.start, token.end];\n\t }\n\t if (this.config.loc) {\n\t t.loc = {\n\t start: {\n\t line: this.startMarker.line,\n\t column: this.startMarker.column\n\t },\n\t end: {\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t }\n\t };\n\t }\n\t if (token.type === 9 /* RegularExpression */) {\n\t var pattern = token.pattern;\n\t var flags = token.flags;\n\t t.regex = { pattern: pattern, flags: flags };\n\t }\n\t return t;\n\t };\n\t Parser.prototype.nextToken = function () {\n\t var token = this.lookahead;\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t this.collectComments();\n\t if (this.scanner.index !== this.startMarker.index) {\n\t this.startMarker.index = this.scanner.index;\n\t this.startMarker.line = this.scanner.lineNumber;\n\t this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t }\n\t var next = this.scanner.lex();\n\t this.hasLineTerminator = (token.lineNumber !== next.lineNumber);\n\t if (next && this.context.strict && next.type === 3 /* Identifier */) {\n\t if (this.scanner.isStrictModeReservedWord(next.value)) {\n\t next.type = 4 /* Keyword */;\n\t }\n\t }\n\t this.lookahead = next;\n\t if (this.config.tokens && next.type !== 2 /* EOF */) {\n\t this.tokens.push(this.convertToken(next));\n\t }\n\t return token;\n\t };\n\t Parser.prototype.nextRegexToken = function () {\n\t this.collectComments();\n\t var token = this.scanner.scanRegExp();\n\t if (this.config.tokens) {\n\t // Pop the previous token, '/' or '/='\n\t // This is added from the lookahead token.\n\t this.tokens.pop();\n\t this.tokens.push(this.convertToken(token));\n\t }\n\t // Prime the next lookahead.\n\t this.lookahead = token;\n\t this.nextToken();\n\t return token;\n\t };\n\t Parser.prototype.createNode = function () {\n\t return {\n\t index: this.startMarker.index,\n\t line: this.startMarker.line,\n\t column: this.startMarker.column\n\t };\n\t };\n\t Parser.prototype.startNode = function (token, lastLineStart) {\n\t if (lastLineStart === void 0) { lastLineStart = 0; }\n\t var column = token.start - token.lineStart;\n\t var line = token.lineNumber;\n\t if (column < 0) {\n\t column += lastLineStart;\n\t line--;\n\t }\n\t return {\n\t index: token.start,\n\t line: line,\n\t column: column\n\t };\n\t };\n\t Parser.prototype.finalize = function (marker, node) {\n\t if (this.config.range) {\n\t node.range = [marker.index, this.lastMarker.index];\n\t }\n\t if (this.config.loc) {\n\t node.loc = {\n\t start: {\n\t line: marker.line,\n\t column: marker.column,\n\t },\n\t end: {\n\t line: this.lastMarker.line,\n\t column: this.lastMarker.column\n\t }\n\t };\n\t if (this.config.source) {\n\t node.loc.source = this.config.source;\n\t }\n\t }\n\t if (this.delegate) {\n\t var metadata = {\n\t start: {\n\t line: marker.line,\n\t column: marker.column,\n\t offset: marker.index\n\t },\n\t end: {\n\t line: this.lastMarker.line,\n\t column: this.lastMarker.column,\n\t offset: this.lastMarker.index\n\t }\n\t };\n\t this.delegate(node, metadata);\n\t }\n\t return node;\n\t };\n\t // Expect the next token to match the specified punctuator.\n\t // If not, an exception will be thrown.\n\t Parser.prototype.expect = function (value) {\n\t var token = this.nextToken();\n\t if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t };\n\t // Quietly expect a comma when in tolerant mode, otherwise delegates to expect().\n\t Parser.prototype.expectCommaSeparator = function () {\n\t if (this.config.tolerant) {\n\t var token = this.lookahead;\n\t if (token.type === 7 /* Punctuator */ && token.value === ',') {\n\t this.nextToken();\n\t }\n\t else if (token.type === 7 /* Punctuator */ && token.value === ';') {\n\t this.nextToken();\n\t this.tolerateUnexpectedToken(token);\n\t }\n\t else {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken);\n\t }\n\t }\n\t else {\n\t this.expect(',');\n\t }\n\t };\n\t // Expect the next token to match the specified keyword.\n\t // If not, an exception will be thrown.\n\t Parser.prototype.expectKeyword = function (keyword) {\n\t var token = this.nextToken();\n\t if (token.type !== 4 /* Keyword */ || token.value !== keyword) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t };\n\t // Return true if the next token matches the specified punctuator.\n\t Parser.prototype.match = function (value) {\n\t return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value;\n\t };\n\t // Return true if the next token matches the specified keyword\n\t Parser.prototype.matchKeyword = function (keyword) {\n\t return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword;\n\t };\n\t // Return true if the next token matches the specified contextual keyword\n\t // (where an identifier is sometimes a keyword depending on the context)\n\t Parser.prototype.matchContextualKeyword = function (keyword) {\n\t return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword;\n\t };\n\t // Return true if the next token is an assignment operator\n\t Parser.prototype.matchAssign = function () {\n\t if (this.lookahead.type !== 7 /* Punctuator */) {\n\t return false;\n\t }\n\t var op = this.lookahead.value;\n\t return op === '=' ||\n\t op === '*=' ||\n\t op === '**=' ||\n\t op === '/=' ||\n\t op === '%=' ||\n\t op === '+=' ||\n\t op === '-=' ||\n\t op === '<<=' ||\n\t op === '>>=' ||\n\t op === '>>>=' ||\n\t op === '&=' ||\n\t op === '^=' ||\n\t op === '|=';\n\t };\n\t // Cover grammar support.\n\t //\n\t // When an assignment expression position starts with an left parenthesis, the determination of the type\n\t // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n\t // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n\t //\n\t // There are three productions that can be parsed in a parentheses pair that needs to be determined\n\t // after the outermost pair is closed. They are:\n\t //\n\t // 1. AssignmentExpression\n\t // 2. BindingElements\n\t // 3. AssignmentTargets\n\t //\n\t // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n\t // binding element or assignment target.\n\t //\n\t // The three productions have the relationship:\n\t //\n\t // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression\n\t //\n\t // with a single exception that CoverInitializedName when used directly in an Expression, generates\n\t // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n\t // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n\t //\n\t // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n\t // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n\t // the CoverInitializedName check is conducted.\n\t //\n\t // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n\t // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n\t // pattern. The CoverInitializedName check is deferred.\n\t Parser.prototype.isolateCoverGrammar = function (parseFunction) {\n\t var previousIsBindingElement = this.context.isBindingElement;\n\t var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t this.context.isBindingElement = true;\n\t this.context.isAssignmentTarget = true;\n\t this.context.firstCoverInitializedNameError = null;\n\t var result = parseFunction.call(this);\n\t if (this.context.firstCoverInitializedNameError !== null) {\n\t this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);\n\t }\n\t this.context.isBindingElement = previousIsBindingElement;\n\t this.context.isAssignmentTarget = previousIsAssignmentTarget;\n\t this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;\n\t return result;\n\t };\n\t Parser.prototype.inheritCoverGrammar = function (parseFunction) {\n\t var previousIsBindingElement = this.context.isBindingElement;\n\t var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t this.context.isBindingElement = true;\n\t this.context.isAssignmentTarget = true;\n\t this.context.firstCoverInitializedNameError = null;\n\t var result = parseFunction.call(this);\n\t this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement;\n\t this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget;\n\t this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError;\n\t return result;\n\t };\n\t Parser.prototype.consumeSemicolon = function () {\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t else if (!this.hasLineTerminator) {\n\t if (this.lookahead.type !== 2 /* EOF */ && !this.match('}')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t this.lastMarker.index = this.startMarker.index;\n\t this.lastMarker.line = this.startMarker.line;\n\t this.lastMarker.column = this.startMarker.column;\n\t }\n\t };\n\t // https://tc39.github.io/ecma262/#sec-primary-expression\n\t Parser.prototype.parsePrimaryExpression = function () {\n\t var node = this.createNode();\n\t var expr;\n\t var token, raw;\n\t switch (this.lookahead.type) {\n\t case 3 /* Identifier */:\n\t if ((this.context.isModule || this.context.await) && this.lookahead.value === 'await') {\n\t this.tolerateUnexpectedToken(this.lookahead);\n\t }\n\t expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t break;\n\t case 6 /* NumericLiteral */:\n\t case 8 /* StringLiteral */:\n\t if (this.context.strict && this.lookahead.octal) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral);\n\t }\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t token = this.nextToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.Literal(token.value, raw));\n\t break;\n\t case 1 /* BooleanLiteral */:\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t token = this.nextToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.Literal(token.value === 'true', raw));\n\t break;\n\t case 5 /* NullLiteral */:\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t token = this.nextToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.Literal(null, raw));\n\t break;\n\t case 10 /* Template */:\n\t expr = this.parseTemplateLiteral();\n\t break;\n\t case 7 /* Punctuator */:\n\t switch (this.lookahead.value) {\n\t case '(':\n\t this.context.isBindingElement = false;\n\t expr = this.inheritCoverGrammar(this.parseGroupExpression);\n\t break;\n\t case '[':\n\t expr = this.inheritCoverGrammar(this.parseArrayInitializer);\n\t break;\n\t case '{':\n\t expr = this.inheritCoverGrammar(this.parseObjectInitializer);\n\t break;\n\t case '/':\n\t case '/=':\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t this.scanner.index = this.startMarker.index;\n\t token = this.nextRegexToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags));\n\t break;\n\t default:\n\t expr = this.throwUnexpectedToken(this.nextToken());\n\t }\n\t break;\n\t case 4 /* Keyword */:\n\t if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) {\n\t expr = this.parseIdentifierName();\n\t }\n\t else if (!this.context.strict && this.matchKeyword('let')) {\n\t expr = this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t }\n\t else {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t if (this.matchKeyword('function')) {\n\t expr = this.parseFunctionExpression();\n\t }\n\t else if (this.matchKeyword('this')) {\n\t this.nextToken();\n\t expr = this.finalize(node, new Node.ThisExpression());\n\t }\n\t else if (this.matchKeyword('class')) {\n\t expr = this.parseClassExpression();\n\t }\n\t else {\n\t expr = this.throwUnexpectedToken(this.nextToken());\n\t }\n\t }\n\t break;\n\t default:\n\t expr = this.throwUnexpectedToken(this.nextToken());\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-array-initializer\n\t Parser.prototype.parseSpreadElement = function () {\n\t var node = this.createNode();\n\t this.expect('...');\n\t var arg = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t return this.finalize(node, new Node.SpreadElement(arg));\n\t };\n\t Parser.prototype.parseArrayInitializer = function () {\n\t var node = this.createNode();\n\t var elements = [];\n\t this.expect('[');\n\t while (!this.match(']')) {\n\t if (this.match(',')) {\n\t this.nextToken();\n\t elements.push(null);\n\t }\n\t else if (this.match('...')) {\n\t var element = this.parseSpreadElement();\n\t if (!this.match(']')) {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t this.expect(',');\n\t }\n\t elements.push(element);\n\t }\n\t else {\n\t elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t if (!this.match(']')) {\n\t this.expect(',');\n\t }\n\t }\n\t }\n\t this.expect(']');\n\t return this.finalize(node, new Node.ArrayExpression(elements));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-object-initializer\n\t Parser.prototype.parsePropertyMethod = function (params) {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = params.simple;\n\t var body = this.isolateCoverGrammar(this.parseFunctionSourceElements);\n\t if (this.context.strict && params.firstRestricted) {\n\t this.tolerateUnexpectedToken(params.firstRestricted, params.message);\n\t }\n\t if (this.context.strict && params.stricted) {\n\t this.tolerateUnexpectedToken(params.stricted, params.message);\n\t }\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t return body;\n\t };\n\t Parser.prototype.parsePropertyMethodFunction = function () {\n\t var isGenerator = false;\n\t var node = this.createNode();\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = true;\n\t var params = this.parseFormalParameters();\n\t var method = this.parsePropertyMethod(params);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t };\n\t Parser.prototype.parsePropertyMethodAsyncFunction = function () {\n\t var node = this.createNode();\n\t var previousAllowYield = this.context.allowYield;\n\t var previousAwait = this.context.await;\n\t this.context.allowYield = false;\n\t this.context.await = true;\n\t var params = this.parseFormalParameters();\n\t var method = this.parsePropertyMethod(params);\n\t this.context.allowYield = previousAllowYield;\n\t this.context.await = previousAwait;\n\t return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method));\n\t };\n\t Parser.prototype.parseObjectPropertyKey = function () {\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t var key;\n\t switch (token.type) {\n\t case 8 /* StringLiteral */:\n\t case 6 /* NumericLiteral */:\n\t if (this.context.strict && token.octal) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral);\n\t }\n\t var raw = this.getTokenRaw(token);\n\t key = this.finalize(node, new Node.Literal(token.value, raw));\n\t break;\n\t case 3 /* Identifier */:\n\t case 1 /* BooleanLiteral */:\n\t case 5 /* NullLiteral */:\n\t case 4 /* Keyword */:\n\t key = this.finalize(node, new Node.Identifier(token.value));\n\t break;\n\t case 7 /* Punctuator */:\n\t if (token.value === '[') {\n\t key = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t this.expect(']');\n\t }\n\t else {\n\t key = this.throwUnexpectedToken(token);\n\t }\n\t break;\n\t default:\n\t key = this.throwUnexpectedToken(token);\n\t }\n\t return key;\n\t };\n\t Parser.prototype.isPropertyKey = function (key, value) {\n\t return (key.type === syntax_1.Syntax.Identifier && key.name === value) ||\n\t (key.type === syntax_1.Syntax.Literal && key.value === value);\n\t };\n\t Parser.prototype.parseObjectProperty = function (hasProto) {\n\t var node = this.createNode();\n\t var token = this.lookahead;\n\t var kind;\n\t var key = null;\n\t var value = null;\n\t var computed = false;\n\t var method = false;\n\t var shorthand = false;\n\t var isAsync = false;\n\t if (token.type === 3 /* Identifier */) {\n\t var id = token.value;\n\t this.nextToken();\n\t computed = this.match('[');\n\t isAsync = !this.hasLineTerminator && (id === 'async') &&\n\t !this.match(':') && !this.match('(') && !this.match('*') && !this.match(',');\n\t key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id));\n\t }\n\t else if (this.match('*')) {\n\t this.nextToken();\n\t }\n\t else {\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t }\n\t var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'get' && lookaheadPropertyKey) {\n\t kind = 'get';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t this.context.allowYield = false;\n\t value = this.parseGetterMethod();\n\t }\n\t else if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'set' && lookaheadPropertyKey) {\n\t kind = 'set';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseSetterMethod();\n\t }\n\t else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t kind = 'init';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseGeneratorMethod();\n\t method = true;\n\t }\n\t else {\n\t if (!key) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t kind = 'init';\n\t if (this.match(':') && !isAsync) {\n\t if (!computed && this.isPropertyKey(key, '__proto__')) {\n\t if (hasProto.value) {\n\t this.tolerateError(messages_1.Messages.DuplicateProtoProperty);\n\t }\n\t hasProto.value = true;\n\t }\n\t this.nextToken();\n\t value = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t else if (this.match('(')) {\n\t value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t method = true;\n\t }\n\t else if (token.type === 3 /* Identifier */) {\n\t var id = this.finalize(node, new Node.Identifier(token.value));\n\t if (this.match('=')) {\n\t this.context.firstCoverInitializedNameError = this.lookahead;\n\t this.nextToken();\n\t shorthand = true;\n\t var init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t value = this.finalize(node, new Node.AssignmentPattern(id, init));\n\t }\n\t else {\n\t shorthand = true;\n\t value = id;\n\t }\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.nextToken());\n\t }\n\t }\n\t return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand));\n\t };\n\t Parser.prototype.parseObjectInitializer = function () {\n\t var node = this.createNode();\n\t this.expect('{');\n\t var properties = [];\n\t var hasProto = { value: false };\n\t while (!this.match('}')) {\n\t properties.push(this.parseObjectProperty(hasProto));\n\t if (!this.match('}')) {\n\t this.expectCommaSeparator();\n\t }\n\t }\n\t this.expect('}');\n\t return this.finalize(node, new Node.ObjectExpression(properties));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-template-literals\n\t Parser.prototype.parseTemplateHead = function () {\n\t assert_1.assert(this.lookahead.head, 'Template literal must start with a template head');\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t var raw = token.value;\n\t var cooked = token.cooked;\n\t return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t };\n\t Parser.prototype.parseTemplateElement = function () {\n\t if (this.lookahead.type !== 10 /* Template */) {\n\t this.throwUnexpectedToken();\n\t }\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t var raw = token.value;\n\t var cooked = token.cooked;\n\t return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t };\n\t Parser.prototype.parseTemplateLiteral = function () {\n\t var node = this.createNode();\n\t var expressions = [];\n\t var quasis = [];\n\t var quasi = this.parseTemplateHead();\n\t quasis.push(quasi);\n\t while (!quasi.tail) {\n\t expressions.push(this.parseExpression());\n\t quasi = this.parseTemplateElement();\n\t quasis.push(quasi);\n\t }\n\t return this.finalize(node, new Node.TemplateLiteral(quasis, expressions));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-grouping-operator\n\t Parser.prototype.reinterpretExpressionAsPattern = function (expr) {\n\t switch (expr.type) {\n\t case syntax_1.Syntax.Identifier:\n\t case syntax_1.Syntax.MemberExpression:\n\t case syntax_1.Syntax.RestElement:\n\t case syntax_1.Syntax.AssignmentPattern:\n\t break;\n\t case syntax_1.Syntax.SpreadElement:\n\t expr.type = syntax_1.Syntax.RestElement;\n\t this.reinterpretExpressionAsPattern(expr.argument);\n\t break;\n\t case syntax_1.Syntax.ArrayExpression:\n\t expr.type = syntax_1.Syntax.ArrayPattern;\n\t for (var i = 0; i < expr.elements.length; i++) {\n\t if (expr.elements[i] !== null) {\n\t this.reinterpretExpressionAsPattern(expr.elements[i]);\n\t }\n\t }\n\t break;\n\t case syntax_1.Syntax.ObjectExpression:\n\t expr.type = syntax_1.Syntax.ObjectPattern;\n\t for (var i = 0; i < expr.properties.length; i++) {\n\t this.reinterpretExpressionAsPattern(expr.properties[i].value);\n\t }\n\t break;\n\t case syntax_1.Syntax.AssignmentExpression:\n\t expr.type = syntax_1.Syntax.AssignmentPattern;\n\t delete expr.operator;\n\t this.reinterpretExpressionAsPattern(expr.left);\n\t break;\n\t default:\n\t // Allow other node type for tolerant parsing.\n\t break;\n\t }\n\t };\n\t Parser.prototype.parseGroupExpression = function () {\n\t var expr;\n\t this.expect('(');\n\t if (this.match(')')) {\n\t this.nextToken();\n\t if (!this.match('=>')) {\n\t this.expect('=>');\n\t }\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [],\n\t async: false\n\t };\n\t }\n\t else {\n\t var startToken = this.lookahead;\n\t var params = [];\n\t if (this.match('...')) {\n\t expr = this.parseRestElement(params);\n\t this.expect(')');\n\t if (!this.match('=>')) {\n\t this.expect('=>');\n\t }\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [expr],\n\t async: false\n\t };\n\t }\n\t else {\n\t var arrow = false;\n\t this.context.isBindingElement = true;\n\t expr = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t if (this.match(',')) {\n\t var expressions = [];\n\t this.context.isAssignmentTarget = false;\n\t expressions.push(expr);\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t if (!this.match(',')) {\n\t break;\n\t }\n\t this.nextToken();\n\t if (this.match(')')) {\n\t this.nextToken();\n\t for (var i = 0; i < expressions.length; i++) {\n\t this.reinterpretExpressionAsPattern(expressions[i]);\n\t }\n\t arrow = true;\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: expressions,\n\t async: false\n\t };\n\t }\n\t else if (this.match('...')) {\n\t if (!this.context.isBindingElement) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t expressions.push(this.parseRestElement(params));\n\t this.expect(')');\n\t if (!this.match('=>')) {\n\t this.expect('=>');\n\t }\n\t this.context.isBindingElement = false;\n\t for (var i = 0; i < expressions.length; i++) {\n\t this.reinterpretExpressionAsPattern(expressions[i]);\n\t }\n\t arrow = true;\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: expressions,\n\t async: false\n\t };\n\t }\n\t else {\n\t expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t }\n\t if (arrow) {\n\t break;\n\t }\n\t }\n\t if (!arrow) {\n\t expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t }\n\t }\n\t if (!arrow) {\n\t this.expect(')');\n\t if (this.match('=>')) {\n\t if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') {\n\t arrow = true;\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [expr],\n\t async: false\n\t };\n\t }\n\t if (!arrow) {\n\t if (!this.context.isBindingElement) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t if (expr.type === syntax_1.Syntax.SequenceExpression) {\n\t for (var i = 0; i < expr.expressions.length; i++) {\n\t this.reinterpretExpressionAsPattern(expr.expressions[i]);\n\t }\n\t }\n\t else {\n\t this.reinterpretExpressionAsPattern(expr);\n\t }\n\t var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]);\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: parameters,\n\t async: false\n\t };\n\t }\n\t }\n\t this.context.isBindingElement = false;\n\t }\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions\n\t Parser.prototype.parseArguments = function () {\n\t this.expect('(');\n\t var args = [];\n\t if (!this.match(')')) {\n\t while (true) {\n\t var expr = this.match('...') ? this.parseSpreadElement() :\n\t this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t args.push(expr);\n\t if (this.match(')')) {\n\t break;\n\t }\n\t this.expectCommaSeparator();\n\t if (this.match(')')) {\n\t break;\n\t }\n\t }\n\t }\n\t this.expect(')');\n\t return args;\n\t };\n\t Parser.prototype.isIdentifierName = function (token) {\n\t return token.type === 3 /* Identifier */ ||\n\t token.type === 4 /* Keyword */ ||\n\t token.type === 1 /* BooleanLiteral */ ||\n\t token.type === 5 /* NullLiteral */;\n\t };\n\t Parser.prototype.parseIdentifierName = function () {\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t if (!this.isIdentifierName(token)) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t return this.finalize(node, new Node.Identifier(token.value));\n\t };\n\t Parser.prototype.parseNewExpression = function () {\n\t var node = this.createNode();\n\t var id = this.parseIdentifierName();\n\t assert_1.assert(id.name === 'new', 'New expression must start with `new`');\n\t var expr;\n\t if (this.match('.')) {\n\t this.nextToken();\n\t if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === 'target') {\n\t var property = this.parseIdentifierName();\n\t expr = new Node.MetaProperty(id, property);\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t else {\n\t var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression);\n\t var args = this.match('(') ? this.parseArguments() : [];\n\t expr = new Node.NewExpression(callee, args);\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t return this.finalize(node, expr);\n\t };\n\t Parser.prototype.parseAsyncArgument = function () {\n\t var arg = this.parseAssignmentExpression();\n\t this.context.firstCoverInitializedNameError = null;\n\t return arg;\n\t };\n\t Parser.prototype.parseAsyncArguments = function () {\n\t this.expect('(');\n\t var args = [];\n\t if (!this.match(')')) {\n\t while (true) {\n\t var expr = this.match('...') ? this.parseSpreadElement() :\n\t this.isolateCoverGrammar(this.parseAsyncArgument);\n\t args.push(expr);\n\t if (this.match(')')) {\n\t break;\n\t }\n\t this.expectCommaSeparator();\n\t if (this.match(')')) {\n\t break;\n\t }\n\t }\n\t }\n\t this.expect(')');\n\t return args;\n\t };\n\t Parser.prototype.parseLeftHandSideExpressionAllowCall = function () {\n\t var startToken = this.lookahead;\n\t var maybeAsync = this.matchContextualKeyword('async');\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = true;\n\t var expr;\n\t if (this.matchKeyword('super') && this.context.inFunctionBody) {\n\t expr = this.createNode();\n\t this.nextToken();\n\t expr = this.finalize(expr, new Node.Super());\n\t if (!this.match('(') && !this.match('.') && !this.match('[')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t else {\n\t expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t }\n\t while (true) {\n\t if (this.match('.')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('.');\n\t var property = this.parseIdentifierName();\n\t expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property));\n\t }\n\t else if (this.match('(')) {\n\t var asyncArrow = maybeAsync && (startToken.lineNumber === this.lookahead.lineNumber);\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = false;\n\t var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments();\n\t expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args));\n\t if (asyncArrow && this.match('=>')) {\n\t for (var i = 0; i < args.length; ++i) {\n\t this.reinterpretExpressionAsPattern(args[i]);\n\t }\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: args,\n\t async: true\n\t };\n\t }\n\t }\n\t else if (this.match('[')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('[');\n\t var property = this.isolateCoverGrammar(this.parseExpression);\n\t this.expect(']');\n\t expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property));\n\t }\n\t else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t var quasi = this.parseTemplateLiteral();\n\t expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi));\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t this.context.allowIn = previousAllowIn;\n\t return expr;\n\t };\n\t Parser.prototype.parseSuper = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('super');\n\t if (!this.match('[') && !this.match('.')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t return this.finalize(node, new Node.Super());\n\t };\n\t Parser.prototype.parseLeftHandSideExpression = function () {\n\t assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.');\n\t var node = this.startNode(this.lookahead);\n\t var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() :\n\t this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t while (true) {\n\t if (this.match('[')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('[');\n\t var property = this.isolateCoverGrammar(this.parseExpression);\n\t this.expect(']');\n\t expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property));\n\t }\n\t else if (this.match('.')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('.');\n\t var property = this.parseIdentifierName();\n\t expr = this.finalize(node, new Node.StaticMemberExpression(expr, property));\n\t }\n\t else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t var quasi = this.parseTemplateLiteral();\n\t expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi));\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-update-expressions\n\t Parser.prototype.parseUpdateExpression = function () {\n\t var expr;\n\t var startToken = this.lookahead;\n\t if (this.match('++') || this.match('--')) {\n\t var node = this.startNode(startToken);\n\t var token = this.nextToken();\n\t expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t this.tolerateError(messages_1.Messages.StrictLHSPrefix);\n\t }\n\t if (!this.context.isAssignmentTarget) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t }\n\t var prefix = true;\n\t expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix));\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t else {\n\t expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) {\n\t if (this.match('++') || this.match('--')) {\n\t if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t this.tolerateError(messages_1.Messages.StrictLHSPostfix);\n\t }\n\t if (!this.context.isAssignmentTarget) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t }\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var operator = this.nextToken().value;\n\t var prefix = false;\n\t expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix));\n\t }\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-unary-operators\n\t Parser.prototype.parseAwaitExpression = function () {\n\t var node = this.createNode();\n\t this.nextToken();\n\t var argument = this.parseUnaryExpression();\n\t return this.finalize(node, new Node.AwaitExpression(argument));\n\t };\n\t Parser.prototype.parseUnaryExpression = function () {\n\t var expr;\n\t if (this.match('+') || this.match('-') || this.match('~') || this.match('!') ||\n\t this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) {\n\t var node = this.startNode(this.lookahead);\n\t var token = this.nextToken();\n\t expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t expr = this.finalize(node, new Node.UnaryExpression(token.value, expr));\n\t if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) {\n\t this.tolerateError(messages_1.Messages.StrictDelete);\n\t }\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t else if (this.context.await && this.matchContextualKeyword('await')) {\n\t expr = this.parseAwaitExpression();\n\t }\n\t else {\n\t expr = this.parseUpdateExpression();\n\t }\n\t return expr;\n\t };\n\t Parser.prototype.parseExponentiationExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) {\n\t this.nextToken();\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var left = expr;\n\t var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right));\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-exp-operator\n\t // https://tc39.github.io/ecma262/#sec-multiplicative-operators\n\t // https://tc39.github.io/ecma262/#sec-additive-operators\n\t // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators\n\t // https://tc39.github.io/ecma262/#sec-relational-operators\n\t // https://tc39.github.io/ecma262/#sec-equality-operators\n\t // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators\n\t // https://tc39.github.io/ecma262/#sec-binary-logical-operators\n\t Parser.prototype.binaryPrecedence = function (token) {\n\t var op = token.value;\n\t var precedence;\n\t if (token.type === 7 /* Punctuator */) {\n\t precedence = this.operatorPrecedence[op] || 0;\n\t }\n\t else if (token.type === 4 /* Keyword */) {\n\t precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0;\n\t }\n\t else {\n\t precedence = 0;\n\t }\n\t return precedence;\n\t };\n\t Parser.prototype.parseBinaryExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.inheritCoverGrammar(this.parseExponentiationExpression);\n\t var token = this.lookahead;\n\t var prec = this.binaryPrecedence(token);\n\t if (prec > 0) {\n\t this.nextToken();\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var markers = [startToken, this.lookahead];\n\t var left = expr;\n\t var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t var stack = [left, token.value, right];\n\t var precedences = [prec];\n\t while (true) {\n\t prec = this.binaryPrecedence(this.lookahead);\n\t if (prec <= 0) {\n\t break;\n\t }\n\t // Reduce: make a binary expression from the three topmost entries.\n\t while ((stack.length > 2) && (prec <= precedences[precedences.length - 1])) {\n\t right = stack.pop();\n\t var operator = stack.pop();\n\t precedences.pop();\n\t left = stack.pop();\n\t markers.pop();\n\t var node = this.startNode(markers[markers.length - 1]);\n\t stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right)));\n\t }\n\t // Shift.\n\t stack.push(this.nextToken().value);\n\t precedences.push(prec);\n\t markers.push(this.lookahead);\n\t stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));\n\t }\n\t // Final reduce to clean-up the stack.\n\t var i = stack.length - 1;\n\t expr = stack[i];\n\t var lastMarker = markers.pop();\n\t while (i > 1) {\n\t var marker = markers.pop();\n\t var lastLineStart = lastMarker && lastMarker.lineStart;\n\t var node = this.startNode(marker, lastLineStart);\n\t var operator = stack[i - 1];\n\t expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr));\n\t i -= 2;\n\t lastMarker = marker;\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-conditional-operator\n\t Parser.prototype.parseConditionalExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.inheritCoverGrammar(this.parseBinaryExpression);\n\t if (this.match('?')) {\n\t this.nextToken();\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = true;\n\t var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t this.context.allowIn = previousAllowIn;\n\t this.expect(':');\n\t var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate));\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-assignment-operators\n\t Parser.prototype.checkPatternParam = function (options, param) {\n\t switch (param.type) {\n\t case syntax_1.Syntax.Identifier:\n\t this.validateParam(options, param, param.name);\n\t break;\n\t case syntax_1.Syntax.RestElement:\n\t this.checkPatternParam(options, param.argument);\n\t break;\n\t case syntax_1.Syntax.AssignmentPattern:\n\t this.checkPatternParam(options, param.left);\n\t break;\n\t case syntax_1.Syntax.ArrayPattern:\n\t for (var i = 0; i < param.elements.length; i++) {\n\t if (param.elements[i] !== null) {\n\t this.checkPatternParam(options, param.elements[i]);\n\t }\n\t }\n\t break;\n\t case syntax_1.Syntax.ObjectPattern:\n\t for (var i = 0; i < param.properties.length; i++) {\n\t this.checkPatternParam(options, param.properties[i].value);\n\t }\n\t break;\n\t default:\n\t break;\n\t }\n\t options.simple = options.simple && (param instanceof Node.Identifier);\n\t };\n\t Parser.prototype.reinterpretAsCoverFormalsList = function (expr) {\n\t var params = [expr];\n\t var options;\n\t var asyncArrow = false;\n\t switch (expr.type) {\n\t case syntax_1.Syntax.Identifier:\n\t break;\n\t case ArrowParameterPlaceHolder:\n\t params = expr.params;\n\t asyncArrow = expr.async;\n\t break;\n\t default:\n\t return null;\n\t }\n\t options = {\n\t simple: true,\n\t paramSet: {}\n\t };\n\t for (var i = 0; i < params.length; ++i) {\n\t var param = params[i];\n\t if (param.type === syntax_1.Syntax.AssignmentPattern) {\n\t if (param.right.type === syntax_1.Syntax.YieldExpression) {\n\t if (param.right.argument) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t param.right.type = syntax_1.Syntax.Identifier;\n\t param.right.name = 'yield';\n\t delete param.right.argument;\n\t delete param.right.delegate;\n\t }\n\t }\n\t else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === 'await') {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t this.checkPatternParam(options, param);\n\t params[i] = param;\n\t }\n\t if (this.context.strict || !this.context.allowYield) {\n\t for (var i = 0; i < params.length; ++i) {\n\t var param = params[i];\n\t if (param.type === syntax_1.Syntax.YieldExpression) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t }\n\t if (options.message === messages_1.Messages.StrictParamDupe) {\n\t var token = this.context.strict ? options.stricted : options.firstRestricted;\n\t this.throwUnexpectedToken(token, options.message);\n\t }\n\t return {\n\t simple: options.simple,\n\t params: params,\n\t stricted: options.stricted,\n\t firstRestricted: options.firstRestricted,\n\t message: options.message\n\t };\n\t };\n\t Parser.prototype.parseAssignmentExpression = function () {\n\t var expr;\n\t if (!this.context.allowYield && this.matchKeyword('yield')) {\n\t expr = this.parseYieldExpression();\n\t }\n\t else {\n\t var startToken = this.lookahead;\n\t var token = startToken;\n\t expr = this.parseConditionalExpression();\n\t if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') {\n\t if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) {\n\t var arg = this.parsePrimaryExpression();\n\t this.reinterpretExpressionAsPattern(arg);\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [arg],\n\t async: true\n\t };\n\t }\n\t }\n\t if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) {\n\t // https://tc39.github.io/ecma262/#sec-arrow-function-definitions\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var isAsync = expr.async;\n\t var list = this.reinterpretAsCoverFormalsList(expr);\n\t if (list) {\n\t if (this.hasLineTerminator) {\n\t this.tolerateUnexpectedToken(this.lookahead);\n\t }\n\t this.context.firstCoverInitializedNameError = null;\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = list.simple;\n\t var previousAllowYield = this.context.allowYield;\n\t var previousAwait = this.context.await;\n\t this.context.allowYield = true;\n\t this.context.await = isAsync;\n\t var node = this.startNode(startToken);\n\t this.expect('=>');\n\t var body = void 0;\n\t if (this.match('{')) {\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = true;\n\t body = this.parseFunctionSourceElements();\n\t this.context.allowIn = previousAllowIn;\n\t }\n\t else {\n\t body = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t var expression = body.type !== syntax_1.Syntax.BlockStatement;\n\t if (this.context.strict && list.firstRestricted) {\n\t this.throwUnexpectedToken(list.firstRestricted, list.message);\n\t }\n\t if (this.context.strict && list.stricted) {\n\t this.tolerateUnexpectedToken(list.stricted, list.message);\n\t }\n\t expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) :\n\t this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression));\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t this.context.allowYield = previousAllowYield;\n\t this.context.await = previousAwait;\n\t }\n\t }\n\t else {\n\t if (this.matchAssign()) {\n\t if (!this.context.isAssignmentTarget) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t }\n\t if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) {\n\t var id = expr;\n\t if (this.scanner.isRestrictedWord(id.name)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment);\n\t }\n\t if (this.scanner.isStrictModeReservedWord(id.name)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t }\n\t }\n\t if (!this.match('=')) {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t else {\n\t this.reinterpretExpressionAsPattern(expr);\n\t }\n\t token = this.nextToken();\n\t var operator = token.value;\n\t var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right));\n\t this.context.firstCoverInitializedNameError = null;\n\t }\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-comma-operator\n\t Parser.prototype.parseExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t if (this.match(',')) {\n\t var expressions = [];\n\t expressions.push(expr);\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t if (!this.match(',')) {\n\t break;\n\t }\n\t this.nextToken();\n\t expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t }\n\t expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-block\n\t Parser.prototype.parseStatementListItem = function () {\n\t var statement;\n\t this.context.isAssignmentTarget = true;\n\t this.context.isBindingElement = true;\n\t if (this.lookahead.type === 4 /* Keyword */) {\n\t switch (this.lookahead.value) {\n\t case 'export':\n\t if (!this.context.isModule) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration);\n\t }\n\t statement = this.parseExportDeclaration();\n\t break;\n\t case 'import':\n\t if (!this.context.isModule) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration);\n\t }\n\t statement = this.parseImportDeclaration();\n\t break;\n\t case 'const':\n\t statement = this.parseLexicalDeclaration({ inFor: false });\n\t break;\n\t case 'function':\n\t statement = this.parseFunctionDeclaration();\n\t break;\n\t case 'class':\n\t statement = this.parseClassDeclaration();\n\t break;\n\t case 'let':\n\t statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement();\n\t break;\n\t default:\n\t statement = this.parseStatement();\n\t break;\n\t }\n\t }\n\t else {\n\t statement = this.parseStatement();\n\t }\n\t return statement;\n\t };\n\t Parser.prototype.parseBlock = function () {\n\t var node = this.createNode();\n\t this.expect('{');\n\t var block = [];\n\t while (true) {\n\t if (this.match('}')) {\n\t break;\n\t }\n\t block.push(this.parseStatementListItem());\n\t }\n\t this.expect('}');\n\t return this.finalize(node, new Node.BlockStatement(block));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-let-and-const-declarations\n\t Parser.prototype.parseLexicalBinding = function (kind, options) {\n\t var node = this.createNode();\n\t var params = [];\n\t var id = this.parsePattern(params, kind);\n\t if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t if (this.scanner.isRestrictedWord(id.name)) {\n\t this.tolerateError(messages_1.Messages.StrictVarName);\n\t }\n\t }\n\t var init = null;\n\t if (kind === 'const') {\n\t if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) {\n\t if (this.match('=')) {\n\t this.nextToken();\n\t init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t else {\n\t this.throwError(messages_1.Messages.DeclarationMissingInitializer, 'const');\n\t }\n\t }\n\t }\n\t else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) {\n\t this.expect('=');\n\t init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t };\n\t Parser.prototype.parseBindingList = function (kind, options) {\n\t var list = [this.parseLexicalBinding(kind, options)];\n\t while (this.match(',')) {\n\t this.nextToken();\n\t list.push(this.parseLexicalBinding(kind, options));\n\t }\n\t return list;\n\t };\n\t Parser.prototype.isLexicalDeclaration = function () {\n\t var state = this.scanner.saveState();\n\t this.scanner.scanComments();\n\t var next = this.scanner.lex();\n\t this.scanner.restoreState(state);\n\t return (next.type === 3 /* Identifier */) ||\n\t (next.type === 7 /* Punctuator */ && next.value === '[') ||\n\t (next.type === 7 /* Punctuator */ && next.value === '{') ||\n\t (next.type === 4 /* Keyword */ && next.value === 'let') ||\n\t (next.type === 4 /* Keyword */ && next.value === 'yield');\n\t };\n\t Parser.prototype.parseLexicalDeclaration = function (options) {\n\t var node = this.createNode();\n\t var kind = this.nextToken().value;\n\t assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');\n\t var declarations = this.parseBindingList(kind, options);\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.VariableDeclaration(declarations, kind));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns\n\t Parser.prototype.parseBindingRestElement = function (params, kind) {\n\t var node = this.createNode();\n\t this.expect('...');\n\t var arg = this.parsePattern(params, kind);\n\t return this.finalize(node, new Node.RestElement(arg));\n\t };\n\t Parser.prototype.parseArrayPattern = function (params, kind) {\n\t var node = this.createNode();\n\t this.expect('[');\n\t var elements = [];\n\t while (!this.match(']')) {\n\t if (this.match(',')) {\n\t this.nextToken();\n\t elements.push(null);\n\t }\n\t else {\n\t if (this.match('...')) {\n\t elements.push(this.parseBindingRestElement(params, kind));\n\t break;\n\t }\n\t else {\n\t elements.push(this.parsePatternWithDefault(params, kind));\n\t }\n\t if (!this.match(']')) {\n\t this.expect(',');\n\t }\n\t }\n\t }\n\t this.expect(']');\n\t return this.finalize(node, new Node.ArrayPattern(elements));\n\t };\n\t Parser.prototype.parsePropertyPattern = function (params, kind) {\n\t var node = this.createNode();\n\t var computed = false;\n\t var shorthand = false;\n\t var method = false;\n\t var key;\n\t var value;\n\t if (this.lookahead.type === 3 /* Identifier */) {\n\t var keyToken = this.lookahead;\n\t key = this.parseVariableIdentifier();\n\t var init = this.finalize(node, new Node.Identifier(keyToken.value));\n\t if (this.match('=')) {\n\t params.push(keyToken);\n\t shorthand = true;\n\t this.nextToken();\n\t var expr = this.parseAssignmentExpression();\n\t value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr));\n\t }\n\t else if (!this.match(':')) {\n\t params.push(keyToken);\n\t shorthand = true;\n\t value = init;\n\t }\n\t else {\n\t this.expect(':');\n\t value = this.parsePatternWithDefault(params, kind);\n\t }\n\t }\n\t else {\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t this.expect(':');\n\t value = this.parsePatternWithDefault(params, kind);\n\t }\n\t return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand));\n\t };\n\t Parser.prototype.parseObjectPattern = function (params, kind) {\n\t var node = this.createNode();\n\t var properties = [];\n\t this.expect('{');\n\t while (!this.match('}')) {\n\t properties.push(this.parsePropertyPattern(params, kind));\n\t if (!this.match('}')) {\n\t this.expect(',');\n\t }\n\t }\n\t this.expect('}');\n\t return this.finalize(node, new Node.ObjectPattern(properties));\n\t };\n\t Parser.prototype.parsePattern = function (params, kind) {\n\t var pattern;\n\t if (this.match('[')) {\n\t pattern = this.parseArrayPattern(params, kind);\n\t }\n\t else if (this.match('{')) {\n\t pattern = this.parseObjectPattern(params, kind);\n\t }\n\t else {\n\t if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding);\n\t }\n\t params.push(this.lookahead);\n\t pattern = this.parseVariableIdentifier(kind);\n\t }\n\t return pattern;\n\t };\n\t Parser.prototype.parsePatternWithDefault = function (params, kind) {\n\t var startToken = this.lookahead;\n\t var pattern = this.parsePattern(params, kind);\n\t if (this.match('=')) {\n\t this.nextToken();\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = true;\n\t var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t this.context.allowYield = previousAllowYield;\n\t pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right));\n\t }\n\t return pattern;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-variable-statement\n\t Parser.prototype.parseVariableIdentifier = function (kind) {\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t if (token.type === 4 /* Keyword */ && token.value === 'yield') {\n\t if (this.context.strict) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t }\n\t else if (!this.context.allowYield) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t }\n\t else if (token.type !== 3 /* Identifier */) {\n\t if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t }\n\t else {\n\t if (this.context.strict || token.value !== 'let' || kind !== 'var') {\n\t this.throwUnexpectedToken(token);\n\t }\n\t }\n\t }\n\t else if ((this.context.isModule || this.context.await) && token.type === 3 /* Identifier */ && token.value === 'await') {\n\t this.tolerateUnexpectedToken(token);\n\t }\n\t return this.finalize(node, new Node.Identifier(token.value));\n\t };\n\t Parser.prototype.parseVariableDeclaration = function (options) {\n\t var node = this.createNode();\n\t var params = [];\n\t var id = this.parsePattern(params, 'var');\n\t if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t if (this.scanner.isRestrictedWord(id.name)) {\n\t this.tolerateError(messages_1.Messages.StrictVarName);\n\t }\n\t }\n\t var init = null;\n\t if (this.match('=')) {\n\t this.nextToken();\n\t init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) {\n\t this.expect('=');\n\t }\n\t return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t };\n\t Parser.prototype.parseVariableDeclarationList = function (options) {\n\t var opt = { inFor: options.inFor };\n\t var list = [];\n\t list.push(this.parseVariableDeclaration(opt));\n\t while (this.match(',')) {\n\t this.nextToken();\n\t list.push(this.parseVariableDeclaration(opt));\n\t }\n\t return list;\n\t };\n\t Parser.prototype.parseVariableStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('var');\n\t var declarations = this.parseVariableDeclarationList({ inFor: false });\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.VariableDeclaration(declarations, 'var'));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-empty-statement\n\t Parser.prototype.parseEmptyStatement = function () {\n\t var node = this.createNode();\n\t this.expect(';');\n\t return this.finalize(node, new Node.EmptyStatement());\n\t };\n\t // https://tc39.github.io/ecma262/#sec-expression-statement\n\t Parser.prototype.parseExpressionStatement = function () {\n\t var node = this.createNode();\n\t var expr = this.parseExpression();\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ExpressionStatement(expr));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-if-statement\n\t Parser.prototype.parseIfClause = function () {\n\t if (this.context.strict && this.matchKeyword('function')) {\n\t this.tolerateError(messages_1.Messages.StrictFunction);\n\t }\n\t return this.parseStatement();\n\t };\n\t Parser.prototype.parseIfStatement = function () {\n\t var node = this.createNode();\n\t var consequent;\n\t var alternate = null;\n\t this.expectKeyword('if');\n\t this.expect('(');\n\t var test = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t consequent = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t consequent = this.parseIfClause();\n\t if (this.matchKeyword('else')) {\n\t this.nextToken();\n\t alternate = this.parseIfClause();\n\t }\n\t }\n\t return this.finalize(node, new Node.IfStatement(test, consequent, alternate));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-do-while-statement\n\t Parser.prototype.parseDoWhileStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('do');\n\t var previousInIteration = this.context.inIteration;\n\t this.context.inIteration = true;\n\t var body = this.parseStatement();\n\t this.context.inIteration = previousInIteration;\n\t this.expectKeyword('while');\n\t this.expect('(');\n\t var test = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t }\n\t else {\n\t this.expect(')');\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t }\n\t return this.finalize(node, new Node.DoWhileStatement(body, test));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-while-statement\n\t Parser.prototype.parseWhileStatement = function () {\n\t var node = this.createNode();\n\t var body;\n\t this.expectKeyword('while');\n\t this.expect('(');\n\t var test = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t var previousInIteration = this.context.inIteration;\n\t this.context.inIteration = true;\n\t body = this.parseStatement();\n\t this.context.inIteration = previousInIteration;\n\t }\n\t return this.finalize(node, new Node.WhileStatement(test, body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-for-statement\n\t // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements\n\t Parser.prototype.parseForStatement = function () {\n\t var init = null;\n\t var test = null;\n\t var update = null;\n\t var forIn = true;\n\t var left, right;\n\t var node = this.createNode();\n\t this.expectKeyword('for');\n\t this.expect('(');\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t else {\n\t if (this.matchKeyword('var')) {\n\t init = this.createNode();\n\t this.nextToken();\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = false;\n\t var declarations = this.parseVariableDeclarationList({ inFor: true });\n\t this.context.allowIn = previousAllowIn;\n\t if (declarations.length === 1 && this.matchKeyword('in')) {\n\t var decl = declarations[0];\n\t if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) {\n\t this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in');\n\t }\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseAssignmentExpression();\n\t init = null;\n\t forIn = false;\n\t }\n\t else {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t this.expect(';');\n\t }\n\t }\n\t else if (this.matchKeyword('const') || this.matchKeyword('let')) {\n\t init = this.createNode();\n\t var kind = this.nextToken().value;\n\t if (!this.context.strict && this.lookahead.value === 'in') {\n\t init = this.finalize(init, new Node.Identifier(kind));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else {\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = false;\n\t var declarations = this.parseBindingList(kind, { inFor: true });\n\t this.context.allowIn = previousAllowIn;\n\t if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseAssignmentExpression();\n\t init = null;\n\t forIn = false;\n\t }\n\t else {\n\t this.consumeSemicolon();\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t }\n\t }\n\t }\n\t else {\n\t var initStartToken = this.lookahead;\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = false;\n\t init = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t this.context.allowIn = previousAllowIn;\n\t if (this.matchKeyword('in')) {\n\t if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInForIn);\n\t }\n\t this.nextToken();\n\t this.reinterpretExpressionAsPattern(init);\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else if (this.matchContextualKeyword('of')) {\n\t if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInForLoop);\n\t }\n\t this.nextToken();\n\t this.reinterpretExpressionAsPattern(init);\n\t left = init;\n\t right = this.parseAssignmentExpression();\n\t init = null;\n\t forIn = false;\n\t }\n\t else {\n\t if (this.match(',')) {\n\t var initSeq = [init];\n\t while (this.match(',')) {\n\t this.nextToken();\n\t initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t }\n\t init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq));\n\t }\n\t this.expect(';');\n\t }\n\t }\n\t }\n\t if (typeof left === 'undefined') {\n\t if (!this.match(';')) {\n\t test = this.parseExpression();\n\t }\n\t this.expect(';');\n\t if (!this.match(')')) {\n\t update = this.parseExpression();\n\t }\n\t }\n\t var body;\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t var previousInIteration = this.context.inIteration;\n\t this.context.inIteration = true;\n\t body = this.isolateCoverGrammar(this.parseStatement);\n\t this.context.inIteration = previousInIteration;\n\t }\n\t return (typeof left === 'undefined') ?\n\t this.finalize(node, new Node.ForStatement(init, test, update, body)) :\n\t forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) :\n\t this.finalize(node, new Node.ForOfStatement(left, right, body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-continue-statement\n\t Parser.prototype.parseContinueStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('continue');\n\t var label = null;\n\t if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t var id = this.parseVariableIdentifier();\n\t label = id;\n\t var key = '$' + id.name;\n\t if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t }\n\t }\n\t this.consumeSemicolon();\n\t if (label === null && !this.context.inIteration) {\n\t this.throwError(messages_1.Messages.IllegalContinue);\n\t }\n\t return this.finalize(node, new Node.ContinueStatement(label));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-break-statement\n\t Parser.prototype.parseBreakStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('break');\n\t var label = null;\n\t if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t var id = this.parseVariableIdentifier();\n\t var key = '$' + id.name;\n\t if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t }\n\t label = id;\n\t }\n\t this.consumeSemicolon();\n\t if (label === null && !this.context.inIteration && !this.context.inSwitch) {\n\t this.throwError(messages_1.Messages.IllegalBreak);\n\t }\n\t return this.finalize(node, new Node.BreakStatement(label));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-return-statement\n\t Parser.prototype.parseReturnStatement = function () {\n\t if (!this.context.inFunctionBody) {\n\t this.tolerateError(messages_1.Messages.IllegalReturn);\n\t }\n\t var node = this.createNode();\n\t this.expectKeyword('return');\n\t var hasArgument = (!this.match(';') && !this.match('}') &&\n\t !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) ||\n\t this.lookahead.type === 8 /* StringLiteral */ ||\n\t this.lookahead.type === 10 /* Template */;\n\t var argument = hasArgument ? this.parseExpression() : null;\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ReturnStatement(argument));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-with-statement\n\t Parser.prototype.parseWithStatement = function () {\n\t if (this.context.strict) {\n\t this.tolerateError(messages_1.Messages.StrictModeWith);\n\t }\n\t var node = this.createNode();\n\t var body;\n\t this.expectKeyword('with');\n\t this.expect('(');\n\t var object = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t body = this.parseStatement();\n\t }\n\t return this.finalize(node, new Node.WithStatement(object, body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-switch-statement\n\t Parser.prototype.parseSwitchCase = function () {\n\t var node = this.createNode();\n\t var test;\n\t if (this.matchKeyword('default')) {\n\t this.nextToken();\n\t test = null;\n\t }\n\t else {\n\t this.expectKeyword('case');\n\t test = this.parseExpression();\n\t }\n\t this.expect(':');\n\t var consequent = [];\n\t while (true) {\n\t if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) {\n\t break;\n\t }\n\t consequent.push(this.parseStatementListItem());\n\t }\n\t return this.finalize(node, new Node.SwitchCase(test, consequent));\n\t };\n\t Parser.prototype.parseSwitchStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('switch');\n\t this.expect('(');\n\t var discriminant = this.parseExpression();\n\t this.expect(')');\n\t var previousInSwitch = this.context.inSwitch;\n\t this.context.inSwitch = true;\n\t var cases = [];\n\t var defaultFound = false;\n\t this.expect('{');\n\t while (true) {\n\t if (this.match('}')) {\n\t break;\n\t }\n\t var clause = this.parseSwitchCase();\n\t if (clause.test === null) {\n\t if (defaultFound) {\n\t this.throwError(messages_1.Messages.MultipleDefaultsInSwitch);\n\t }\n\t defaultFound = true;\n\t }\n\t cases.push(clause);\n\t }\n\t this.expect('}');\n\t this.context.inSwitch = previousInSwitch;\n\t return this.finalize(node, new Node.SwitchStatement(discriminant, cases));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-labelled-statements\n\t Parser.prototype.parseLabelledStatement = function () {\n\t var node = this.createNode();\n\t var expr = this.parseExpression();\n\t var statement;\n\t if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) {\n\t this.nextToken();\n\t var id = expr;\n\t var key = '$' + id.name;\n\t if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name);\n\t }\n\t this.context.labelSet[key] = true;\n\t var body = void 0;\n\t if (this.matchKeyword('class')) {\n\t this.tolerateUnexpectedToken(this.lookahead);\n\t body = this.parseClassDeclaration();\n\t }\n\t else if (this.matchKeyword('function')) {\n\t var token = this.lookahead;\n\t var declaration = this.parseFunctionDeclaration();\n\t if (this.context.strict) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction);\n\t }\n\t else if (declaration.generator) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext);\n\t }\n\t body = declaration;\n\t }\n\t else {\n\t body = this.parseStatement();\n\t }\n\t delete this.context.labelSet[key];\n\t statement = new Node.LabeledStatement(id, body);\n\t }\n\t else {\n\t this.consumeSemicolon();\n\t statement = new Node.ExpressionStatement(expr);\n\t }\n\t return this.finalize(node, statement);\n\t };\n\t // https://tc39.github.io/ecma262/#sec-throw-statement\n\t Parser.prototype.parseThrowStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('throw');\n\t if (this.hasLineTerminator) {\n\t this.throwError(messages_1.Messages.NewlineAfterThrow);\n\t }\n\t var argument = this.parseExpression();\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ThrowStatement(argument));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-try-statement\n\t Parser.prototype.parseCatchClause = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('catch');\n\t this.expect('(');\n\t if (this.match(')')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t var params = [];\n\t var param = this.parsePattern(params);\n\t var paramMap = {};\n\t for (var i = 0; i < params.length; i++) {\n\t var key = '$' + params[i].value;\n\t if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n\t this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value);\n\t }\n\t paramMap[key] = true;\n\t }\n\t if (this.context.strict && param.type === syntax_1.Syntax.Identifier) {\n\t if (this.scanner.isRestrictedWord(param.name)) {\n\t this.tolerateError(messages_1.Messages.StrictCatchVariable);\n\t }\n\t }\n\t this.expect(')');\n\t var body = this.parseBlock();\n\t return this.finalize(node, new Node.CatchClause(param, body));\n\t };\n\t Parser.prototype.parseFinallyClause = function () {\n\t this.expectKeyword('finally');\n\t return this.parseBlock();\n\t };\n\t Parser.prototype.parseTryStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('try');\n\t var block = this.parseBlock();\n\t var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null;\n\t var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null;\n\t if (!handler && !finalizer) {\n\t this.throwError(messages_1.Messages.NoCatchOrFinally);\n\t }\n\t return this.finalize(node, new Node.TryStatement(block, handler, finalizer));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-debugger-statement\n\t Parser.prototype.parseDebuggerStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('debugger');\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.DebuggerStatement());\n\t };\n\t // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations\n\t Parser.prototype.parseStatement = function () {\n\t var statement;\n\t switch (this.lookahead.type) {\n\t case 1 /* BooleanLiteral */:\n\t case 5 /* NullLiteral */:\n\t case 6 /* NumericLiteral */:\n\t case 8 /* StringLiteral */:\n\t case 10 /* Template */:\n\t case 9 /* RegularExpression */:\n\t statement = this.parseExpressionStatement();\n\t break;\n\t case 7 /* Punctuator */:\n\t var value = this.lookahead.value;\n\t if (value === '{') {\n\t statement = this.parseBlock();\n\t }\n\t else if (value === '(') {\n\t statement = this.parseExpressionStatement();\n\t }\n\t else if (value === ';') {\n\t statement = this.parseEmptyStatement();\n\t }\n\t else {\n\t statement = this.parseExpressionStatement();\n\t }\n\t break;\n\t case 3 /* Identifier */:\n\t statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement();\n\t break;\n\t case 4 /* Keyword */:\n\t switch (this.lookahead.value) {\n\t case 'break':\n\t statement = this.parseBreakStatement();\n\t break;\n\t case 'continue':\n\t statement = this.parseContinueStatement();\n\t break;\n\t case 'debugger':\n\t statement = this.parseDebuggerStatement();\n\t break;\n\t case 'do':\n\t statement = this.parseDoWhileStatement();\n\t break;\n\t case 'for':\n\t statement = this.parseForStatement();\n\t break;\n\t case 'function':\n\t statement = this.parseFunctionDeclaration();\n\t break;\n\t case 'if':\n\t statement = this.parseIfStatement();\n\t break;\n\t case 'return':\n\t statement = this.parseReturnStatement();\n\t break;\n\t case 'switch':\n\t statement = this.parseSwitchStatement();\n\t break;\n\t case 'throw':\n\t statement = this.parseThrowStatement();\n\t break;\n\t case 'try':\n\t statement = this.parseTryStatement();\n\t break;\n\t case 'var':\n\t statement = this.parseVariableStatement();\n\t break;\n\t case 'while':\n\t statement = this.parseWhileStatement();\n\t break;\n\t case 'with':\n\t statement = this.parseWithStatement();\n\t break;\n\t default:\n\t statement = this.parseExpressionStatement();\n\t break;\n\t }\n\t break;\n\t default:\n\t statement = this.throwUnexpectedToken(this.lookahead);\n\t }\n\t return statement;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-function-definitions\n\t Parser.prototype.parseFunctionSourceElements = function () {\n\t var node = this.createNode();\n\t this.expect('{');\n\t var body = this.parseDirectivePrologues();\n\t var previousLabelSet = this.context.labelSet;\n\t var previousInIteration = this.context.inIteration;\n\t var previousInSwitch = this.context.inSwitch;\n\t var previousInFunctionBody = this.context.inFunctionBody;\n\t this.context.labelSet = {};\n\t this.context.inIteration = false;\n\t this.context.inSwitch = false;\n\t this.context.inFunctionBody = true;\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t if (this.match('}')) {\n\t break;\n\t }\n\t body.push(this.parseStatementListItem());\n\t }\n\t this.expect('}');\n\t this.context.labelSet = previousLabelSet;\n\t this.context.inIteration = previousInIteration;\n\t this.context.inSwitch = previousInSwitch;\n\t this.context.inFunctionBody = previousInFunctionBody;\n\t return this.finalize(node, new Node.BlockStatement(body));\n\t };\n\t Parser.prototype.validateParam = function (options, param, name) {\n\t var key = '$' + name;\n\t if (this.context.strict) {\n\t if (this.scanner.isRestrictedWord(name)) {\n\t options.stricted = param;\n\t options.message = messages_1.Messages.StrictParamName;\n\t }\n\t if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t options.stricted = param;\n\t options.message = messages_1.Messages.StrictParamDupe;\n\t }\n\t }\n\t else if (!options.firstRestricted) {\n\t if (this.scanner.isRestrictedWord(name)) {\n\t options.firstRestricted = param;\n\t options.message = messages_1.Messages.StrictParamName;\n\t }\n\t else if (this.scanner.isStrictModeReservedWord(name)) {\n\t options.firstRestricted = param;\n\t options.message = messages_1.Messages.StrictReservedWord;\n\t }\n\t else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t options.stricted = param;\n\t options.message = messages_1.Messages.StrictParamDupe;\n\t }\n\t }\n\t /* istanbul ignore next */\n\t if (typeof Object.defineProperty === 'function') {\n\t Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true });\n\t }\n\t else {\n\t options.paramSet[key] = true;\n\t }\n\t };\n\t Parser.prototype.parseRestElement = function (params) {\n\t var node = this.createNode();\n\t this.expect('...');\n\t var arg = this.parsePattern(params);\n\t if (this.match('=')) {\n\t this.throwError(messages_1.Messages.DefaultRestParameter);\n\t }\n\t if (!this.match(')')) {\n\t this.throwError(messages_1.Messages.ParameterAfterRestParameter);\n\t }\n\t return this.finalize(node, new Node.RestElement(arg));\n\t };\n\t Parser.prototype.parseFormalParameter = function (options) {\n\t var params = [];\n\t var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params);\n\t for (var i = 0; i < params.length; i++) {\n\t this.validateParam(options, params[i], params[i].value);\n\t }\n\t options.simple = options.simple && (param instanceof Node.Identifier);\n\t options.params.push(param);\n\t };\n\t Parser.prototype.parseFormalParameters = function (firstRestricted) {\n\t var options;\n\t options = {\n\t simple: true,\n\t params: [],\n\t firstRestricted: firstRestricted\n\t };\n\t this.expect('(');\n\t if (!this.match(')')) {\n\t options.paramSet = {};\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t this.parseFormalParameter(options);\n\t if (this.match(')')) {\n\t break;\n\t }\n\t this.expect(',');\n\t if (this.match(')')) {\n\t break;\n\t }\n\t }\n\t }\n\t this.expect(')');\n\t return {\n\t simple: options.simple,\n\t params: options.params,\n\t stricted: options.stricted,\n\t firstRestricted: options.firstRestricted,\n\t message: options.message\n\t };\n\t };\n\t Parser.prototype.matchAsyncFunction = function () {\n\t var match = this.matchContextualKeyword('async');\n\t if (match) {\n\t var state = this.scanner.saveState();\n\t this.scanner.scanComments();\n\t var next = this.scanner.lex();\n\t this.scanner.restoreState(state);\n\t match = (state.lineNumber === next.lineNumber) && (next.type === 4 /* Keyword */) && (next.value === 'function');\n\t }\n\t return match;\n\t };\n\t Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) {\n\t var node = this.createNode();\n\t var isAsync = this.matchContextualKeyword('async');\n\t if (isAsync) {\n\t this.nextToken();\n\t }\n\t this.expectKeyword('function');\n\t var isGenerator = isAsync ? false : this.match('*');\n\t if (isGenerator) {\n\t this.nextToken();\n\t }\n\t var message;\n\t var id = null;\n\t var firstRestricted = null;\n\t if (!identifierIsOptional || !this.match('(')) {\n\t var token = this.lookahead;\n\t id = this.parseVariableIdentifier();\n\t if (this.context.strict) {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t }\n\t }\n\t else {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictFunctionName;\n\t }\n\t else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictReservedWord;\n\t }\n\t }\n\t }\n\t var previousAllowAwait = this.context.await;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.await = isAsync;\n\t this.context.allowYield = !isGenerator;\n\t var formalParameters = this.parseFormalParameters(firstRestricted);\n\t var params = formalParameters.params;\n\t var stricted = formalParameters.stricted;\n\t firstRestricted = formalParameters.firstRestricted;\n\t if (formalParameters.message) {\n\t message = formalParameters.message;\n\t }\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = formalParameters.simple;\n\t var body = this.parseFunctionSourceElements();\n\t if (this.context.strict && firstRestricted) {\n\t this.throwUnexpectedToken(firstRestricted, message);\n\t }\n\t if (this.context.strict && stricted) {\n\t this.tolerateUnexpectedToken(stricted, message);\n\t }\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t this.context.await = previousAllowAwait;\n\t this.context.allowYield = previousAllowYield;\n\t return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) :\n\t this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator));\n\t };\n\t Parser.prototype.parseFunctionExpression = function () {\n\t var node = this.createNode();\n\t var isAsync = this.matchContextualKeyword('async');\n\t if (isAsync) {\n\t this.nextToken();\n\t }\n\t this.expectKeyword('function');\n\t var isGenerator = isAsync ? false : this.match('*');\n\t if (isGenerator) {\n\t this.nextToken();\n\t }\n\t var message;\n\t var id = null;\n\t var firstRestricted;\n\t var previousAllowAwait = this.context.await;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.await = isAsync;\n\t this.context.allowYield = !isGenerator;\n\t if (!this.match('(')) {\n\t var token = this.lookahead;\n\t id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier();\n\t if (this.context.strict) {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t }\n\t }\n\t else {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictFunctionName;\n\t }\n\t else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictReservedWord;\n\t }\n\t }\n\t }\n\t var formalParameters = this.parseFormalParameters(firstRestricted);\n\t var params = formalParameters.params;\n\t var stricted = formalParameters.stricted;\n\t firstRestricted = formalParameters.firstRestricted;\n\t if (formalParameters.message) {\n\t message = formalParameters.message;\n\t }\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = formalParameters.simple;\n\t var body = this.parseFunctionSourceElements();\n\t if (this.context.strict && firstRestricted) {\n\t this.throwUnexpectedToken(firstRestricted, message);\n\t }\n\t if (this.context.strict && stricted) {\n\t this.tolerateUnexpectedToken(stricted, message);\n\t }\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t this.context.await = previousAllowAwait;\n\t this.context.allowYield = previousAllowYield;\n\t return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) :\n\t this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive\n\t Parser.prototype.parseDirective = function () {\n\t var token = this.lookahead;\n\t var node = this.createNode();\n\t var expr = this.parseExpression();\n\t var directive = (expr.type === syntax_1.Syntax.Literal) ? this.getTokenRaw(token).slice(1, -1) : null;\n\t this.consumeSemicolon();\n\t return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr));\n\t };\n\t Parser.prototype.parseDirectivePrologues = function () {\n\t var firstRestricted = null;\n\t var body = [];\n\t while (true) {\n\t var token = this.lookahead;\n\t if (token.type !== 8 /* StringLiteral */) {\n\t break;\n\t }\n\t var statement = this.parseDirective();\n\t body.push(statement);\n\t var directive = statement.directive;\n\t if (typeof directive !== 'string') {\n\t break;\n\t }\n\t if (directive === 'use strict') {\n\t this.context.strict = true;\n\t if (firstRestricted) {\n\t this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral);\n\t }\n\t if (!this.context.allowStrictDirective) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective);\n\t }\n\t }\n\t else {\n\t if (!firstRestricted && token.octal) {\n\t firstRestricted = token;\n\t }\n\t }\n\t }\n\t return body;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-method-definitions\n\t Parser.prototype.qualifiedPropertyName = function (token) {\n\t switch (token.type) {\n\t case 3 /* Identifier */:\n\t case 8 /* StringLiteral */:\n\t case 1 /* BooleanLiteral */:\n\t case 5 /* NullLiteral */:\n\t case 6 /* NumericLiteral */:\n\t case 4 /* Keyword */:\n\t return true;\n\t case 7 /* Punctuator */:\n\t return token.value === '[';\n\t default:\n\t break;\n\t }\n\t return false;\n\t };\n\t Parser.prototype.parseGetterMethod = function () {\n\t var node = this.createNode();\n\t var isGenerator = false;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = !isGenerator;\n\t var formalParameters = this.parseFormalParameters();\n\t if (formalParameters.params.length > 0) {\n\t this.tolerateError(messages_1.Messages.BadGetterArity);\n\t }\n\t var method = this.parsePropertyMethod(formalParameters);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t };\n\t Parser.prototype.parseSetterMethod = function () {\n\t var node = this.createNode();\n\t var isGenerator = false;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = !isGenerator;\n\t var formalParameters = this.parseFormalParameters();\n\t if (formalParameters.params.length !== 1) {\n\t this.tolerateError(messages_1.Messages.BadSetterArity);\n\t }\n\t else if (formalParameters.params[0] instanceof Node.RestElement) {\n\t this.tolerateError(messages_1.Messages.BadSetterRestParameter);\n\t }\n\t var method = this.parsePropertyMethod(formalParameters);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t };\n\t Parser.prototype.parseGeneratorMethod = function () {\n\t var node = this.createNode();\n\t var isGenerator = true;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = true;\n\t var params = this.parseFormalParameters();\n\t this.context.allowYield = false;\n\t var method = this.parsePropertyMethod(params);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-generator-function-definitions\n\t Parser.prototype.isStartOfExpression = function () {\n\t var start = true;\n\t var value = this.lookahead.value;\n\t switch (this.lookahead.type) {\n\t case 7 /* Punctuator */:\n\t start = (value === '[') || (value === '(') || (value === '{') ||\n\t (value === '+') || (value === '-') ||\n\t (value === '!') || (value === '~') ||\n\t (value === '++') || (value === '--') ||\n\t (value === '/') || (value === '/='); // regular expression literal\n\t break;\n\t case 4 /* Keyword */:\n\t start = (value === 'class') || (value === 'delete') ||\n\t (value === 'function') || (value === 'let') || (value === 'new') ||\n\t (value === 'super') || (value === 'this') || (value === 'typeof') ||\n\t (value === 'void') || (value === 'yield');\n\t break;\n\t default:\n\t break;\n\t }\n\t return start;\n\t };\n\t Parser.prototype.parseYieldExpression = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('yield');\n\t var argument = null;\n\t var delegate = false;\n\t if (!this.hasLineTerminator) {\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = false;\n\t delegate = this.match('*');\n\t if (delegate) {\n\t this.nextToken();\n\t argument = this.parseAssignmentExpression();\n\t }\n\t else if (this.isStartOfExpression()) {\n\t argument = this.parseAssignmentExpression();\n\t }\n\t this.context.allowYield = previousAllowYield;\n\t }\n\t return this.finalize(node, new Node.YieldExpression(argument, delegate));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-class-definitions\n\t Parser.prototype.parseClassElement = function (hasConstructor) {\n\t var token = this.lookahead;\n\t var node = this.createNode();\n\t var kind = '';\n\t var key = null;\n\t var value = null;\n\t var computed = false;\n\t var method = false;\n\t var isStatic = false;\n\t var isAsync = false;\n\t if (this.match('*')) {\n\t this.nextToken();\n\t }\n\t else {\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t var id = key;\n\t if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) {\n\t token = this.lookahead;\n\t isStatic = true;\n\t computed = this.match('[');\n\t if (this.match('*')) {\n\t this.nextToken();\n\t }\n\t else {\n\t key = this.parseObjectPropertyKey();\n\t }\n\t }\n\t if ((token.type === 3 /* Identifier */) && !this.hasLineTerminator && (token.value === 'async')) {\n\t var punctuator = this.lookahead.value;\n\t if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') {\n\t isAsync = true;\n\t token = this.lookahead;\n\t key = this.parseObjectPropertyKey();\n\t if (token.type === 3 /* Identifier */ && token.value === 'constructor') {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync);\n\t }\n\t }\n\t }\n\t }\n\t var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t if (token.type === 3 /* Identifier */) {\n\t if (token.value === 'get' && lookaheadPropertyKey) {\n\t kind = 'get';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t this.context.allowYield = false;\n\t value = this.parseGetterMethod();\n\t }\n\t else if (token.value === 'set' && lookaheadPropertyKey) {\n\t kind = 'set';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseSetterMethod();\n\t }\n\t }\n\t else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t kind = 'init';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseGeneratorMethod();\n\t method = true;\n\t }\n\t if (!kind && key && this.match('(')) {\n\t kind = 'init';\n\t value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t method = true;\n\t }\n\t if (!kind) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t if (kind === 'init') {\n\t kind = 'method';\n\t }\n\t if (!computed) {\n\t if (isStatic && this.isPropertyKey(key, 'prototype')) {\n\t this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype);\n\t }\n\t if (!isStatic && this.isPropertyKey(key, 'constructor')) {\n\t if (kind !== 'method' || !method || (value && value.generator)) {\n\t this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod);\n\t }\n\t if (hasConstructor.value) {\n\t this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor);\n\t }\n\t else {\n\t hasConstructor.value = true;\n\t }\n\t kind = 'constructor';\n\t }\n\t }\n\t return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic));\n\t };\n\t Parser.prototype.parseClassElementList = function () {\n\t var body = [];\n\t var hasConstructor = { value: false };\n\t this.expect('{');\n\t while (!this.match('}')) {\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t else {\n\t body.push(this.parseClassElement(hasConstructor));\n\t }\n\t }\n\t this.expect('}');\n\t return body;\n\t };\n\t Parser.prototype.parseClassBody = function () {\n\t var node = this.createNode();\n\t var elementList = this.parseClassElementList();\n\t return this.finalize(node, new Node.ClassBody(elementList));\n\t };\n\t Parser.prototype.parseClassDeclaration = function (identifierIsOptional) {\n\t var node = this.createNode();\n\t var previousStrict = this.context.strict;\n\t this.context.strict = true;\n\t this.expectKeyword('class');\n\t var id = (identifierIsOptional && (this.lookahead.type !== 3 /* Identifier */)) ? null : this.parseVariableIdentifier();\n\t var superClass = null;\n\t if (this.matchKeyword('extends')) {\n\t this.nextToken();\n\t superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t }\n\t var classBody = this.parseClassBody();\n\t this.context.strict = previousStrict;\n\t return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody));\n\t };\n\t Parser.prototype.parseClassExpression = function () {\n\t var node = this.createNode();\n\t var previousStrict = this.context.strict;\n\t this.context.strict = true;\n\t this.expectKeyword('class');\n\t var id = (this.lookahead.type === 3 /* Identifier */) ? this.parseVariableIdentifier() : null;\n\t var superClass = null;\n\t if (this.matchKeyword('extends')) {\n\t this.nextToken();\n\t superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t }\n\t var classBody = this.parseClassBody();\n\t this.context.strict = previousStrict;\n\t return this.finalize(node, new Node.ClassExpression(id, superClass, classBody));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-scripts\n\t // https://tc39.github.io/ecma262/#sec-modules\n\t Parser.prototype.parseModule = function () {\n\t this.context.strict = true;\n\t this.context.isModule = true;\n\t this.scanner.isModule = true;\n\t var node = this.createNode();\n\t var body = this.parseDirectivePrologues();\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t body.push(this.parseStatementListItem());\n\t }\n\t return this.finalize(node, new Node.Module(body));\n\t };\n\t Parser.prototype.parseScript = function () {\n\t var node = this.createNode();\n\t var body = this.parseDirectivePrologues();\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t body.push(this.parseStatementListItem());\n\t }\n\t return this.finalize(node, new Node.Script(body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-imports\n\t Parser.prototype.parseModuleSpecifier = function () {\n\t var node = this.createNode();\n\t if (this.lookahead.type !== 8 /* StringLiteral */) {\n\t this.throwError(messages_1.Messages.InvalidModuleSpecifier);\n\t }\n\t var token = this.nextToken();\n\t var raw = this.getTokenRaw(token);\n\t return this.finalize(node, new Node.Literal(token.value, raw));\n\t };\n\t // import {<foo as bar>} ...;\n\t Parser.prototype.parseImportSpecifier = function () {\n\t var node = this.createNode();\n\t var imported;\n\t var local;\n\t if (this.lookahead.type === 3 /* Identifier */) {\n\t imported = this.parseVariableIdentifier();\n\t local = imported;\n\t if (this.matchContextualKeyword('as')) {\n\t this.nextToken();\n\t local = this.parseVariableIdentifier();\n\t }\n\t }\n\t else {\n\t imported = this.parseIdentifierName();\n\t local = imported;\n\t if (this.matchContextualKeyword('as')) {\n\t this.nextToken();\n\t local = this.parseVariableIdentifier();\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.nextToken());\n\t }\n\t }\n\t return this.finalize(node, new Node.ImportSpecifier(local, imported));\n\t };\n\t // {foo, bar as bas}\n\t Parser.prototype.parseNamedImports = function () {\n\t this.expect('{');\n\t var specifiers = [];\n\t while (!this.match('}')) {\n\t specifiers.push(this.parseImportSpecifier());\n\t if (!this.match('}')) {\n\t this.expect(',');\n\t }\n\t }\n\t this.expect('}');\n\t return specifiers;\n\t };\n\t // import <foo> ...;\n\t Parser.prototype.parseImportDefaultSpecifier = function () {\n\t var node = this.createNode();\n\t var local = this.parseIdentifierName();\n\t return this.finalize(node, new Node.ImportDefaultSpecifier(local));\n\t };\n\t // import <* as foo> ...;\n\t Parser.prototype.parseImportNamespaceSpecifier = function () {\n\t var node = this.createNode();\n\t this.expect('*');\n\t if (!this.matchContextualKeyword('as')) {\n\t this.throwError(messages_1.Messages.NoAsAfterImportNamespace);\n\t }\n\t this.nextToken();\n\t var local = this.parseIdentifierName();\n\t return this.finalize(node, new Node.ImportNamespaceSpecifier(local));\n\t };\n\t Parser.prototype.parseImportDeclaration = function () {\n\t if (this.context.inFunctionBody) {\n\t this.throwError(messages_1.Messages.IllegalImportDeclaration);\n\t }\n\t var node = this.createNode();\n\t this.expectKeyword('import');\n\t var src;\n\t var specifiers = [];\n\t if (this.lookahead.type === 8 /* StringLiteral */) {\n\t // import 'foo';\n\t src = this.parseModuleSpecifier();\n\t }\n\t else {\n\t if (this.match('{')) {\n\t // import {bar}\n\t specifiers = specifiers.concat(this.parseNamedImports());\n\t }\n\t else if (this.match('*')) {\n\t // import * as foo\n\t specifiers.push(this.parseImportNamespaceSpecifier());\n\t }\n\t else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) {\n\t // import foo\n\t specifiers.push(this.parseImportDefaultSpecifier());\n\t if (this.match(',')) {\n\t this.nextToken();\n\t if (this.match('*')) {\n\t // import foo, * as foo\n\t specifiers.push(this.parseImportNamespaceSpecifier());\n\t }\n\t else if (this.match('{')) {\n\t // import foo, {bar}\n\t specifiers = specifiers.concat(this.parseNamedImports());\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.nextToken());\n\t }\n\t if (!this.matchContextualKeyword('from')) {\n\t var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t this.throwError(message, this.lookahead.value);\n\t }\n\t this.nextToken();\n\t src = this.parseModuleSpecifier();\n\t }\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ImportDeclaration(specifiers, src));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-exports\n\t Parser.prototype.parseExportSpecifier = function () {\n\t var node = this.createNode();\n\t var local = this.parseIdentifierName();\n\t var exported = local;\n\t if (this.matchContextualKeyword('as')) {\n\t this.nextToken();\n\t exported = this.parseIdentifierName();\n\t }\n\t return this.finalize(node, new Node.ExportSpecifier(local, exported));\n\t };\n\t Parser.prototype.parseExportDeclaration = function () {\n\t if (this.context.inFunctionBody) {\n\t this.throwError(messages_1.Messages.IllegalExportDeclaration);\n\t }\n\t var node = this.createNode();\n\t this.expectKeyword('export');\n\t var exportDeclaration;\n\t if (this.matchKeyword('default')) {\n\t // export default ...\n\t this.nextToken();\n\t if (this.matchKeyword('function')) {\n\t // export default function foo () {}\n\t // export default function () {}\n\t var declaration = this.parseFunctionDeclaration(true);\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t else if (this.matchKeyword('class')) {\n\t // export default class foo {}\n\t var declaration = this.parseClassDeclaration(true);\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t else if (this.matchContextualKeyword('async')) {\n\t // export default async function f () {}\n\t // export default async function () {}\n\t // export default async x => x\n\t var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression();\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t else {\n\t if (this.matchContextualKeyword('from')) {\n\t this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value);\n\t }\n\t // export default {};\n\t // export default [];\n\t // export default (1 + 2);\n\t var declaration = this.match('{') ? this.parseObjectInitializer() :\n\t this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression();\n\t this.consumeSemicolon();\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t }\n\t else if (this.match('*')) {\n\t // export * from 'foo';\n\t this.nextToken();\n\t if (!this.matchContextualKeyword('from')) {\n\t var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t this.throwError(message, this.lookahead.value);\n\t }\n\t this.nextToken();\n\t var src = this.parseModuleSpecifier();\n\t this.consumeSemicolon();\n\t exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src));\n\t }\n\t else if (this.lookahead.type === 4 /* Keyword */) {\n\t // export var f = 1;\n\t var declaration = void 0;\n\t switch (this.lookahead.value) {\n\t case 'let':\n\t case 'const':\n\t declaration = this.parseLexicalDeclaration({ inFor: false });\n\t break;\n\t case 'var':\n\t case 'class':\n\t case 'function':\n\t declaration = this.parseStatementListItem();\n\t break;\n\t default:\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t }\n\t else if (this.matchAsyncFunction()) {\n\t var declaration = this.parseFunctionDeclaration();\n\t exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t }\n\t else {\n\t var specifiers = [];\n\t var source = null;\n\t var isExportFromIdentifier = false;\n\t this.expect('{');\n\t while (!this.match('}')) {\n\t isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default');\n\t specifiers.push(this.parseExportSpecifier());\n\t if (!this.match('}')) {\n\t this.expect(',');\n\t }\n\t }\n\t this.expect('}');\n\t if (this.matchContextualKeyword('from')) {\n\t // export {default} from 'foo';\n\t // export {foo} from 'foo';\n\t this.nextToken();\n\t source = this.parseModuleSpecifier();\n\t this.consumeSemicolon();\n\t }\n\t else if (isExportFromIdentifier) {\n\t // export {default}; // missing fromClause\n\t var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t this.throwError(message, this.lookahead.value);\n\t }\n\t else {\n\t // export {foo};\n\t this.consumeSemicolon();\n\t }\n\t exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source));\n\t }\n\t return exportDeclaration;\n\t };\n\t return Parser;\n\t}());\n\texports.Parser = Parser;\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// Ensure the condition is true, otherwise throw an error.\n\t// This is only to have a better contract semantic, i.e. another safety net\n\t// to catch a logic error. The condition shall be fulfilled in normal case.\n\t// Do NOT use this to enforce a certain condition on any user input.\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tfunction assert(condition, message) {\n\t /* istanbul ignore if */\n\t if (!condition) {\n\t throw new Error('ASSERT: ' + message);\n\t }\n\t}\n\texports.assert = assert;\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t/* tslint:disable:max-classes-per-file */\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ErrorHandler = (function () {\n\t function ErrorHandler() {\n\t this.errors = [];\n\t this.tolerant = false;\n\t }\n\t ErrorHandler.prototype.recordError = function (error) {\n\t this.errors.push(error);\n\t };\n\t ErrorHandler.prototype.tolerate = function (error) {\n\t if (this.tolerant) {\n\t this.recordError(error);\n\t }\n\t else {\n\t throw error;\n\t }\n\t };\n\t ErrorHandler.prototype.constructError = function (msg, column) {\n\t var error = new Error(msg);\n\t try {\n\t throw error;\n\t }\n\t catch (base) {\n\t /* istanbul ignore else */\n\t if (Object.create && Object.defineProperty) {\n\t error = Object.create(base);\n\t Object.defineProperty(error, 'column', { value: column });\n\t }\n\t }\n\t /* istanbul ignore next */\n\t return error;\n\t };\n\t ErrorHandler.prototype.createError = function (index, line, col, description) {\n\t var msg = 'Line ' + line + ': ' + description;\n\t var error = this.constructError(msg, col);\n\t error.index = index;\n\t error.lineNumber = line;\n\t error.description = description;\n\t return error;\n\t };\n\t ErrorHandler.prototype.throwError = function (index, line, col, description) {\n\t throw this.createError(index, line, col, description);\n\t };\n\t ErrorHandler.prototype.tolerateError = function (index, line, col, description) {\n\t var error = this.createError(index, line, col, description);\n\t if (this.tolerant) {\n\t this.recordError(error);\n\t }\n\t else {\n\t throw error;\n\t }\n\t };\n\t return ErrorHandler;\n\t}());\n\texports.ErrorHandler = ErrorHandler;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// Error messages should be identical to V8.\n\texports.Messages = {\n\t BadGetterArity: 'Getter must not have any formal parameters',\n\t BadSetterArity: 'Setter must have exactly one formal parameter',\n\t BadSetterRestParameter: 'Setter function argument must not be a rest parameter',\n\t ConstructorIsAsync: 'Class constructor may not be an async method',\n\t ConstructorSpecialMethod: 'Class constructor may not be an accessor',\n\t DeclarationMissingInitializer: 'Missing initializer in %0 declaration',\n\t DefaultRestParameter: 'Unexpected token =',\n\t DuplicateBinding: 'Duplicate binding %0',\n\t DuplicateConstructor: 'A class may only have one constructor',\n\t DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',\n\t ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer',\n\t GeneratorInLegacyContext: 'Generator declarations are not allowed in legacy contexts',\n\t IllegalBreak: 'Illegal break statement',\n\t IllegalContinue: 'Illegal continue statement',\n\t IllegalExportDeclaration: 'Unexpected token',\n\t IllegalImportDeclaration: 'Unexpected token',\n\t IllegalLanguageModeDirective: 'Illegal \\'use strict\\' directive in function with non-simple parameter list',\n\t IllegalReturn: 'Illegal return statement',\n\t InvalidEscapedReservedWord: 'Keyword must not contain escaped characters',\n\t InvalidHexEscapeSequence: 'Invalid hexadecimal escape sequence',\n\t InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n\t InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n\t InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',\n\t InvalidModuleSpecifier: 'Unexpected token',\n\t InvalidRegExp: 'Invalid regular expression',\n\t LetInLexicalBinding: 'let is disallowed as a lexically bound name',\n\t MissingFromClause: 'Unexpected token',\n\t MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n\t NewlineAfterThrow: 'Illegal newline after throw',\n\t NoAsAfterImportNamespace: 'Unexpected token',\n\t NoCatchOrFinally: 'Missing catch or finally after try',\n\t ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',\n\t Redeclaration: '%0 \\'%1\\' has already been declared',\n\t StaticPrototype: 'Classes may not have static property named prototype',\n\t StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n\t StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n\t StrictFunction: 'In strict mode code, functions can only be declared at top level or inside a block',\n\t StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n\t StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n\t StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n\t StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n\t StrictModeWith: 'Strict mode code may not include a with statement',\n\t StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n\t StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n\t StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n\t StrictReservedWord: 'Use of future reserved word in strict mode',\n\t StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n\t TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',\n\t UnexpectedEOS: 'Unexpected end of input',\n\t UnexpectedIdentifier: 'Unexpected identifier',\n\t UnexpectedNumber: 'Unexpected number',\n\t UnexpectedReserved: 'Unexpected reserved word',\n\t UnexpectedString: 'Unexpected string',\n\t UnexpectedTemplate: 'Unexpected quasi %0',\n\t UnexpectedToken: 'Unexpected token %0',\n\t UnexpectedTokenIllegal: 'Unexpected token ILLEGAL',\n\t UnknownLabel: 'Undefined label \\'%0\\'',\n\t UnterminatedRegExp: 'Invalid regular expression: missing /'\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __webpack_require__(9);\n\tvar character_1 = __webpack_require__(4);\n\tvar messages_1 = __webpack_require__(11);\n\tfunction hexValue(ch) {\n\t return '0123456789abcdef'.indexOf(ch.toLowerCase());\n\t}\n\tfunction octalValue(ch) {\n\t return '01234567'.indexOf(ch);\n\t}\n\tvar Scanner = (function () {\n\t function Scanner(code, handler) {\n\t this.source = code;\n\t this.errorHandler = handler;\n\t this.trackComment = false;\n\t this.isModule = false;\n\t this.length = code.length;\n\t this.index = 0;\n\t this.lineNumber = (code.length > 0) ? 1 : 0;\n\t this.lineStart = 0;\n\t this.curlyStack = [];\n\t }\n\t Scanner.prototype.saveState = function () {\n\t return {\n\t index: this.index,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart\n\t };\n\t };\n\t Scanner.prototype.restoreState = function (state) {\n\t this.index = state.index;\n\t this.lineNumber = state.lineNumber;\n\t this.lineStart = state.lineStart;\n\t };\n\t Scanner.prototype.eof = function () {\n\t return this.index >= this.length;\n\t };\n\t Scanner.prototype.throwUnexpectedToken = function (message) {\n\t if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t };\n\t Scanner.prototype.tolerateUnexpectedToken = function (message) {\n\t if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t };\n\t // https://tc39.github.io/ecma262/#sec-comments\n\t Scanner.prototype.skipSingleLineComment = function (offset) {\n\t var comments = [];\n\t var start, loc;\n\t if (this.trackComment) {\n\t comments = [];\n\t start = this.index - offset;\n\t loc = {\n\t start: {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart - offset\n\t },\n\t end: {}\n\t };\n\t }\n\t while (!this.eof()) {\n\t var ch = this.source.charCodeAt(this.index);\n\t ++this.index;\n\t if (character_1.Character.isLineTerminator(ch)) {\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart - 1\n\t };\n\t var entry = {\n\t multiLine: false,\n\t slice: [start + offset, this.index - 1],\n\t range: [start, this.index - 1],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t if (ch === 13 && this.source.charCodeAt(this.index) === 10) {\n\t ++this.index;\n\t }\n\t ++this.lineNumber;\n\t this.lineStart = this.index;\n\t return comments;\n\t }\n\t }\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart\n\t };\n\t var entry = {\n\t multiLine: false,\n\t slice: [start + offset, this.index],\n\t range: [start, this.index],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t return comments;\n\t };\n\t Scanner.prototype.skipMultiLineComment = function () {\n\t var comments = [];\n\t var start, loc;\n\t if (this.trackComment) {\n\t comments = [];\n\t start = this.index - 2;\n\t loc = {\n\t start: {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart - 2\n\t },\n\t end: {}\n\t };\n\t }\n\t while (!this.eof()) {\n\t var ch = this.source.charCodeAt(this.index);\n\t if (character_1.Character.isLineTerminator(ch)) {\n\t if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) {\n\t ++this.index;\n\t }\n\t ++this.lineNumber;\n\t ++this.index;\n\t this.lineStart = this.index;\n\t }\n\t else if (ch === 0x2A) {\n\t // Block comment ends with '*/'.\n\t if (this.source.charCodeAt(this.index + 1) === 0x2F) {\n\t this.index += 2;\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart\n\t };\n\t var entry = {\n\t multiLine: true,\n\t slice: [start + 2, this.index - 2],\n\t range: [start, this.index],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t return comments;\n\t }\n\t ++this.index;\n\t }\n\t else {\n\t ++this.index;\n\t }\n\t }\n\t // Ran off the end of the file - the whole thing is a comment\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart\n\t };\n\t var entry = {\n\t multiLine: true,\n\t slice: [start + 2, this.index],\n\t range: [start, this.index],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t this.tolerateUnexpectedToken();\n\t return comments;\n\t };\n\t Scanner.prototype.scanComments = function () {\n\t var comments;\n\t if (this.trackComment) {\n\t comments = [];\n\t }\n\t var start = (this.index === 0);\n\t while (!this.eof()) {\n\t var ch = this.source.charCodeAt(this.index);\n\t if (character_1.Character.isWhiteSpace(ch)) {\n\t ++this.index;\n\t }\n\t else if (character_1.Character.isLineTerminator(ch)) {\n\t ++this.index;\n\t if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) {\n\t ++this.index;\n\t }\n\t ++this.lineNumber;\n\t this.lineStart = this.index;\n\t start = true;\n\t }\n\t else if (ch === 0x2F) {\n\t ch = this.source.charCodeAt(this.index + 1);\n\t if (ch === 0x2F) {\n\t this.index += 2;\n\t var comment = this.skipSingleLineComment(2);\n\t if (this.trackComment) {\n\t comments = comments.concat(comment);\n\t }\n\t start = true;\n\t }\n\t else if (ch === 0x2A) {\n\t this.index += 2;\n\t var comment = this.skipMultiLineComment();\n\t if (this.trackComment) {\n\t comments = comments.concat(comment);\n\t }\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t else if (start && ch === 0x2D) {\n\t // U+003E is '>'\n\t if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) {\n\t // '-->' is a single-line comment\n\t this.index += 3;\n\t var comment = this.skipSingleLineComment(3);\n\t if (this.trackComment) {\n\t comments = comments.concat(comment);\n\t }\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t else if (ch === 0x3C && !this.isModule) {\n\t if (this.source.slice(this.index + 1, this.index + 4) === '!--') {\n\t this.index += 4; // `<!--`\n\t var comment = this.skipSingleLineComment(4);\n\t if (this.trackComment) {\n\t comments = comments.concat(comment);\n\t }\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t return comments;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-future-reserved-words\n\t Scanner.prototype.isFutureReservedWord = function (id) {\n\t switch (id) {\n\t case 'enum':\n\t case 'export':\n\t case 'import':\n\t case 'super':\n\t return true;\n\t default:\n\t return false;\n\t }\n\t };\n\t Scanner.prototype.isStrictModeReservedWord = function (id) {\n\t switch (id) {\n\t case 'implements':\n\t case 'interface':\n\t case 'package':\n\t case 'private':\n\t case 'protected':\n\t case 'public':\n\t case 'static':\n\t case 'yield':\n\t case 'let':\n\t return true;\n\t default:\n\t return false;\n\t }\n\t };\n\t Scanner.prototype.isRestrictedWord = function (id) {\n\t return id === 'eval' || id === 'arguments';\n\t };\n\t // https://tc39.github.io/ecma262/#sec-keywords\n\t Scanner.prototype.isKeyword = function (id) {\n\t switch (id.length) {\n\t case 2:\n\t return (id === 'if') || (id === 'in') || (id === 'do');\n\t case 3:\n\t return (id === 'var') || (id === 'for') || (id === 'new') ||\n\t (id === 'try') || (id === 'let');\n\t case 4:\n\t return (id === 'this') || (id === 'else') || (id === 'case') ||\n\t (id === 'void') || (id === 'with') || (id === 'enum');\n\t case 5:\n\t return (id === 'while') || (id === 'break') || (id === 'catch') ||\n\t (id === 'throw') || (id === 'const') || (id === 'yield') ||\n\t (id === 'class') || (id === 'super');\n\t case 6:\n\t return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n\t (id === 'switch') || (id === 'export') || (id === 'import');\n\t case 7:\n\t return (id === 'default') || (id === 'finally') || (id === 'extends');\n\t case 8:\n\t return (id === 'function') || (id === 'continue') || (id === 'debugger');\n\t case 10:\n\t return (id === 'instanceof');\n\t default:\n\t return false;\n\t }\n\t };\n\t Scanner.prototype.codePointAt = function (i) {\n\t var cp = this.source.charCodeAt(i);\n\t if (cp >= 0xD800 && cp <= 0xDBFF) {\n\t var second = this.source.charCodeAt(i + 1);\n\t if (second >= 0xDC00 && second <= 0xDFFF) {\n\t var first = cp;\n\t cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n\t }\n\t }\n\t return cp;\n\t };\n\t Scanner.prototype.scanHexEscape = function (prefix) {\n\t var len = (prefix === 'u') ? 4 : 2;\n\t var code = 0;\n\t for (var i = 0; i < len; ++i) {\n\t if (!this.eof() && character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {\n\t code = code * 16 + hexValue(this.source[this.index++]);\n\t }\n\t else {\n\t return null;\n\t }\n\t }\n\t return String.fromCharCode(code);\n\t };\n\t Scanner.prototype.scanUnicodeCodePointEscape = function () {\n\t var ch = this.source[this.index];\n\t var code = 0;\n\t // At least, one hex digit is required.\n\t if (ch === '}') {\n\t this.throwUnexpectedToken();\n\t }\n\t while (!this.eof()) {\n\t ch = this.source[this.index++];\n\t if (!character_1.Character.isHexDigit(ch.charCodeAt(0))) {\n\t break;\n\t }\n\t code = code * 16 + hexValue(ch);\n\t }\n\t if (code > 0x10FFFF || ch !== '}') {\n\t this.throwUnexpectedToken();\n\t }\n\t return character_1.Character.fromCodePoint(code);\n\t };\n\t Scanner.prototype.getIdentifier = function () {\n\t var start = this.index++;\n\t while (!this.eof()) {\n\t var ch = this.source.charCodeAt(this.index);\n\t if (ch === 0x5C) {\n\t // Blackslash (U+005C) marks Unicode escape sequence.\n\t this.index = start;\n\t return this.getComplexIdentifier();\n\t }\n\t else if (ch >= 0xD800 && ch < 0xDFFF) {\n\t // Need to handle surrogate pairs.\n\t this.index = start;\n\t return this.getComplexIdentifier();\n\t }\n\t if (character_1.Character.isIdentifierPart(ch)) {\n\t ++this.index;\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t return this.source.slice(start, this.index);\n\t };\n\t Scanner.prototype.getComplexIdentifier = function () {\n\t var cp = this.codePointAt(this.index);\n\t var id = character_1.Character.fromCodePoint(cp);\n\t this.index += id.length;\n\t // '\\u' (U+005C, U+0075) denotes an escaped character.\n\t var ch;\n\t if (cp === 0x5C) {\n\t if (this.source.charCodeAt(this.index) !== 0x75) {\n\t this.throwUnexpectedToken();\n\t }\n\t ++this.index;\n\t if (this.source[this.index] === '{') {\n\t ++this.index;\n\t ch = this.scanUnicodeCodePointEscape();\n\t }\n\t else {\n\t ch = this.scanHexEscape('u');\n\t if (ch === null || ch === '\\\\' || !character_1.Character.isIdentifierStart(ch.charCodeAt(0))) {\n\t this.throwUnexpectedToken();\n\t }\n\t }\n\t id = ch;\n\t }\n\t while (!this.eof()) {\n\t cp = this.codePointAt(this.index);\n\t if (!character_1.Character.isIdentifierPart(cp)) {\n\t break;\n\t }\n\t ch = character_1.Character.fromCodePoint(cp);\n\t id += ch;\n\t this.index += ch.length;\n\t // '\\u' (U+005C, U+0075) denotes an escaped character.\n\t if (cp === 0x5C) {\n\t id = id.substr(0, id.length - 1);\n\t if (this.source.charCodeAt(this.index) !== 0x75) {\n\t this.throwUnexpectedToken();\n\t }\n\t ++this.index;\n\t if (this.source[this.index] === '{') {\n\t ++this.index;\n\t ch = this.scanUnicodeCodePointEscape();\n\t }\n\t else {\n\t ch = this.scanHexEscape('u');\n\t if (ch === null || ch === '\\\\' || !character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {\n\t this.throwUnexpectedToken();\n\t }\n\t }\n\t id += ch;\n\t }\n\t }\n\t return id;\n\t };\n\t Scanner.prototype.octalToDecimal = function (ch) {\n\t // \\0 is not octal escape sequence\n\t var octal = (ch !== '0');\n\t var code = octalValue(ch);\n\t if (!this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t octal = true;\n\t code = code * 8 + octalValue(this.source[this.index++]);\n\t // 3 digits are only allowed when string starts\n\t // with 0, 1, 2, 3\n\t if ('0123'.indexOf(ch) >= 0 && !this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t code = code * 8 + octalValue(this.source[this.index++]);\n\t }\n\t }\n\t return {\n\t code: code,\n\t octal: octal\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-names-and-keywords\n\t Scanner.prototype.scanIdentifier = function () {\n\t var type;\n\t var start = this.index;\n\t // Backslash (U+005C) starts an escaped character.\n\t var id = (this.source.charCodeAt(start) === 0x5C) ? this.getComplexIdentifier() : this.getIdentifier();\n\t // There is no keyword or literal with only one character.\n\t // Thus, it must be an identifier.\n\t if (id.length === 1) {\n\t type = 3 /* Identifier */;\n\t }\n\t else if (this.isKeyword(id)) {\n\t type = 4 /* Keyword */;\n\t }\n\t else if (id === 'null') {\n\t type = 5 /* NullLiteral */;\n\t }\n\t else if (id === 'true' || id === 'false') {\n\t type = 1 /* BooleanLiteral */;\n\t }\n\t else {\n\t type = 3 /* Identifier */;\n\t }\n\t if (type !== 3 /* Identifier */ && (start + id.length !== this.index)) {\n\t var restore = this.index;\n\t this.index = start;\n\t this.tolerateUnexpectedToken(messages_1.Messages.InvalidEscapedReservedWord);\n\t this.index = restore;\n\t }\n\t return {\n\t type: type,\n\t value: id,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-punctuators\n\t Scanner.prototype.scanPunctuator = function () {\n\t var start = this.index;\n\t // Check for most common single-character punctuators.\n\t var str = this.source[this.index];\n\t switch (str) {\n\t case '(':\n\t case '{':\n\t if (str === '{') {\n\t this.curlyStack.push('{');\n\t }\n\t ++this.index;\n\t break;\n\t case '.':\n\t ++this.index;\n\t if (this.source[this.index] === '.' && this.source[this.index + 1] === '.') {\n\t // Spread operator: ...\n\t this.index += 2;\n\t str = '...';\n\t }\n\t break;\n\t case '}':\n\t ++this.index;\n\t this.curlyStack.pop();\n\t break;\n\t case ')':\n\t case ';':\n\t case ',':\n\t case '[':\n\t case ']':\n\t case ':':\n\t case '?':\n\t case '~':\n\t ++this.index;\n\t break;\n\t default:\n\t // 4-character punctuator.\n\t str = this.source.substr(this.index, 4);\n\t if (str === '>>>=') {\n\t this.index += 4;\n\t }\n\t else {\n\t // 3-character punctuators.\n\t str = str.substr(0, 3);\n\t if (str === '===' || str === '!==' || str === '>>>' ||\n\t str === '<<=' || str === '>>=' || str === '**=') {\n\t this.index += 3;\n\t }\n\t else {\n\t // 2-character punctuators.\n\t str = str.substr(0, 2);\n\t if (str === '&&' || str === '||' || str === '==' || str === '!=' ||\n\t str === '+=' || str === '-=' || str === '*=' || str === '/=' ||\n\t str === '++' || str === '--' || str === '<<' || str === '>>' ||\n\t str === '&=' || str === '|=' || str === '^=' || str === '%=' ||\n\t str === '<=' || str === '>=' || str === '=>' || str === '**') {\n\t this.index += 2;\n\t }\n\t else {\n\t // 1-character punctuators.\n\t str = this.source[this.index];\n\t if ('<>=!+-*%&|^/'.indexOf(str) >= 0) {\n\t ++this.index;\n\t }\n\t }\n\t }\n\t }\n\t }\n\t if (this.index === start) {\n\t this.throwUnexpectedToken();\n\t }\n\t return {\n\t type: 7 /* Punctuator */,\n\t value: str,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n\t Scanner.prototype.scanHexLiteral = function (start) {\n\t var num = '';\n\t while (!this.eof()) {\n\t if (!character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {\n\t break;\n\t }\n\t num += this.source[this.index++];\n\t }\n\t if (num.length === 0) {\n\t this.throwUnexpectedToken();\n\t }\n\t if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n\t this.throwUnexpectedToken();\n\t }\n\t return {\n\t type: 6 /* NumericLiteral */,\n\t value: parseInt('0x' + num, 16),\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t Scanner.prototype.scanBinaryLiteral = function (start) {\n\t var num = '';\n\t var ch;\n\t while (!this.eof()) {\n\t ch = this.source[this.index];\n\t if (ch !== '0' && ch !== '1') {\n\t break;\n\t }\n\t num += this.source[this.index++];\n\t }\n\t if (num.length === 0) {\n\t // only 0b or 0B\n\t this.throwUnexpectedToken();\n\t }\n\t if (!this.eof()) {\n\t ch = this.source.charCodeAt(this.index);\n\t /* istanbul ignore else */\n\t if (character_1.Character.isIdentifierStart(ch) || character_1.Character.isDecimalDigit(ch)) {\n\t this.throwUnexpectedToken();\n\t }\n\t }\n\t return {\n\t type: 6 /* NumericLiteral */,\n\t value: parseInt(num, 2),\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t Scanner.prototype.scanOctalLiteral = function (prefix, start) {\n\t var num = '';\n\t var octal = false;\n\t if (character_1.Character.isOctalDigit(prefix.charCodeAt(0))) {\n\t octal = true;\n\t num = '0' + this.source[this.index++];\n\t }\n\t else {\n\t ++this.index;\n\t }\n\t while (!this.eof()) {\n\t if (!character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t break;\n\t }\n\t num += this.source[this.index++];\n\t }\n\t if (!octal && num.length === 0) {\n\t // only 0o or 0O\n\t this.throwUnexpectedToken();\n\t }\n\t if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index)) || character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t this.throwUnexpectedToken();\n\t }\n\t return {\n\t type: 6 /* NumericLiteral */,\n\t value: parseInt(num, 8),\n\t octal: octal,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t Scanner.prototype.isImplicitOctalLiteral = function () {\n\t // Implicit octal, unless there is a non-octal digit.\n\t // (Annex B.1.1 on Numeric Literals)\n\t for (var i = this.index + 1; i < this.length; ++i) {\n\t var ch = this.source[i];\n\t if (ch === '8' || ch === '9') {\n\t return false;\n\t }\n\t if (!character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t return true;\n\t }\n\t }\n\t return true;\n\t };\n\t Scanner.prototype.scanNumericLiteral = function () {\n\t var start = this.index;\n\t var ch = this.source[start];\n\t assert_1.assert(character_1.Character.isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), 'Numeric literal must start with a decimal digit or a decimal point');\n\t var num = '';\n\t if (ch !== '.') {\n\t num = this.source[this.index++];\n\t ch = this.source[this.index];\n\t // Hex number starts with '0x'.\n\t // Octal number starts with '0'.\n\t // Octal number in ES6 starts with '0o'.\n\t // Binary number in ES6 starts with '0b'.\n\t if (num === '0') {\n\t if (ch === 'x' || ch === 'X') {\n\t ++this.index;\n\t return this.scanHexLiteral(start);\n\t }\n\t if (ch === 'b' || ch === 'B') {\n\t ++this.index;\n\t return this.scanBinaryLiteral(start);\n\t }\n\t if (ch === 'o' || ch === 'O') {\n\t return this.scanOctalLiteral(ch, start);\n\t }\n\t if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t if (this.isImplicitOctalLiteral()) {\n\t return this.scanOctalLiteral(ch, start);\n\t }\n\t }\n\t }\n\t while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t num += this.source[this.index++];\n\t }\n\t ch = this.source[this.index];\n\t }\n\t if (ch === '.') {\n\t num += this.source[this.index++];\n\t while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t num += this.source[this.index++];\n\t }\n\t ch = this.source[this.index];\n\t }\n\t if (ch === 'e' || ch === 'E') {\n\t num += this.source[this.index++];\n\t ch = this.source[this.index];\n\t if (ch === '+' || ch === '-') {\n\t num += this.source[this.index++];\n\t }\n\t if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t num += this.source[this.index++];\n\t }\n\t }\n\t else {\n\t this.throwUnexpectedToken();\n\t }\n\t }\n\t if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n\t this.throwUnexpectedToken();\n\t }\n\t return {\n\t type: 6 /* NumericLiteral */,\n\t value: parseFloat(num),\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-literals-string-literals\n\t Scanner.prototype.scanStringLiteral = function () {\n\t var start = this.index;\n\t var quote = this.source[start];\n\t assert_1.assert((quote === '\\'' || quote === '\"'), 'String literal must starts with a quote');\n\t ++this.index;\n\t var octal = false;\n\t var str = '';\n\t while (!this.eof()) {\n\t var ch = this.source[this.index++];\n\t if (ch === quote) {\n\t quote = '';\n\t break;\n\t }\n\t else if (ch === '\\\\') {\n\t ch = this.source[this.index++];\n\t if (!ch || !character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t switch (ch) {\n\t case 'u':\n\t if (this.source[this.index] === '{') {\n\t ++this.index;\n\t str += this.scanUnicodeCodePointEscape();\n\t }\n\t else {\n\t var unescaped_1 = this.scanHexEscape(ch);\n\t if (unescaped_1 === null) {\n\t this.throwUnexpectedToken();\n\t }\n\t str += unescaped_1;\n\t }\n\t break;\n\t case 'x':\n\t var unescaped = this.scanHexEscape(ch);\n\t if (unescaped === null) {\n\t this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);\n\t }\n\t str += unescaped;\n\t break;\n\t case 'n':\n\t str += '\\n';\n\t break;\n\t case 'r':\n\t str += '\\r';\n\t break;\n\t case 't':\n\t str += '\\t';\n\t break;\n\t case 'b':\n\t str += '\\b';\n\t break;\n\t case 'f':\n\t str += '\\f';\n\t break;\n\t case 'v':\n\t str += '\\x0B';\n\t break;\n\t case '8':\n\t case '9':\n\t str += ch;\n\t this.tolerateUnexpectedToken();\n\t break;\n\t default:\n\t if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t var octToDec = this.octalToDecimal(ch);\n\t octal = octToDec.octal || octal;\n\t str += String.fromCharCode(octToDec.code);\n\t }\n\t else {\n\t str += ch;\n\t }\n\t break;\n\t }\n\t }\n\t else {\n\t ++this.lineNumber;\n\t if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t ++this.index;\n\t }\n\t this.lineStart = this.index;\n\t }\n\t }\n\t else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t break;\n\t }\n\t else {\n\t str += ch;\n\t }\n\t }\n\t if (quote !== '') {\n\t this.index = start;\n\t this.throwUnexpectedToken();\n\t }\n\t return {\n\t type: 8 /* StringLiteral */,\n\t value: str,\n\t octal: octal,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-template-literal-lexical-components\n\t Scanner.prototype.scanTemplate = function () {\n\t var cooked = '';\n\t var terminated = false;\n\t var start = this.index;\n\t var head = (this.source[start] === '`');\n\t var tail = false;\n\t var rawOffset = 2;\n\t ++this.index;\n\t while (!this.eof()) {\n\t var ch = this.source[this.index++];\n\t if (ch === '`') {\n\t rawOffset = 1;\n\t tail = true;\n\t terminated = true;\n\t break;\n\t }\n\t else if (ch === '$') {\n\t if (this.source[this.index] === '{') {\n\t this.curlyStack.push('${');\n\t ++this.index;\n\t terminated = true;\n\t break;\n\t }\n\t cooked += ch;\n\t }\n\t else if (ch === '\\\\') {\n\t ch = this.source[this.index++];\n\t if (!character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t switch (ch) {\n\t case 'n':\n\t cooked += '\\n';\n\t break;\n\t case 'r':\n\t cooked += '\\r';\n\t break;\n\t case 't':\n\t cooked += '\\t';\n\t break;\n\t case 'u':\n\t if (this.source[this.index] === '{') {\n\t ++this.index;\n\t cooked += this.scanUnicodeCodePointEscape();\n\t }\n\t else {\n\t var restore = this.index;\n\t var unescaped_2 = this.scanHexEscape(ch);\n\t if (unescaped_2 !== null) {\n\t cooked += unescaped_2;\n\t }\n\t else {\n\t this.index = restore;\n\t cooked += ch;\n\t }\n\t }\n\t break;\n\t case 'x':\n\t var unescaped = this.scanHexEscape(ch);\n\t if (unescaped === null) {\n\t this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);\n\t }\n\t cooked += unescaped;\n\t break;\n\t case 'b':\n\t cooked += '\\b';\n\t break;\n\t case 'f':\n\t cooked += '\\f';\n\t break;\n\t case 'v':\n\t cooked += '\\v';\n\t break;\n\t default:\n\t if (ch === '0') {\n\t if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t // Illegal: \\01 \\02 and so on\n\t this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);\n\t }\n\t cooked += '\\0';\n\t }\n\t else if (character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t // Illegal: \\1 \\2\n\t this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);\n\t }\n\t else {\n\t cooked += ch;\n\t }\n\t break;\n\t }\n\t }\n\t else {\n\t ++this.lineNumber;\n\t if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t ++this.index;\n\t }\n\t this.lineStart = this.index;\n\t }\n\t }\n\t else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t ++this.lineNumber;\n\t if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t ++this.index;\n\t }\n\t this.lineStart = this.index;\n\t cooked += '\\n';\n\t }\n\t else {\n\t cooked += ch;\n\t }\n\t }\n\t if (!terminated) {\n\t this.throwUnexpectedToken();\n\t }\n\t if (!head) {\n\t this.curlyStack.pop();\n\t }\n\t return {\n\t type: 10 /* Template */,\n\t value: this.source.slice(start + 1, this.index - rawOffset),\n\t cooked: cooked,\n\t head: head,\n\t tail: tail,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n\t Scanner.prototype.testRegExp = function (pattern, flags) {\n\t // The BMP character to use as a replacement for astral symbols when\n\t // translating an ES6 \"u\"-flagged pattern to an ES5-compatible\n\t // approximation.\n\t // Note: replacing with '\\uFFFF' enables false positives in unlikely\n\t // scenarios. For example, `[\\u{1044f}-\\u{10440}]` is an invalid\n\t // pattern that would not be detected by this substitution.\n\t var astralSubstitute = '\\uFFFF';\n\t var tmp = pattern;\n\t var self = this;\n\t if (flags.indexOf('u') >= 0) {\n\t tmp = tmp\n\t .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {\n\t var codePoint = parseInt($1 || $2, 16);\n\t if (codePoint > 0x10FFFF) {\n\t self.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);\n\t }\n\t if (codePoint <= 0xFFFF) {\n\t return String.fromCharCode(codePoint);\n\t }\n\t return astralSubstitute;\n\t })\n\t .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, astralSubstitute);\n\t }\n\t // First, detect invalid regular expressions.\n\t try {\n\t RegExp(tmp);\n\t }\n\t catch (e) {\n\t this.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);\n\t }\n\t // Return a regular expression object for this pattern-flag pair, or\n\t // `null` in case the current environment doesn't support the flags it\n\t // uses.\n\t try {\n\t return new RegExp(pattern, flags);\n\t }\n\t catch (exception) {\n\t /* istanbul ignore next */\n\t return null;\n\t }\n\t };\n\t Scanner.prototype.scanRegExpBody = function () {\n\t var ch = this.source[this.index];\n\t assert_1.assert(ch === '/', 'Regular expression literal must start with a slash');\n\t var str = this.source[this.index++];\n\t var classMarker = false;\n\t var terminated = false;\n\t while (!this.eof()) {\n\t ch = this.source[this.index++];\n\t str += ch;\n\t if (ch === '\\\\') {\n\t ch = this.source[this.index++];\n\t // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n\t if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t }\n\t str += ch;\n\t }\n\t else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t }\n\t else if (classMarker) {\n\t if (ch === ']') {\n\t classMarker = false;\n\t }\n\t }\n\t else {\n\t if (ch === '/') {\n\t terminated = true;\n\t break;\n\t }\n\t else if (ch === '[') {\n\t classMarker = true;\n\t }\n\t }\n\t }\n\t if (!terminated) {\n\t this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t }\n\t // Exclude leading and trailing slash.\n\t return str.substr(1, str.length - 2);\n\t };\n\t Scanner.prototype.scanRegExpFlags = function () {\n\t var str = '';\n\t var flags = '';\n\t while (!this.eof()) {\n\t var ch = this.source[this.index];\n\t if (!character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {\n\t break;\n\t }\n\t ++this.index;\n\t if (ch === '\\\\' && !this.eof()) {\n\t ch = this.source[this.index];\n\t if (ch === 'u') {\n\t ++this.index;\n\t var restore = this.index;\n\t var char = this.scanHexEscape('u');\n\t if (char !== null) {\n\t flags += char;\n\t for (str += '\\\\u'; restore < this.index; ++restore) {\n\t str += this.source[restore];\n\t }\n\t }\n\t else {\n\t this.index = restore;\n\t flags += 'u';\n\t str += '\\\\u';\n\t }\n\t this.tolerateUnexpectedToken();\n\t }\n\t else {\n\t str += '\\\\';\n\t this.tolerateUnexpectedToken();\n\t }\n\t }\n\t else {\n\t flags += ch;\n\t str += ch;\n\t }\n\t }\n\t return flags;\n\t };\n\t Scanner.prototype.scanRegExp = function () {\n\t var start = this.index;\n\t var pattern = this.scanRegExpBody();\n\t var flags = this.scanRegExpFlags();\n\t var value = this.testRegExp(pattern, flags);\n\t return {\n\t type: 9 /* RegularExpression */,\n\t value: '',\n\t pattern: pattern,\n\t flags: flags,\n\t regex: value,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: start,\n\t end: this.index\n\t };\n\t };\n\t Scanner.prototype.lex = function () {\n\t if (this.eof()) {\n\t return {\n\t type: 2 /* EOF */,\n\t value: '',\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart,\n\t start: this.index,\n\t end: this.index\n\t };\n\t }\n\t var cp = this.source.charCodeAt(this.index);\n\t if (character_1.Character.isIdentifierStart(cp)) {\n\t return this.scanIdentifier();\n\t }\n\t // Very common: ( and ) and ;\n\t if (cp === 0x28 || cp === 0x29 || cp === 0x3B) {\n\t return this.scanPunctuator();\n\t }\n\t // String literal starts with single quote (U+0027) or double quote (U+0022).\n\t if (cp === 0x27 || cp === 0x22) {\n\t return this.scanStringLiteral();\n\t }\n\t // Dot (.) U+002E can also start a floating-point number, hence the need\n\t // to check the next character.\n\t if (cp === 0x2E) {\n\t if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index + 1))) {\n\t return this.scanNumericLiteral();\n\t }\n\t return this.scanPunctuator();\n\t }\n\t if (character_1.Character.isDecimalDigit(cp)) {\n\t return this.scanNumericLiteral();\n\t }\n\t // Template literals start with ` (U+0060) for template head\n\t // or } (U+007D) for template middle or template tail.\n\t if (cp === 0x60 || (cp === 0x7D && this.curlyStack[this.curlyStack.length - 1] === '${')) {\n\t return this.scanTemplate();\n\t }\n\t // Possible identifier start in a surrogate pair.\n\t if (cp >= 0xD800 && cp < 0xDFFF) {\n\t if (character_1.Character.isIdentifierStart(this.codePointAt(this.index))) {\n\t return this.scanIdentifier();\n\t }\n\t }\n\t return this.scanPunctuator();\n\t };\n\t return Scanner;\n\t}());\n\texports.Scanner = Scanner;\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.TokenName = {};\n\texports.TokenName[1 /* BooleanLiteral */] = 'Boolean';\n\texports.TokenName[2 /* EOF */] = '<end>';\n\texports.TokenName[3 /* Identifier */] = 'Identifier';\n\texports.TokenName[4 /* Keyword */] = 'Keyword';\n\texports.TokenName[5 /* NullLiteral */] = 'Null';\n\texports.TokenName[6 /* NumericLiteral */] = 'Numeric';\n\texports.TokenName[7 /* Punctuator */] = 'Punctuator';\n\texports.TokenName[8 /* StringLiteral */] = 'String';\n\texports.TokenName[9 /* RegularExpression */] = 'RegularExpression';\n\texports.TokenName[10 /* Template */] = 'Template';\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// Generated by generate-xhtml-entities.js. DO NOT MODIFY!\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.XHTMLEntities = {\n\t quot: '\\u0022',\n\t amp: '\\u0026',\n\t apos: '\\u0027',\n\t gt: '\\u003E',\n\t nbsp: '\\u00A0',\n\t iexcl: '\\u00A1',\n\t cent: '\\u00A2',\n\t pound: '\\u00A3',\n\t curren: '\\u00A4',\n\t yen: '\\u00A5',\n\t brvbar: '\\u00A6',\n\t sect: '\\u00A7',\n\t uml: '\\u00A8',\n\t copy: '\\u00A9',\n\t ordf: '\\u00AA',\n\t laquo: '\\u00AB',\n\t not: '\\u00AC',\n\t shy: '\\u00AD',\n\t reg: '\\u00AE',\n\t macr: '\\u00AF',\n\t deg: '\\u00B0',\n\t plusmn: '\\u00B1',\n\t sup2: '\\u00B2',\n\t sup3: '\\u00B3',\n\t acute: '\\u00B4',\n\t micro: '\\u00B5',\n\t para: '\\u00B6',\n\t middot: '\\u00B7',\n\t cedil: '\\u00B8',\n\t sup1: '\\u00B9',\n\t ordm: '\\u00BA',\n\t raquo: '\\u00BB',\n\t frac14: '\\u00BC',\n\t frac12: '\\u00BD',\n\t frac34: '\\u00BE',\n\t iquest: '\\u00BF',\n\t Agrave: '\\u00C0',\n\t Aacute: '\\u00C1',\n\t Acirc: '\\u00C2',\n\t Atilde: '\\u00C3',\n\t Auml: '\\u00C4',\n\t Aring: '\\u00C5',\n\t AElig: '\\u00C6',\n\t Ccedil: '\\u00C7',\n\t Egrave: '\\u00C8',\n\t Eacute: '\\u00C9',\n\t Ecirc: '\\u00CA',\n\t Euml: '\\u00CB',\n\t Igrave: '\\u00CC',\n\t Iacute: '\\u00CD',\n\t Icirc: '\\u00CE',\n\t Iuml: '\\u00CF',\n\t ETH: '\\u00D0',\n\t Ntilde: '\\u00D1',\n\t Ograve: '\\u00D2',\n\t Oacute: '\\u00D3',\n\t Ocirc: '\\u00D4',\n\t Otilde: '\\u00D5',\n\t Ouml: '\\u00D6',\n\t times: '\\u00D7',\n\t Oslash: '\\u00D8',\n\t Ugrave: '\\u00D9',\n\t Uacute: '\\u00DA',\n\t Ucirc: '\\u00DB',\n\t Uuml: '\\u00DC',\n\t Yacute: '\\u00DD',\n\t THORN: '\\u00DE',\n\t szlig: '\\u00DF',\n\t agrave: '\\u00E0',\n\t aacute: '\\u00E1',\n\t acirc: '\\u00E2',\n\t atilde: '\\u00E3',\n\t auml: '\\u00E4',\n\t aring: '\\u00E5',\n\t aelig: '\\u00E6',\n\t ccedil: '\\u00E7',\n\t egrave: '\\u00E8',\n\t eacute: '\\u00E9',\n\t ecirc: '\\u00EA',\n\t euml: '\\u00EB',\n\t igrave: '\\u00EC',\n\t iacute: '\\u00ED',\n\t icirc: '\\u00EE',\n\t iuml: '\\u00EF',\n\t eth: '\\u00F0',\n\t ntilde: '\\u00F1',\n\t ograve: '\\u00F2',\n\t oacute: '\\u00F3',\n\t ocirc: '\\u00F4',\n\t otilde: '\\u00F5',\n\t ouml: '\\u00F6',\n\t divide: '\\u00F7',\n\t oslash: '\\u00F8',\n\t ugrave: '\\u00F9',\n\t uacute: '\\u00FA',\n\t ucirc: '\\u00FB',\n\t uuml: '\\u00FC',\n\t yacute: '\\u00FD',\n\t thorn: '\\u00FE',\n\t yuml: '\\u00FF',\n\t OElig: '\\u0152',\n\t oelig: '\\u0153',\n\t Scaron: '\\u0160',\n\t scaron: '\\u0161',\n\t Yuml: '\\u0178',\n\t fnof: '\\u0192',\n\t circ: '\\u02C6',\n\t tilde: '\\u02DC',\n\t Alpha: '\\u0391',\n\t Beta: '\\u0392',\n\t Gamma: '\\u0393',\n\t Delta: '\\u0394',\n\t Epsilon: '\\u0395',\n\t Zeta: '\\u0396',\n\t Eta: '\\u0397',\n\t Theta: '\\u0398',\n\t Iota: '\\u0399',\n\t Kappa: '\\u039A',\n\t Lambda: '\\u039B',\n\t Mu: '\\u039C',\n\t Nu: '\\u039D',\n\t Xi: '\\u039E',\n\t Omicron: '\\u039F',\n\t Pi: '\\u03A0',\n\t Rho: '\\u03A1',\n\t Sigma: '\\u03A3',\n\t Tau: '\\u03A4',\n\t Upsilon: '\\u03A5',\n\t Phi: '\\u03A6',\n\t Chi: '\\u03A7',\n\t Psi: '\\u03A8',\n\t Omega: '\\u03A9',\n\t alpha: '\\u03B1',\n\t beta: '\\u03B2',\n\t gamma: '\\u03B3',\n\t delta: '\\u03B4',\n\t epsilon: '\\u03B5',\n\t zeta: '\\u03B6',\n\t eta: '\\u03B7',\n\t theta: '\\u03B8',\n\t iota: '\\u03B9',\n\t kappa: '\\u03BA',\n\t lambda: '\\u03BB',\n\t mu: '\\u03BC',\n\t nu: '\\u03BD',\n\t xi: '\\u03BE',\n\t omicron: '\\u03BF',\n\t pi: '\\u03C0',\n\t rho: '\\u03C1',\n\t sigmaf: '\\u03C2',\n\t sigma: '\\u03C3',\n\t tau: '\\u03C4',\n\t upsilon: '\\u03C5',\n\t phi: '\\u03C6',\n\t chi: '\\u03C7',\n\t psi: '\\u03C8',\n\t omega: '\\u03C9',\n\t thetasym: '\\u03D1',\n\t upsih: '\\u03D2',\n\t piv: '\\u03D6',\n\t ensp: '\\u2002',\n\t emsp: '\\u2003',\n\t thinsp: '\\u2009',\n\t zwnj: '\\u200C',\n\t zwj: '\\u200D',\n\t lrm: '\\u200E',\n\t rlm: '\\u200F',\n\t ndash: '\\u2013',\n\t mdash: '\\u2014',\n\t lsquo: '\\u2018',\n\t rsquo: '\\u2019',\n\t sbquo: '\\u201A',\n\t ldquo: '\\u201C',\n\t rdquo: '\\u201D',\n\t bdquo: '\\u201E',\n\t dagger: '\\u2020',\n\t Dagger: '\\u2021',\n\t bull: '\\u2022',\n\t hellip: '\\u2026',\n\t permil: '\\u2030',\n\t prime: '\\u2032',\n\t Prime: '\\u2033',\n\t lsaquo: '\\u2039',\n\t rsaquo: '\\u203A',\n\t oline: '\\u203E',\n\t frasl: '\\u2044',\n\t euro: '\\u20AC',\n\t image: '\\u2111',\n\t weierp: '\\u2118',\n\t real: '\\u211C',\n\t trade: '\\u2122',\n\t alefsym: '\\u2135',\n\t larr: '\\u2190',\n\t uarr: '\\u2191',\n\t rarr: '\\u2192',\n\t darr: '\\u2193',\n\t harr: '\\u2194',\n\t crarr: '\\u21B5',\n\t lArr: '\\u21D0',\n\t uArr: '\\u21D1',\n\t rArr: '\\u21D2',\n\t dArr: '\\u21D3',\n\t hArr: '\\u21D4',\n\t forall: '\\u2200',\n\t part: '\\u2202',\n\t exist: '\\u2203',\n\t empty: '\\u2205',\n\t nabla: '\\u2207',\n\t isin: '\\u2208',\n\t notin: '\\u2209',\n\t ni: '\\u220B',\n\t prod: '\\u220F',\n\t sum: '\\u2211',\n\t minus: '\\u2212',\n\t lowast: '\\u2217',\n\t radic: '\\u221A',\n\t prop: '\\u221D',\n\t infin: '\\u221E',\n\t ang: '\\u2220',\n\t and: '\\u2227',\n\t or: '\\u2228',\n\t cap: '\\u2229',\n\t cup: '\\u222A',\n\t int: '\\u222B',\n\t there4: '\\u2234',\n\t sim: '\\u223C',\n\t cong: '\\u2245',\n\t asymp: '\\u2248',\n\t ne: '\\u2260',\n\t equiv: '\\u2261',\n\t le: '\\u2264',\n\t ge: '\\u2265',\n\t sub: '\\u2282',\n\t sup: '\\u2283',\n\t nsub: '\\u2284',\n\t sube: '\\u2286',\n\t supe: '\\u2287',\n\t oplus: '\\u2295',\n\t otimes: '\\u2297',\n\t perp: '\\u22A5',\n\t sdot: '\\u22C5',\n\t lceil: '\\u2308',\n\t rceil: '\\u2309',\n\t lfloor: '\\u230A',\n\t rfloor: '\\u230B',\n\t loz: '\\u25CA',\n\t spades: '\\u2660',\n\t clubs: '\\u2663',\n\t hearts: '\\u2665',\n\t diams: '\\u2666',\n\t lang: '\\u27E8',\n\t rang: '\\u27E9'\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar error_handler_1 = __webpack_require__(10);\n\tvar scanner_1 = __webpack_require__(12);\n\tvar token_1 = __webpack_require__(13);\n\tvar Reader = (function () {\n\t function Reader() {\n\t this.values = [];\n\t this.curly = this.paren = -1;\n\t }\n\t // A function following one of those tokens is an expression.\n\t Reader.prototype.beforeFunctionExpression = function (t) {\n\t return ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n\t 'return', 'case', 'delete', 'throw', 'void',\n\t // assignment operators\n\t '=', '+=', '-=', '*=', '**=', '/=', '%=', '<<=', '>>=', '>>>=',\n\t '&=', '|=', '^=', ',',\n\t // binary/unary operators\n\t '+', '-', '*', '**', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n\t '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n\t '<=', '<', '>', '!=', '!=='].indexOf(t) >= 0;\n\t };\n\t // Determine if forward slash (/) is an operator or part of a regular expression\n\t // https://github.com/mozilla/sweet.js/wiki/design\n\t Reader.prototype.isRegexStart = function () {\n\t var previous = this.values[this.values.length - 1];\n\t var regex = (previous !== null);\n\t switch (previous) {\n\t case 'this':\n\t case ']':\n\t regex = false;\n\t break;\n\t case ')':\n\t var keyword = this.values[this.paren - 1];\n\t regex = (keyword === 'if' || keyword === 'while' || keyword === 'for' || keyword === 'with');\n\t break;\n\t case '}':\n\t // Dividing a function by anything makes little sense,\n\t // but we have to check for that.\n\t regex = false;\n\t if (this.values[this.curly - 3] === 'function') {\n\t // Anonymous function, e.g. function(){} /42\n\t var check = this.values[this.curly - 4];\n\t regex = check ? !this.beforeFunctionExpression(check) : false;\n\t }\n\t else if (this.values[this.curly - 4] === 'function') {\n\t // Named function, e.g. function f(){} /42/\n\t var check = this.values[this.curly - 5];\n\t regex = check ? !this.beforeFunctionExpression(check) : true;\n\t }\n\t break;\n\t default:\n\t break;\n\t }\n\t return regex;\n\t };\n\t Reader.prototype.push = function (token) {\n\t if (token.type === 7 /* Punctuator */ || token.type === 4 /* Keyword */) {\n\t if (token.value === '{') {\n\t this.curly = this.values.length;\n\t }\n\t else if (token.value === '(') {\n\t this.paren = this.values.length;\n\t }\n\t this.values.push(token.value);\n\t }\n\t else {\n\t this.values.push(null);\n\t }\n\t };\n\t return Reader;\n\t}());\n\tvar Tokenizer = (function () {\n\t function Tokenizer(code, config) {\n\t this.errorHandler = new error_handler_1.ErrorHandler();\n\t this.errorHandler.tolerant = config ? (typeof config.tolerant === 'boolean' && config.tolerant) : false;\n\t this.scanner = new scanner_1.Scanner(code, this.errorHandler);\n\t this.scanner.trackComment = config ? (typeof config.comment === 'boolean' && config.comment) : false;\n\t this.trackRange = config ? (typeof config.range === 'boolean' && config.range) : false;\n\t this.trackLoc = config ? (typeof config.loc === 'boolean' && config.loc) : false;\n\t this.buffer = [];\n\t this.reader = new Reader();\n\t }\n\t Tokenizer.prototype.errors = function () {\n\t return this.errorHandler.errors;\n\t };\n\t Tokenizer.prototype.getNextToken = function () {\n\t if (this.buffer.length === 0) {\n\t var comments = this.scanner.scanComments();\n\t if (this.scanner.trackComment) {\n\t for (var i = 0; i < comments.length; ++i) {\n\t var e = comments[i];\n\t var value = this.scanner.source.slice(e.slice[0], e.slice[1]);\n\t var comment = {\n\t type: e.multiLine ? 'BlockComment' : 'LineComment',\n\t value: value\n\t };\n\t if (this.trackRange) {\n\t comment.range = e.range;\n\t }\n\t if (this.trackLoc) {\n\t comment.loc = e.loc;\n\t }\n\t this.buffer.push(comment);\n\t }\n\t }\n\t if (!this.scanner.eof()) {\n\t var loc = void 0;\n\t if (this.trackLoc) {\n\t loc = {\n\t start: {\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t },\n\t end: {}\n\t };\n\t }\n\t var startRegex = (this.scanner.source[this.scanner.index] === '/') && this.reader.isRegexStart();\n\t var token = startRegex ? this.scanner.scanRegExp() : this.scanner.lex();\n\t this.reader.push(token);\n\t var entry = {\n\t type: token_1.TokenName[token.type],\n\t value: this.scanner.source.slice(token.start, token.end)\n\t };\n\t if (this.trackRange) {\n\t entry.range = [token.start, token.end];\n\t }\n\t if (this.trackLoc) {\n\t loc.end = {\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t };\n\t entry.loc = loc;\n\t }\n\t if (token.type === 9 /* RegularExpression */) {\n\t var pattern = token.pattern;\n\t var flags = token.flags;\n\t entry.regex = { pattern: pattern, flags: flags };\n\t }\n\t this.buffer.push(entry);\n\t }\n\t }\n\t return this.buffer.shift();\n\t };\n\t return Tokenizer;\n\t}());\n\texports.Tokenizer = Tokenizer;\n\n\n/***/ }\n/******/ ])\n});\n;","'use strict';\n\n/*eslint-disable no-use-before-define*/\n\nvar common = require('./common');\nvar YAMLException = require('./exception');\nvar DEFAULT_FULL_SCHEMA = require('./schema/default_full');\nvar DEFAULT_SAFE_SCHEMA = require('./schema/default_safe');\n\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar CHAR_TAB = 0x09; /* Tab */\nvar CHAR_LINE_FEED = 0x0A; /* LF */\nvar CHAR_SPACE = 0x20; /* Space */\nvar CHAR_EXCLAMATION = 0x21; /* ! */\nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */\nvar CHAR_SHARP = 0x23; /* # */\nvar CHAR_PERCENT = 0x25; /* % */\nvar CHAR_AMPERSAND = 0x26; /* & */\nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */\nvar CHAR_ASTERISK = 0x2A; /* * */\nvar CHAR_COMMA = 0x2C; /* , */\nvar CHAR_MINUS = 0x2D; /* - */\nvar CHAR_COLON = 0x3A; /* : */\nvar CHAR_GREATER_THAN = 0x3E; /* > */\nvar CHAR_QUESTION = 0x3F; /* ? */\nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */\nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */\nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */\nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */\nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */\nvar CHAR_VERTICAL_LINE = 0x7C; /* | */\nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */\n\nvar ESCAPE_SEQUENCES = {};\n\nESCAPE_SEQUENCES[0x00] = '\\\\0';\nESCAPE_SEQUENCES[0x07] = '\\\\a';\nESCAPE_SEQUENCES[0x08] = '\\\\b';\nESCAPE_SEQUENCES[0x09] = '\\\\t';\nESCAPE_SEQUENCES[0x0A] = '\\\\n';\nESCAPE_SEQUENCES[0x0B] = '\\\\v';\nESCAPE_SEQUENCES[0x0C] = '\\\\f';\nESCAPE_SEQUENCES[0x0D] = '\\\\r';\nESCAPE_SEQUENCES[0x1B] = '\\\\e';\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = '\\\\\\\\';\nESCAPE_SEQUENCES[0x85] = '\\\\N';\nESCAPE_SEQUENCES[0xA0] = '\\\\_';\nESCAPE_SEQUENCES[0x2028] = '\\\\L';\nESCAPE_SEQUENCES[0x2029] = '\\\\P';\n\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',\n 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'\n];\n\nfunction compileStyleMap(schema, map) {\n var result, keys, index, length, tag, style, type;\n\n if (map === null) return {};\n\n result = {};\n keys = Object.keys(map);\n\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map[tag]);\n\n if (tag.slice(0, 2) === '!!') {\n tag = 'tag:yaml.org,2002:' + tag.slice(2);\n }\n type = schema.compiledTypeMap['fallback'][tag];\n\n if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n style = type.styleAliases[style];\n }\n\n result[tag] = style;\n }\n\n return result;\n}\n\nfunction encodeHex(character) {\n var string, handle, length;\n\n string = character.toString(16).toUpperCase();\n\n if (character <= 0xFF) {\n handle = 'x';\n length = 2;\n } else if (character <= 0xFFFF) {\n handle = 'u';\n length = 4;\n } else if (character <= 0xFFFFFFFF) {\n handle = 'U';\n length = 8;\n } else {\n throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF');\n }\n\n return '\\\\' + handle + common.repeat('0', length - string.length) + string;\n}\n\nfunction State(options) {\n this.schema = options['schema'] || DEFAULT_FULL_SCHEMA;\n this.indent = Math.max(1, (options['indent'] || 2));\n this.noArrayIndent = options['noArrayIndent'] || false;\n this.skipInvalid = options['skipInvalid'] || false;\n this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);\n this.styleMap = compileStyleMap(this.schema, options['styles'] || null);\n this.sortKeys = options['sortKeys'] || false;\n this.lineWidth = options['lineWidth'] || 80;\n this.noRefs = options['noRefs'] || false;\n this.noCompatMode = options['noCompatMode'] || false;\n this.condenseFlow = options['condenseFlow'] || false;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n\n this.tag = null;\n this.result = '';\n\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n var ind = common.repeat(' ', spaces),\n position = 0,\n next = -1,\n result = '',\n line,\n length = string.length;\n\n while (position < length) {\n next = string.indexOf('\\n', position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n\n if (line.length && line !== '\\n') result += ind;\n\n result += line;\n }\n\n return result;\n}\n\nfunction generateNextLine(state, level) {\n return '\\n' + common.repeat(' ', state.indent * level);\n}\n\nfunction testImplicitResolving(state, str) {\n var index, length, type;\n\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type = state.implicitTypes[index];\n\n if (type.resolve(str)) {\n return true;\n }\n }\n\n return false;\n}\n\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn’t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n return (0x00020 <= c && c <= 0x00007E)\n || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)\n || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */)\n || (0x10000 <= c && c <= 0x10FFFF);\n}\n\n// Simplified test for values allowed after the first character in plain style.\nfunction isPlainSafe(c) {\n // Uses a subset of nb-char - c-flow-indicator - \":\" - \"#\"\n // where nb-char ::= c-printable - b-char - c-byte-order-mark.\n return isPrintable(c) && c !== 0xFEFF\n // - c-flow-indicator\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // - \":\" - \"#\"\n && c !== CHAR_COLON\n && c !== CHAR_SHARP;\n}\n\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n // Uses a subset of ns-char - c-indicator\n // where ns-char = nb-char - s-white.\n return isPrintable(c) && c !== 0xFEFF\n && !isWhitespace(c) // - s-white\n // - (c-indicator ::=\n // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”\n && c !== CHAR_MINUS\n && c !== CHAR_QUESTION\n && c !== CHAR_COLON\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // | “#” | “&” | “*” | “!” | “|” | “>” | “'” | “\"”\n && c !== CHAR_SHARP\n && c !== CHAR_AMPERSAND\n && c !== CHAR_ASTERISK\n && c !== CHAR_EXCLAMATION\n && c !== CHAR_VERTICAL_LINE\n && c !== CHAR_GREATER_THAN\n && c !== CHAR_SINGLE_QUOTE\n && c !== CHAR_DOUBLE_QUOTE\n // | “%” | “@” | “`”)\n && c !== CHAR_PERCENT\n && c !== CHAR_COMMERCIAL_AT\n && c !== CHAR_GRAVE_ACCENT;\n}\n\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n\nvar STYLE_PLAIN = 1,\n STYLE_SINGLE = 2,\n STYLE_LITERAL = 3,\n STYLE_FOLDED = 4,\n STYLE_DOUBLE = 5;\n\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n// STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) {\n var i;\n var char;\n var hasLineBreak = false;\n var hasFoldableLine = false; // only checked if shouldTrackWidth\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1; // count the first line correctly\n var plain = isPlainSafeFirst(string.charCodeAt(0))\n && !isWhitespace(string.charCodeAt(string.length - 1));\n\n if (singleLineOnly) {\n // Case: no block styles.\n // Check for disallowed characters to rule out plain and single.\n for (i = 0; i < string.length; i++) {\n char = string.charCodeAt(i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char);\n }\n } else {\n // Case: block styles permitted.\n for (i = 0; i < string.length; i++) {\n char = string.charCodeAt(i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n // Check if any line can be folded.\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine ||\n // Foldable line = too long, and not more-indented.\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' ');\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char);\n }\n // in case the end is missing a \\n\n hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' '));\n }\n // Although every style can represent \\n without escaping, prefer block styles\n // for multiline, since they're more readable and they don't add empty lines.\n // Also prefer folding a super-long line.\n if (!hasLineBreak && !hasFoldableLine) {\n // Strings interpretable as another type have to be quoted;\n // e.g. the string 'true' vs. the boolean true.\n return plain && !testAmbiguousType(string)\n ? STYLE_PLAIN : STYLE_SINGLE;\n }\n // Edge case: block indentation indicator can only have one digit.\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n // At this point we know block styles are valid.\n // Prefer literal style unless we want to fold.\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n}\n\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n// since the dumper adds its own newline. This always works:\n// • No ending newline => unaffected; already using strip \"-\" chomping.\n// • Ending newline => removed then restored.\n// Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey) {\n state.dump = (function () {\n if (string.length === 0) {\n return \"''\";\n }\n if (!state.noCompatMode &&\n DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) {\n return \"'\" + string + \"'\";\n }\n\n var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n // As indentation gets deeper, let the width decrease monotonically\n // to the lower bound min(state.lineWidth, 40).\n // Note that this implies\n // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.\n // state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n // This behaves better than a constant minimum width which disallows narrower options,\n // or an indent threshold which causes the width to suddenly increase.\n var lineWidth = state.lineWidth === -1\n ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n\n // Without knowing if keys are implicit/explicit, assume implicit for safety.\n var singleLineOnly = iskey\n // No block styles in flow mode.\n || (state.flowLevel > -1 && level >= state.flowLevel);\n function testAmbiguity(string) {\n return testImplicitResolving(state, string);\n }\n\n switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) {\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return '|' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return '>' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string, lineWidth) + '\"';\n default:\n throw new YAMLException('impossible error: invalid scalar style');\n }\n }());\n}\n\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';\n\n // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n var clip = string[string.length - 1] === '\\n';\n var keep = clip && (string[string.length - 2] === '\\n' || string === '\\n');\n var chomp = keep ? '+' : (clip ? '' : '-');\n\n return indentIndicator + chomp + '\\n';\n}\n\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string;\n}\n\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n // In folded style, $k$ consecutive newlines output as $k+1$ newlines—\n // unless they're before or after a more-indented line, or at the very\n // beginning or end, in which case $k$ maps to $k$.\n // Therefore, parse each chunk as newline(s) followed by a content line.\n var lineRe = /(\\n+)([^\\n]*)/g;\n\n // first line (possibly an empty line)\n var result = (function () {\n var nextLF = string.indexOf('\\n');\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n }());\n // If we haven't reached the first content line yet, don't add an extra \\n.\n var prevMoreIndented = string[0] === '\\n' || string[0] === ' ';\n var moreIndented;\n\n // rest of the lines\n var match;\n while ((match = lineRe.exec(string))) {\n var prefix = match[1], line = match[2];\n moreIndented = (line[0] === ' ');\n result += prefix\n + (!prevMoreIndented && !moreIndented && line !== ''\n ? '\\n' : '')\n + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n\n return result;\n}\n\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n if (line === '' || line[0] === ' ') return line;\n\n // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n var match;\n // start is an inclusive index. end, curr, and next are exclusive.\n var start = 0, end, curr = 0, next = 0;\n var result = '';\n\n // Invariants: 0 <= start <= length-1.\n // 0 <= curr <= next <= max(0, length-2). curr - start <= width.\n // Inside the loop:\n // A match implies length >= 2, so curr and next are <= length-2.\n while ((match = breakRe.exec(line))) {\n next = match.index;\n // maintain invariant: curr - start <= width\n if (next - start > width) {\n end = (curr > start) ? curr : next; // derive end <= length-2\n result += '\\n' + line.slice(start, end);\n // skip the space that was output as \\n\n start = end + 1; // derive start <= length-1\n }\n curr = next;\n }\n\n // By the invariants, start <= length-1, so there is something left over.\n // It is either the whole string or a part starting from non-whitespace.\n result += '\\n';\n // Insert a break if the remainder is too long and there is a break available.\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + '\\n' + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n\n return result.slice(1); // drop extra \\n joiner\n}\n\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n var result = '';\n var char, nextChar;\n var escapeSeq;\n\n for (var i = 0; i < string.length; i++) {\n char = string.charCodeAt(i);\n // Check for surrogate pairs (reference Unicode 3.0 section \"3.7 Surrogates\").\n if (char >= 0xD800 && char <= 0xDBFF/* high surrogate */) {\n nextChar = string.charCodeAt(i + 1);\n if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) {\n // Combine the surrogate pair and store it escaped.\n result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000);\n // Advance index one extra since we already used that char here.\n i++; continue;\n }\n }\n escapeSeq = ESCAPE_SEQUENCES[char];\n result += !escapeSeq && isPrintable(char)\n ? string[i]\n : escapeSeq || encodeHex(char);\n }\n\n return result;\n}\n\nfunction writeFlowSequence(state, level, object) {\n var _result = '',\n _tag = state.tag,\n index,\n length;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n // Write only valid elements.\n if (writeNode(state, level, object[index], false, false)) {\n if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : '');\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = '[' + _result + ']';\n}\n\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n index,\n length;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n // Write only valid elements.\n if (writeNode(state, level + 1, object[index], true, true)) {\n if (!compact || index !== 0) {\n _result += generateNextLine(state, level);\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += '-';\n } else {\n _result += '- ';\n }\n\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = _result || '[]'; // Empty sequence if no valid values.\n}\n\nfunction writeFlowMapping(state, level, object) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n pairBuffer;\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = state.condenseFlow ? '\"' : '';\n\n if (index !== 0) pairBuffer += ', ';\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (!writeNode(state, level, objectKey, false, false)) {\n continue; // Skip this pair because of invalid key;\n }\n\n if (state.dump.length > 1024) pairBuffer += '? ';\n\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : '') + ':' + (state.condenseFlow ? '' : ' ');\n\n if (!writeNode(state, level, objectValue, false, false)) {\n continue; // Skip this pair because of invalid value.\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = '{' + _result + '}';\n}\n\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n explicitPair,\n pairBuffer;\n\n // Allow sorting keys so that the output file is deterministic\n if (state.sortKeys === true) {\n // Default sorting\n objectKeyList.sort();\n } else if (typeof state.sortKeys === 'function') {\n // Custom sort function\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n // Something is wrong\n throw new YAMLException('sortKeys must be a boolean or a function');\n }\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = '';\n\n if (!compact || index !== 0) {\n pairBuffer += generateNextLine(state, level);\n }\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue; // Skip this pair because of invalid key.\n }\n\n explicitPair = (state.tag !== null && state.tag !== '?') ||\n (state.dump && state.dump.length > 1024);\n\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += '?';\n } else {\n pairBuffer += '? ';\n }\n }\n\n pairBuffer += state.dump;\n\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue; // Skip this pair because of invalid value.\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += ':';\n } else {\n pairBuffer += ': ';\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = _result || '{}'; // Empty mapping if no valid pairs.\n}\n\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type, style;\n\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type = typeList[index];\n\n if ((type.instanceOf || type.predicate) &&\n (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&\n (!type.predicate || type.predicate(object))) {\n\n state.tag = explicit ? type.tag : '?';\n\n if (type.represent) {\n style = state.styleMap[type.tag] || type.defaultStyle;\n\n if (_toString.call(type.represent) === '[object Function]') {\n _result = type.represent(object, style);\n } else if (_hasOwnProperty.call(type.represent, style)) {\n _result = type.represent[style](object, style);\n } else {\n throw new YAMLException('!<' + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n\n state.dump = _result;\n }\n\n return true;\n }\n }\n\n return false;\n}\n\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey) {\n state.tag = null;\n state.dump = object;\n\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n\n var type = _toString.call(state.dump);\n\n if (block) {\n block = (state.flowLevel < 0 || state.flowLevel > level);\n }\n\n var objectOrArray = type === '[object Object]' || type === '[object Array]',\n duplicateIndex,\n duplicate;\n\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n\n if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {\n compact = false;\n }\n\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = '*ref_' + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type === '[object Object]') {\n if (block && (Object.keys(state.dump).length !== 0)) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object Array]') {\n var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level;\n if (block && (state.dump.length !== 0)) {\n writeBlockSequence(state, arrayLevel, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, arrayLevel, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object String]') {\n if (state.tag !== '?') {\n writeScalar(state, state.dump, level, iskey);\n }\n } else {\n if (state.skipInvalid) return false;\n throw new YAMLException('unacceptable kind of an object to dump ' + type);\n }\n\n if (state.tag !== null && state.tag !== '?') {\n state.dump = '!<' + state.tag + '> ' + state.dump;\n }\n }\n\n return true;\n}\n\nfunction getDuplicateReferences(object, state) {\n var objects = [],\n duplicatesIndexes = [],\n index,\n length;\n\n inspectNode(object, objects, duplicatesIndexes);\n\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList,\n index,\n length;\n\n if (object !== null && typeof object === 'object') {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n\nfunction dump(input, options) {\n options = options || {};\n\n var state = new State(options);\n\n if (!state.noRefs) getDuplicateReferences(input, state);\n\n if (writeNode(state, 0, input, true, true)) return state.dump + '\\n';\n\n return '';\n}\n\nfunction safeDump(input, options) {\n return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n}\n\nmodule.exports.dump = dump;\nmodule.exports.safeDump = safeDump;\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\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar _invariant = require('fbjs/lib/invariant');\n\nif (process.env.NODE_ENV !== 'production') {\n var warning = require('fbjs/lib/warning');\n}\n\nvar MIXINS_KEY = 'mixins';\n\n// Helper function to allow the creation of anonymous functions which do not\n// have .name set to the name of the variable being assigned to.\nfunction identity(fn) {\n return fn;\n}\n\nvar ReactPropTypeLocationNames;\nif (process.env.NODE_ENV !== 'production') {\n ReactPropTypeLocationNames = {\n prop: 'prop',\n context: 'context',\n childContext: 'child context'\n };\n} else {\n ReactPropTypeLocationNames = {};\n}\n\nfunction factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) {\n /**\n * Policies that describe methods in `ReactClassInterface`.\n */\n\n var injectedMixins = [];\n\n /**\n * Composite components are higher-level components that compose other composite\n * or host components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return <div>Hello World</div>;\n * }\n * });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\n var ReactClassInterface = {\n /**\n * An array of Mixin objects to include when defining your component.\n *\n * @type {array}\n * @optional\n */\n mixins: 'DEFINE_MANY',\n\n /**\n * An object containing properties and methods that should be defined on\n * the component's constructor instead of its prototype (static methods).\n *\n * @type {object}\n * @optional\n */\n statics: 'DEFINE_MANY',\n\n /**\n * Definition of prop types for this component.\n *\n * @type {object}\n * @optional\n */\n propTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types for this component.\n *\n * @type {object}\n * @optional\n */\n contextTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types this component sets for its children.\n *\n * @type {object}\n * @optional\n */\n childContextTypes: 'DEFINE_MANY',\n\n // ==== Definition methods ====\n\n /**\n * Invoked when the component is mounted. Values in the mapping will be set on\n * `this.props` if that prop is not specified (i.e. using an `in` check).\n *\n * This method is invoked before `getInitialState` and therefore cannot rely\n * on `this.state` or use `this.setState`.\n *\n * @return {object}\n * @optional\n */\n getDefaultProps: 'DEFINE_MANY_MERGED',\n\n /**\n * Invoked once before the component is mounted. The return value will be used\n * as the initial value of `this.state`.\n *\n * getInitialState: function() {\n * return {\n * isOn: false,\n * fooBaz: new BazFoo()\n * }\n * }\n *\n * @return {object}\n * @optional\n */\n getInitialState: 'DEFINE_MANY_MERGED',\n\n /**\n * @return {object}\n * @optional\n */\n getChildContext: 'DEFINE_MANY_MERGED',\n\n /**\n * Uses props from `this.props` and state from `this.state` to render the\n * structure of the component.\n *\n * No guarantees are made about when or how often this method is invoked, so\n * it must not have side effects.\n *\n * render: function() {\n * var name = this.props.name;\n * return <div>Hello, {name}!</div>;\n * }\n *\n * @return {ReactComponent}\n * @required\n */\n render: 'DEFINE_ONCE',\n\n // ==== Delegate methods ====\n\n /**\n * Invoked when the component is initially created and about to be mounted.\n * This may have side effects, but any external subscriptions or data created\n * by this method must be cleaned up in `componentWillUnmount`.\n *\n * @optional\n */\n componentWillMount: 'DEFINE_MANY',\n\n /**\n * Invoked when the component has been mounted and has a DOM representation.\n * However, there is no guarantee that the DOM node is in the document.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been mounted (initialized and rendered) for the first time.\n *\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidMount: 'DEFINE_MANY',\n\n /**\n * Invoked before the component receives new props.\n *\n * Use this as an opportunity to react to a prop transition by updating the\n * state using `this.setState`. Current props are accessed via `this.props`.\n *\n * componentWillReceiveProps: function(nextProps, nextContext) {\n * this.setState({\n * likesIncreasing: nextProps.likeCount > this.props.likeCount\n * });\n * }\n *\n * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n * transition may cause a state change, but the opposite is not true. If you\n * need it, you are probably looking for `componentWillUpdate`.\n *\n * @param {object} nextProps\n * @optional\n */\n componentWillReceiveProps: 'DEFINE_MANY',\n\n /**\n * Invoked while deciding if the component should be updated as a result of\n * receiving new props, state and/or context.\n *\n * Use this as an opportunity to `return false` when you're certain that the\n * transition to the new props/state/context will not require a component\n * update.\n *\n * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n * return !equal(nextProps, this.props) ||\n * !equal(nextState, this.state) ||\n * !equal(nextContext, this.context);\n * }\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @return {boolean} True if the component should update.\n * @optional\n */\n shouldComponentUpdate: 'DEFINE_ONCE',\n\n /**\n * Invoked when the component is about to update due to a transition from\n * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n * and `nextContext`.\n *\n * Use this as an opportunity to perform preparation before an update occurs.\n *\n * NOTE: You **cannot** use `this.setState()` in this method.\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @param {ReactReconcileTransaction} transaction\n * @optional\n */\n componentWillUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component's DOM representation has been updated.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been updated.\n *\n * @param {object} prevProps\n * @param {?object} prevState\n * @param {?object} prevContext\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component is about to be removed from its parent and have\n * its DOM representation destroyed.\n *\n * Use this as an opportunity to deallocate any external resources.\n *\n * NOTE: There is no `componentDidUnmount` since your component will have been\n * destroyed by that point.\n *\n * @optional\n */\n componentWillUnmount: 'DEFINE_MANY',\n\n /**\n * Replacement for (deprecated) `componentWillMount`.\n *\n * @optional\n */\n UNSAFE_componentWillMount: 'DEFINE_MANY',\n\n /**\n * Replacement for (deprecated) `componentWillReceiveProps`.\n *\n * @optional\n */\n UNSAFE_componentWillReceiveProps: 'DEFINE_MANY',\n\n /**\n * Replacement for (deprecated) `componentWillUpdate`.\n *\n * @optional\n */\n UNSAFE_componentWillUpdate: 'DEFINE_MANY',\n\n // ==== Advanced methods ====\n\n /**\n * Updates the component's currently mounted DOM representation.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n * @overridable\n */\n updateComponent: 'OVERRIDE_BASE'\n };\n\n /**\n * Similar to ReactClassInterface but for static methods.\n */\n var ReactClassStaticInterface = {\n /**\n * This method is invoked after a component is instantiated and when it\n * receives new props. Return an object to update state in response to\n * prop changes. Return null to indicate no change to state.\n *\n * If an object is returned, its keys will be merged into the existing state.\n *\n * @return {object || null}\n * @optional\n */\n getDerivedStateFromProps: 'DEFINE_MANY_MERGED'\n };\n\n /**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\n var RESERVED_SPEC_KEYS = {\n displayName: function(Constructor, displayName) {\n Constructor.displayName = displayName;\n },\n mixins: function(Constructor, mixins) {\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n mixSpecIntoComponent(Constructor, mixins[i]);\n }\n }\n },\n childContextTypes: function(Constructor, childContextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, childContextTypes, 'childContext');\n }\n Constructor.childContextTypes = _assign(\n {},\n Constructor.childContextTypes,\n childContextTypes\n );\n },\n contextTypes: function(Constructor, contextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, contextTypes, 'context');\n }\n Constructor.contextTypes = _assign(\n {},\n Constructor.contextTypes,\n contextTypes\n );\n },\n /**\n * Special case getDefaultProps which should move into statics but requires\n * automatic merging.\n */\n getDefaultProps: function(Constructor, getDefaultProps) {\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps = createMergedResultFunction(\n Constructor.getDefaultProps,\n getDefaultProps\n );\n } else {\n Constructor.getDefaultProps = getDefaultProps;\n }\n },\n propTypes: function(Constructor, propTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, propTypes, 'prop');\n }\n Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n },\n statics: function(Constructor, statics) {\n mixStaticSpecIntoComponent(Constructor, statics);\n },\n autobind: function() {}\n };\n\n function validateTypeDef(Constructor, typeDef, location) {\n for (var propName in typeDef) {\n if (typeDef.hasOwnProperty(propName)) {\n // use a warning instead of an _invariant so components\n // don't show up in prod but only in __DEV__\n if (process.env.NODE_ENV !== 'production') {\n warning(\n typeof typeDef[propName] === 'function',\n '%s: %s type `%s` is invalid; it must be a function, usually from ' +\n 'React.PropTypes.',\n Constructor.displayName || 'ReactClass',\n ReactPropTypeLocationNames[location],\n propName\n );\n }\n }\n }\n }\n\n function validateMethodOverride(isAlreadyDefined, name) {\n var specPolicy = ReactClassInterface.hasOwnProperty(name)\n ? ReactClassInterface[name]\n : null;\n\n // Disallow overriding of base class methods unless explicitly allowed.\n if (ReactClassMixin.hasOwnProperty(name)) {\n _invariant(\n specPolicy === 'OVERRIDE_BASE',\n 'ReactClassInterface: You are attempting to override ' +\n '`%s` from your class specification. Ensure that your method names ' +\n 'do not overlap with React methods.',\n name\n );\n }\n\n // Disallow defining methods more than once unless explicitly allowed.\n if (isAlreadyDefined) {\n _invariant(\n specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED',\n 'ReactClassInterface: You are attempting to define ' +\n '`%s` on your component more than once. This conflict may be due ' +\n 'to a mixin.',\n name\n );\n }\n }\n\n /**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classes.\n */\n function mixSpecIntoComponent(Constructor, spec) {\n if (!spec) {\n if (process.env.NODE_ENV !== 'production') {\n var typeofSpec = typeof spec;\n var isMixinValid = typeofSpec === 'object' && spec !== null;\n\n if (process.env.NODE_ENV !== 'production') {\n warning(\n isMixinValid,\n \"%s: You're attempting to include a mixin that is either null \" +\n 'or not an object. Check the mixins included by the component, ' +\n 'as well as any mixins they include themselves. ' +\n 'Expected object but got %s.',\n Constructor.displayName || 'ReactClass',\n spec === null ? null : typeofSpec\n );\n }\n }\n\n return;\n }\n\n _invariant(\n typeof spec !== 'function',\n \"ReactClass: You're attempting to \" +\n 'use a component class or function as a mixin. Instead, just use a ' +\n 'regular object.'\n );\n _invariant(\n !isValidElement(spec),\n \"ReactClass: You're attempting to \" +\n 'use a component as a mixin. Instead, just use a regular object.'\n );\n\n var proto = Constructor.prototype;\n var autoBindPairs = proto.__reactAutoBindPairs;\n\n // By handling mixins before any other properties, we ensure the same\n // chaining order is applied to methods with DEFINE_MANY policy, whether\n // mixins are listed before or after these methods in the spec.\n if (spec.hasOwnProperty(MIXINS_KEY)) {\n RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n }\n\n for (var name in spec) {\n if (!spec.hasOwnProperty(name)) {\n continue;\n }\n\n if (name === MIXINS_KEY) {\n // We have already handled mixins in a special case above.\n continue;\n }\n\n var property = spec[name];\n var isAlreadyDefined = proto.hasOwnProperty(name);\n validateMethodOverride(isAlreadyDefined, name);\n\n if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n RESERVED_SPEC_KEYS[name](Constructor, property);\n } else {\n // Setup methods on prototype:\n // The following member methods should not be automatically bound:\n // 1. Expected ReactClass methods (in the \"interface\").\n // 2. Overridden methods (that were mixed in).\n var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n var isFunction = typeof property === 'function';\n var shouldAutoBind =\n isFunction &&\n !isReactClassMethod &&\n !isAlreadyDefined &&\n spec.autobind !== false;\n\n if (shouldAutoBind) {\n autoBindPairs.push(name, property);\n proto[name] = property;\n } else {\n if (isAlreadyDefined) {\n var specPolicy = ReactClassInterface[name];\n\n // These cases should already be caught by validateMethodOverride.\n _invariant(\n isReactClassMethod &&\n (specPolicy === 'DEFINE_MANY_MERGED' ||\n specPolicy === 'DEFINE_MANY'),\n 'ReactClass: Unexpected spec policy %s for key %s ' +\n 'when mixing in component specs.',\n specPolicy,\n name\n );\n\n // For methods which are defined more than once, call the existing\n // methods before calling the new property, merging if appropriate.\n if (specPolicy === 'DEFINE_MANY_MERGED') {\n proto[name] = createMergedResultFunction(proto[name], property);\n } else if (specPolicy === 'DEFINE_MANY') {\n proto[name] = createChainedFunction(proto[name], property);\n }\n } else {\n proto[name] = property;\n if (process.env.NODE_ENV !== 'production') {\n // Add verbose displayName to the function, which helps when looking\n // at profiling tools.\n if (typeof property === 'function' && spec.displayName) {\n proto[name].displayName = spec.displayName + '_' + name;\n }\n }\n }\n }\n }\n }\n }\n\n function mixStaticSpecIntoComponent(Constructor, statics) {\n if (!statics) {\n return;\n }\n\n for (var name in statics) {\n var property = statics[name];\n if (!statics.hasOwnProperty(name)) {\n continue;\n }\n\n var isReserved = name in RESERVED_SPEC_KEYS;\n _invariant(\n !isReserved,\n 'ReactClass: You are attempting to define a reserved ' +\n 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' +\n 'as an instance property instead; it will still be accessible on the ' +\n 'constructor.',\n name\n );\n\n var isAlreadyDefined = name in Constructor;\n if (isAlreadyDefined) {\n var specPolicy = ReactClassStaticInterface.hasOwnProperty(name)\n ? ReactClassStaticInterface[name]\n : null;\n\n _invariant(\n specPolicy === 'DEFINE_MANY_MERGED',\n 'ReactClass: You are attempting to define ' +\n '`%s` on your component more than once. This conflict may be ' +\n 'due to a mixin.',\n name\n );\n\n Constructor[name] = createMergedResultFunction(Constructor[name], property);\n\n return;\n }\n\n Constructor[name] = property;\n }\n }\n\n /**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\n function mergeIntoWithNoDuplicateKeys(one, two) {\n _invariant(\n one && two && typeof one === 'object' && typeof two === 'object',\n 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'\n );\n\n for (var key in two) {\n if (two.hasOwnProperty(key)) {\n _invariant(\n one[key] === undefined,\n 'mergeIntoWithNoDuplicateKeys(): ' +\n 'Tried to merge two objects with the same key: `%s`. This conflict ' +\n 'may be due to a mixin; in particular, this may be caused by two ' +\n 'getInitialState() or getDefaultProps() methods returning objects ' +\n 'with clashing keys.',\n key\n );\n one[key] = two[key];\n }\n }\n return one;\n }\n\n /**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\n function createMergedResultFunction(one, two) {\n return function mergedResult() {\n var a = one.apply(this, arguments);\n var b = two.apply(this, arguments);\n if (a == null) {\n return b;\n } else if (b == null) {\n return a;\n }\n var c = {};\n mergeIntoWithNoDuplicateKeys(c, a);\n mergeIntoWithNoDuplicateKeys(c, b);\n return c;\n };\n }\n\n /**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\n function createChainedFunction(one, two) {\n return function chainedFunction() {\n one.apply(this, arguments);\n two.apply(this, arguments);\n };\n }\n\n /**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\n function bindAutoBindMethod(component, method) {\n var boundMethod = method.bind(component);\n if (process.env.NODE_ENV !== 'production') {\n boundMethod.__reactBoundContext = component;\n boundMethod.__reactBoundMethod = method;\n boundMethod.__reactBoundArguments = null;\n var componentName = component.constructor.displayName;\n var _bind = boundMethod.bind;\n boundMethod.bind = function(newThis) {\n for (\n var _len = arguments.length,\n args = Array(_len > 1 ? _len - 1 : 0),\n _key = 1;\n _key < _len;\n _key++\n ) {\n args[_key - 1] = arguments[_key];\n }\n\n // User is trying to bind() an autobound method; we effectively will\n // ignore the value of \"this\" that the user is trying to use, so\n // let's warn.\n if (newThis !== component && newThis !== null) {\n if (process.env.NODE_ENV !== 'production') {\n warning(\n false,\n 'bind(): React component methods may only be bound to the ' +\n 'component instance. See %s',\n componentName\n );\n }\n } else if (!args.length) {\n if (process.env.NODE_ENV !== 'production') {\n warning(\n false,\n 'bind(): You are binding a component method to the component. ' +\n 'React does this for you automatically in a high-performance ' +\n 'way, so you can safely remove this call. See %s',\n componentName\n );\n }\n return boundMethod;\n }\n var reboundMethod = _bind.apply(boundMethod, arguments);\n reboundMethod.__reactBoundContext = component;\n reboundMethod.__reactBoundMethod = method;\n reboundMethod.__reactBoundArguments = args;\n return reboundMethod;\n };\n }\n return boundMethod;\n }\n\n /**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\n function bindAutoBindMethods(component) {\n var pairs = component.__reactAutoBindPairs;\n for (var i = 0; i < pairs.length; i += 2) {\n var autoBindKey = pairs[i];\n var method = pairs[i + 1];\n component[autoBindKey] = bindAutoBindMethod(component, method);\n }\n }\n\n var IsMountedPreMixin = {\n componentDidMount: function() {\n this.__isMounted = true;\n }\n };\n\n var IsMountedPostMixin = {\n componentWillUnmount: function() {\n this.__isMounted = false;\n }\n };\n\n /**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\n var ReactClassMixin = {\n /**\n * TODO: This will be deprecated because state should always keep a consistent\n * type signature and the only use case for this, is to avoid that.\n */\n replaceState: function(newState, callback) {\n this.updater.enqueueReplaceState(this, newState, callback);\n },\n\n /**\n * Checks whether or not this composite component is mounted.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function() {\n if (process.env.NODE_ENV !== 'production') {\n warning(\n this.__didWarnIsMounted,\n '%s: isMounted is deprecated. Instead, make sure to clean up ' +\n 'subscriptions and pending requests in componentWillUnmount to ' +\n 'prevent memory leaks.',\n (this.constructor && this.constructor.displayName) ||\n this.name ||\n 'Component'\n );\n this.__didWarnIsMounted = true;\n }\n return !!this.__isMounted;\n }\n };\n\n var ReactClassComponent = function() {};\n _assign(\n ReactClassComponent.prototype,\n ReactComponent.prototype,\n ReactClassMixin\n );\n\n /**\n * Creates a composite component class given a class specification.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n *\n * @param {object} spec Class specification (which must define `render`).\n * @return {function} Component constructor function.\n * @public\n */\n function createClass(spec) {\n // To keep our warnings more understandable, we'll use a little hack here to\n // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\n // unnecessarily identify a class without displayName as 'Constructor'.\n var Constructor = identity(function(props, context, updater) {\n // This constructor gets overridden by mocks. The argument is used\n // by mocks to assert on what gets mounted.\n\n if (process.env.NODE_ENV !== 'production') {\n warning(\n this instanceof Constructor,\n 'Something is calling a React component directly. Use a factory or ' +\n 'JSX instead. See: https://fb.me/react-legacyfactory'\n );\n }\n\n // Wire up auto-binding\n if (this.__reactAutoBindPairs.length) {\n bindAutoBindMethods(this);\n }\n\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n\n this.state = null;\n\n // ReactClasses doesn't have constructors. Instead, they use the\n // getInitialState and componentWillMount methods for initialization.\n\n var initialState = this.getInitialState ? this.getInitialState() : null;\n if (process.env.NODE_ENV !== 'production') {\n // We allow auto-mocks to proceed as if they're returning null.\n if (\n initialState === undefined &&\n this.getInitialState._isMockFunction\n ) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n initialState = null;\n }\n }\n _invariant(\n typeof initialState === 'object' && !Array.isArray(initialState),\n '%s.getInitialState(): must return an object or null',\n Constructor.displayName || 'ReactCompositeComponent'\n );\n\n this.state = initialState;\n });\n Constructor.prototype = new ReactClassComponent();\n Constructor.prototype.constructor = Constructor;\n Constructor.prototype.__reactAutoBindPairs = [];\n\n injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n mixSpecIntoComponent(Constructor, IsMountedPreMixin);\n mixSpecIntoComponent(Constructor, spec);\n mixSpecIntoComponent(Constructor, IsMountedPostMixin);\n\n // Initialize the defaultProps property after all mixins have been merged.\n if (Constructor.getDefaultProps) {\n Constructor.defaultProps = Constructor.getDefaultProps();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This is a tag to indicate that the use of these method names is ok,\n // since it's used with createClass. If it's not, then it's likely a\n // mistake so we'll warn you to use the static property, property\n // initializer or constructor respectively.\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps.isReactClassApproved = {};\n }\n if (Constructor.prototype.getInitialState) {\n Constructor.prototype.getInitialState.isReactClassApproved = {};\n }\n }\n\n _invariant(\n Constructor.prototype.render,\n 'createClass(...): Class specification must implement a `render` method.'\n );\n\n if (process.env.NODE_ENV !== 'production') {\n warning(\n !Constructor.prototype.componentShouldUpdate,\n '%s has a method called ' +\n 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +\n 'The name is phrased as a question because the function is ' +\n 'expected to return a value.',\n spec.displayName || 'A component'\n );\n warning(\n !Constructor.prototype.componentWillRecieveProps,\n '%s has a method called ' +\n 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',\n spec.displayName || 'A component'\n );\n warning(\n !Constructor.prototype.UNSAFE_componentWillRecieveProps,\n '%s has a method called UNSAFE_componentWillRecieveProps(). ' +\n 'Did you mean UNSAFE_componentWillReceiveProps()?',\n spec.displayName || 'A component'\n );\n }\n\n // Reduce time spent doing lookups by setting these on the prototype.\n for (var methodName in ReactClassInterface) {\n if (!Constructor.prototype[methodName]) {\n Constructor.prototype[methodName] = null;\n }\n }\n\n return Constructor;\n }\n\n return createClass;\n}\n\nmodule.exports = factory;\n","var React = require('react');\nvar createReactClass = require('create-react-class');\nvar PropTypes = require('prop-types');\nvar NotificationItem = require('./NotificationItem');\nvar Constants = require('./constants');\n\nvar NotificationContainer = createReactClass({\n\n propTypes: {\n position: PropTypes.string.isRequired,\n notifications: PropTypes.array.isRequired,\n getStyles: PropTypes.object\n },\n\n _style: {},\n\n componentWillMount: function() {\n // Fix position if width is overrided\n this._style = this.props.getStyles.container(this.props.position);\n\n if (this.props.getStyles.overrideWidth && (this.props.position === Constants.positions.tc || this.props.position === Constants.positions.bc)) {\n this._style.marginLeft = -(this.props.getStyles.overrideWidth / 2);\n }\n },\n\n render: function() {\n var self = this;\n var notifications;\n\n if ([Constants.positions.bl, Constants.positions.br, Constants.positions.bc].indexOf(this.props.position) > -1) {\n this.props.notifications.reverse();\n }\n\n notifications = this.props.notifications.map(function(notification) {\n return (\n React.createElement(NotificationItem, {\n ref: 'notification-' + notification.uid, \n key: notification.uid, \n notification: notification, \n getStyles: self.props.getStyles, \n onRemove: self.props.onRemove, \n noAnimation: self.props.noAnimation, \n allowHTML: self.props.allowHTML, \n children: self.props.children}\n )\n );\n });\n\n return (\n React.createElement(\"div\", {className: 'notifications-' + this.props.position, style: this._style}, \n notifications \n )\n );\n }\n});\n\n\nmodule.exports = NotificationContainer;\n","var React = require('react');\nvar createReactClass = require('create-react-class');\nvar PropTypes = require('prop-types');\nvar ReactDOM = require('react-dom');\nvar Constants = require('./constants');\nvar Helpers = require('./helpers');\nvar merge = require('object-assign');\n\n/* From Modernizr */\nvar whichTransitionEvent = function() {\n var el = document.createElement('fakeelement');\n var transition;\n var transitions = {\n transition: 'transitionend',\n OTransition: 'oTransitionEnd',\n MozTransition: 'transitionend',\n WebkitTransition: 'webkitTransitionEnd'\n };\n\n Object.keys(transitions).forEach(function(transitionKey) {\n if (el.style[transitionKey] !== undefined) {\n transition = transitions[transitionKey];\n }\n });\n\n return transition;\n};\n\nvar NotificationItem = createReactClass({\n propTypes: {\n notification: PropTypes.object,\n getStyles: PropTypes.object,\n onRemove: PropTypes.func,\n allowHTML: PropTypes.bool,\n noAnimation: PropTypes.bool,\n children: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element\n ])\n },\n\n getDefaultProps: function() {\n return {\n noAnimation: false,\n onRemove: function() {},\n allowHTML: false\n };\n },\n\n getInitialState: function() {\n return {\n visible: undefined,\n removed: false\n };\n },\n\n componentWillMount: function() {\n var getStyles = this.props.getStyles;\n var level = this.props.notification.level;\n var dismissible = this.props.notification.dismissible;\n\n this._noAnimation = this.props.noAnimation;\n\n this._styles = {\n notification: getStyles.byElement('notification')(level),\n title: getStyles.byElement('title')(level),\n dismiss: getStyles.byElement('dismiss')(level),\n messageWrapper: getStyles.byElement('messageWrapper')(level),\n actionWrapper: getStyles.byElement('actionWrapper')(level),\n action: getStyles.byElement('action')(level)\n };\n\n if (!dismissible || dismissible === 'none' || dismissible === 'button') {\n this._styles.notification.cursor = 'default';\n }\n },\n\n _styles: {},\n\n _notificationTimer: null,\n\n _height: 0,\n\n _noAnimation: null,\n\n _isMounted: false,\n\n _removeCount: 0,\n\n _getCssPropertyByPosition: function() {\n var position = this.props.notification.position;\n var css = {};\n\n switch (position) {\n case Constants.positions.tl:\n case Constants.positions.bl:\n css = {\n property: 'left',\n value: -200\n };\n break;\n\n case Constants.positions.tr:\n case Constants.positions.br:\n css = {\n property: 'right',\n value: -200\n };\n break;\n\n case Constants.positions.tc:\n css = {\n property: 'top',\n value: -100\n };\n break;\n\n case Constants.positions.bc:\n css = {\n property: 'bottom',\n value: -100\n };\n break;\n\n default:\n }\n\n return css;\n },\n\n _defaultAction: function(event) {\n var notification = this.props.notification;\n\n event.preventDefault();\n this._hideNotification();\n if (typeof notification.action.callback === 'function') {\n notification.action.callback();\n }\n },\n\n _hideNotification: function() {\n if (this._notificationTimer) {\n this._notificationTimer.clear();\n }\n\n if (this._isMounted) {\n this.setState({\n visible: false,\n removed: true\n });\n }\n\n if (this._noAnimation) {\n this._removeNotification();\n }\n },\n\n _removeNotification: function() {\n this.props.onRemove(this.props.notification.uid);\n },\n\n _dismiss: function() {\n if (!this.props.notification.dismissible) {\n return;\n }\n\n this._hideNotification();\n },\n\n _showNotification: function() {\n var self = this;\n setTimeout(function() {\n if (self._isMounted) {\n self.setState({\n visible: true\n });\n }\n }, 50);\n },\n\n _onTransitionEnd: function() {\n if (this._removeCount > 0) return;\n if (this.state.removed) {\n this._removeCount += 1;\n this._removeNotification();\n }\n },\n\n componentDidMount: function() {\n var self = this;\n var transitionEvent = whichTransitionEvent();\n var notification = this.props.notification;\n var element = ReactDOM.findDOMNode(this);\n\n this._height = element.offsetHeight;\n\n this._isMounted = true;\n\n // Watch for transition end\n if (!this._noAnimation) {\n if (transitionEvent) {\n element.addEventListener(transitionEvent, this._onTransitionEnd);\n } else {\n this._noAnimation = true;\n }\n }\n\n\n if (notification.autoDismiss) {\n this._notificationTimer = new Helpers.Timer(function() {\n self._hideNotification();\n }, notification.autoDismiss * 1000);\n }\n\n this._showNotification();\n },\n\n _handleMouseEnter: function() {\n var notification = this.props.notification;\n if (notification.autoDismiss) {\n this._notificationTimer.pause();\n }\n },\n\n _handleMouseLeave: function() {\n var notification = this.props.notification;\n if (notification.autoDismiss) {\n this._notificationTimer.resume();\n }\n },\n\n _handleNotificationClick: function() {\n var dismissible = this.props.notification.dismissible;\n if (dismissible === 'both' || dismissible === 'click' || dismissible === true) {\n this._dismiss();\n }\n },\n\n componentWillUnmount: function() {\n var element = ReactDOM.findDOMNode(this);\n var transitionEvent = whichTransitionEvent();\n element.removeEventListener(transitionEvent, this._onTransitionEnd);\n this._isMounted = false;\n },\n\n _allowHTML: function(string) {\n return { __html: string };\n },\n\n render: function() {\n var notification = this.props.notification;\n var className = 'notification notification-' + notification.level;\n var notificationStyle = merge({}, this._styles.notification);\n var cssByPos = this._getCssPropertyByPosition();\n var dismiss = null;\n var actionButton = null;\n var title = null;\n var message = null;\n\n if (this.state.visible) {\n className += ' notification-visible';\n } else if (this.state.visible === false) {\n className += ' notification-hidden';\n }\n\n if (notification.dismissible === 'none') {\n className += ' notification-not-dismissible';\n }\n\n if (this.props.getStyles.overrideStyle) {\n if (!this.state.visible && !this.state.removed) {\n notificationStyle[cssByPos.property] = cssByPos.value;\n }\n\n if (this.state.visible && !this.state.removed) {\n notificationStyle.height = this._height;\n notificationStyle[cssByPos.property] = 0;\n }\n\n if (this.state.removed) {\n notificationStyle.overlay = 'hidden';\n notificationStyle.height = 0;\n notificationStyle.marginTop = 0;\n notificationStyle.paddingTop = 0;\n notificationStyle.paddingBottom = 0;\n }\n notificationStyle.opacity = this.state.visible ? this._styles.notification.isVisible.opacity : this._styles.notification.isHidden.opacity;\n }\n\n if (notification.title) {\n title = React.createElement(\"h4\", {className: \"notification-title\", style: this._styles.title}, notification.title);\n }\n\n if (notification.message) {\n if (this.props.allowHTML) {\n message = (\n React.createElement(\"div\", {className: \"notification-message\", style: this._styles.messageWrapper, dangerouslySetInnerHTML: this._allowHTML(notification.message) })\n );\n } else {\n message = (\n React.createElement(\"div\", {className: \"notification-message\", style: this._styles.messageWrapper}, notification.message)\n );\n }\n }\n if (notification.dismissible === 'both' || notification.dismissible === 'button' || notification.dismissible === true) {\n dismiss = React.createElement(\"span\", {className: \"notification-dismiss\", onClick: this._dismiss, style: this._styles.dismiss}, \"×\");\n }\n\n if (notification.action) {\n actionButton = (\n React.createElement(\"div\", {className: \"notification-action-wrapper\", style: this._styles.actionWrapper}, \n React.createElement(\"button\", {className: \"notification-action-button\", \n onClick: this._defaultAction, \n style: this._styles.action}, \n notification.action.label\n )\n )\n );\n }\n\n if (notification.children) {\n actionButton = notification.children;\n }\n\n return (\n React.createElement(\"div\", {className: className, onClick: this._handleNotificationClick, onMouseEnter: this._handleMouseEnter, onMouseLeave: this._handleMouseLeave, style: notificationStyle }, \n title, \n message, \n dismiss, \n actionButton \n )\n );\n }\n\n});\n\nmodule.exports = NotificationItem;\n","var Helpers = {\n Timer: function(callback, delay) {\n var timerId;\n var start;\n var remaining = delay;\n\n this.pause = function() {\n clearTimeout(timerId);\n remaining -= new Date() - start;\n };\n\n this.resume = function() {\n start = new Date();\n clearTimeout(timerId);\n timerId = setTimeout(callback, remaining);\n };\n\n this.clear = function() {\n clearTimeout(timerId);\n };\n\n this.resume();\n }\n};\n\nmodule.exports = Helpers;\n","// Used for calculations\nvar defaultWidth = 320;\nvar defaultColors = {\n success: {\n rgb: '94, 164, 0',\n hex: '#5ea400'\n },\n error: {\n rgb: '236, 61, 61',\n hex: '#ec3d3d'\n },\n warning: {\n rgb: '235, 173, 23',\n hex: '#ebad1a'\n },\n info: {\n rgb: '54, 156, 199',\n hex: '#369cc7'\n }\n};\nvar defaultShadowOpacity = '0.9';\n\nvar STYLES = {\n\n Wrapper: {},\n Containers: {\n DefaultStyle: {\n fontFamily: 'inherit',\n position: 'fixed',\n width: defaultWidth,\n padding: '0 10px 10px 10px',\n zIndex: 9998,\n WebkitBoxSizing: 'border-box',\n MozBoxSizing: 'border-box',\n boxSizing: 'border-box',\n height: 'auto'\n },\n\n tl: {\n top: '0px',\n bottom: 'auto',\n left: '0px',\n right: 'auto'\n },\n\n tr: {\n top: '0px',\n bottom: 'auto',\n left: 'auto',\n right: '0px'\n },\n\n tc: {\n top: '0px',\n bottom: 'auto',\n margin: '0 auto',\n left: '50%',\n marginLeft: -(defaultWidth / 2)\n },\n\n bl: {\n top: 'auto',\n bottom: '0px',\n left: '0px',\n right: 'auto'\n },\n\n br: {\n top: 'auto',\n bottom: '0px',\n left: 'auto',\n right: '0px'\n },\n\n bc: {\n top: 'auto',\n bottom: '0px',\n margin: '0 auto',\n left: '50%',\n marginLeft: -(defaultWidth / 2)\n }\n\n },\n\n NotificationItem: {\n DefaultStyle: {\n position: 'relative',\n width: '100%',\n cursor: 'pointer',\n borderRadius: '2px',\n fontSize: '13px',\n margin: '10px 0 0',\n padding: '10px',\n display: 'block',\n WebkitBoxSizing: 'border-box',\n MozBoxSizing: 'border-box',\n boxSizing: 'border-box',\n opacity: 0,\n transition: '0.3s ease-in-out',\n WebkitTransform: 'translate3d(0, 0, 0)',\n transform: 'translate3d(0, 0, 0)',\n willChange: 'transform, opacity',\n\n isHidden: {\n opacity: 0\n },\n\n isVisible: {\n opacity: 1\n }\n },\n\n success: {\n borderTop: '2px solid ' + defaultColors.success.hex,\n backgroundColor: '#f0f5ea',\n color: '#4b583a',\n WebkitBoxShadow: '0 0 1px rgba(' + defaultColors.success.rgb + ',' + defaultShadowOpacity + ')',\n MozBoxShadow: '0 0 1px rgba(' + defaultColors.success.rgb + ',' + defaultShadowOpacity + ')',\n boxShadow: '0 0 1px rgba(' + defaultColors.success.rgb + ',' + defaultShadowOpacity + ')'\n },\n\n error: {\n borderTop: '2px solid ' + defaultColors.error.hex,\n backgroundColor: '#f4e9e9',\n color: '#412f2f',\n WebkitBoxShadow: '0 0 1px rgba(' + defaultColors.error.rgb + ',' + defaultShadowOpacity + ')',\n MozBoxShadow: '0 0 1px rgba(' + defaultColors.error.rgb + ',' + defaultShadowOpacity + ')',\n boxShadow: '0 0 1px rgba(' + defaultColors.error.rgb + ',' + defaultShadowOpacity + ')'\n },\n\n warning: {\n borderTop: '2px solid ' + defaultColors.warning.hex,\n backgroundColor: '#f9f6f0',\n color: '#5a5343',\n WebkitBoxShadow: '0 0 1px rgba(' + defaultColors.warning.rgb + ',' + defaultShadowOpacity + ')',\n MozBoxShadow: '0 0 1px rgba(' + defaultColors.warning.rgb + ',' + defaultShadowOpacity + ')',\n boxShadow: '0 0 1px rgba(' + defaultColors.warning.rgb + ',' + defaultShadowOpacity + ')'\n },\n\n info: {\n borderTop: '2px solid ' + defaultColors.info.hex,\n backgroundColor: '#e8f0f4',\n color: '#41555d',\n WebkitBoxShadow: '0 0 1px rgba(' + defaultColors.info.rgb + ',' + defaultShadowOpacity + ')',\n MozBoxShadow: '0 0 1px rgba(' + defaultColors.info.rgb + ',' + defaultShadowOpacity + ')',\n boxShadow: '0 0 1px rgba(' + defaultColors.info.rgb + ',' + defaultShadowOpacity + ')'\n }\n },\n\n Title: {\n DefaultStyle: {\n fontSize: '14px',\n margin: '0 0 5px 0',\n padding: 0,\n fontWeight: 'bold'\n },\n\n success: {\n color: defaultColors.success.hex\n },\n\n error: {\n color: defaultColors.error.hex\n },\n\n warning: {\n color: defaultColors.warning.hex\n },\n\n info: {\n color: defaultColors.info.hex\n }\n\n },\n\n MessageWrapper: {\n DefaultStyle: {\n margin: 0,\n padding: 0\n }\n },\n\n Dismiss: {\n DefaultStyle: {\n cursor: 'pointer',\n fontFamily: 'Arial',\n fontSize: '17px',\n position: 'absolute',\n top: '4px',\n right: '5px',\n lineHeight: '15px',\n backgroundColor: '#dededf',\n color: '#ffffff',\n borderRadius: '50%',\n width: '14px',\n height: '14px',\n fontWeight: 'bold',\n textAlign: 'center'\n },\n\n success: {\n color: '#f0f5ea',\n backgroundColor: '#b0ca92'\n },\n\n error: {\n color: '#f4e9e9',\n backgroundColor: '#e4bebe'\n },\n\n warning: {\n color: '#f9f6f0',\n backgroundColor: '#e1cfac'\n },\n\n info: {\n color: '#e8f0f4',\n backgroundColor: '#a4becb'\n }\n },\n\n Action: {\n DefaultStyle: {\n background: '#ffffff',\n borderRadius: '2px',\n padding: '6px 20px',\n fontWeight: 'bold',\n margin: '10px 0 0 0',\n border: 0\n },\n\n success: {\n backgroundColor: defaultColors.success.hex,\n color: '#ffffff'\n },\n\n error: {\n backgroundColor: defaultColors.error.hex,\n color: '#ffffff'\n },\n\n warning: {\n backgroundColor: defaultColors.warning.hex,\n color: '#ffffff'\n },\n\n info: {\n backgroundColor: defaultColors.info.hex,\n color: '#ffffff'\n }\n },\n\n ActionWrapper: {\n DefaultStyle: {\n margin: 0,\n padding: 0\n }\n }\n};\n\nmodule.exports = STYLES;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar 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 identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\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 */\nfunction 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\nmodule.exports = baseClone;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\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 */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\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 */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\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 * 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 */\nfunction 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\nmodule.exports = baseKeysIn;\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 */\nfunction 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\nmodule.exports = nativeKeysIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\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 */\nfunction 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\nmodule.exports = cloneBuffer;\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 */\nfunction 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\nmodule.exports = copyArray;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\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 */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\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 */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\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 */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\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 * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction 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\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar 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/**\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 */\nfunction 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\nmodule.exports = initCloneByTag;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\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 */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\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 */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\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 */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\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 */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\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 */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\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 */\nvar 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\nmodule.exports = baseCreate;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\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 */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\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 */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\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 */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\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 */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = deprecated;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar warned = {};\n\nfunction deprecated(validator, reason) {\n return function validate(props, propName, componentName, location, propFullName) {\n var componentNameSafe = componentName || '<<anonymous>>';\n var propFullNameSafe = propFullName || propName;\n\n if (props[propName] != null) {\n var messageKey = componentName + '.' + propName;\n\n (0, _warning2.default)(warned[messageKey], 'The ' + location + ' `' + propFullNameSafe + '` of ' + ('`' + componentNameSafe + '` is deprecated. ' + reason + '.'));\n\n warned[messageKey] = true;\n }\n\n for (var _len = arguments.length, args = Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) {\n args[_key - 5] = arguments[_key];\n }\n\n return validator.apply(undefined, [props, propName, componentName, location, propFullName].concat(args));\n };\n}\n\n/* eslint-disable no-underscore-dangle */\nfunction _resetWarned() {\n warned = {};\n}\n\ndeprecated._resetWarned = _resetWarned;\n/* eslint-enable no-underscore-dangle */\n\nmodule.exports = exports['default'];","/**\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\nexports.__esModule = true;\nexports.uncontrolledPropTypes = uncontrolledPropTypes;\nexports.isProp = isProp;\nexports.defaultKey = defaultKey;\nexports.isReactComponent = isReactComponent;\n\nvar _invariant = _interopRequireDefault(require(\"invariant\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar noop = function noop() {};\n\nfunction readOnlyPropType(handler, name) {\n return function (props, propName) {\n if (props[propName] !== undefined) {\n if (!props[handler]) {\n return new Error(\"You have provided a `\" + propName + \"` prop to `\" + name + \"` \" + (\"without an `\" + handler + \"` handler prop. This will render a read-only field. \") + (\"If the field should be mutable use `\" + defaultKey(propName) + \"`. \") + (\"Otherwise, set `\" + handler + \"`.\"));\n }\n }\n };\n}\n\nfunction uncontrolledPropTypes(controlledValues, displayName) {\n var propTypes = {};\n Object.keys(controlledValues).forEach(function (prop) {\n // add default propTypes for folks that use runtime checks\n propTypes[defaultKey(prop)] = noop;\n\n if (process.env.NODE_ENV !== 'production') {\n var handler = controlledValues[prop];\n !(typeof handler === 'string' && handler.trim().length) ? process.env.NODE_ENV !== \"production\" ? (0, _invariant.default)(false, 'Uncontrollable - [%s]: the prop `%s` needs a valid handler key name in order to make it uncontrollable', displayName, prop) : invariant(false) : void 0;\n propTypes[prop] = readOnlyPropType(handler, displayName);\n }\n });\n return propTypes;\n}\n\nfunction isProp(props, prop) {\n return props[prop] !== undefined;\n}\n\nfunction defaultKey(key) {\n return 'default' + key.charAt(0).toUpperCase() + key.substr(1);\n}\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n\nfunction isReactComponent(component) {\n return !!(component && component.prototype && component.prototype.isReactComponent);\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _events = _interopRequireDefault(require(\"dom-helpers/events\"));\n\nvar _style = _interopRequireDefault(require(\"dom-helpers/style\"));\n\nvar _height = _interopRequireDefault(require(\"dom-helpers/query/height\"));\n\nvar _properties = require(\"dom-helpers/transition/properties\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Transition = _interopRequireWildcard(require(\"react-transition-group/Transition\"));\n\nvar _transitionClasses;\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar transitionClasses = (_transitionClasses = {}, _transitionClasses[_Transition.ENTERING] = 'rw-popup-transition-entering', _transitionClasses[_Transition.EXITING] = 'rw-popup-transition-exiting', _transitionClasses[_Transition.EXITED] = 'rw-popup-transition-exited', _transitionClasses);\nvar propTypes = {\n in: _propTypes.default.bool.isRequired,\n dropUp: _propTypes.default.bool,\n onEntering: _propTypes.default.func,\n onEntered: _propTypes.default.func\n};\n\nfunction parseDuration(node) {\n var str = (0, _style.default)(node, _properties.transitionDuration);\n var mult = str.indexOf('ms') === -1 ? 1000 : 1;\n return parseFloat(str) * mult;\n}\n\nvar SlideDownTransition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(SlideDownTransition, _React$Component);\n\n function SlideDownTransition() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.setContainerHeight = function (elem) {\n elem.style.height = _this.getHeight() + 'px';\n };\n\n _this.clearContainerHeight = function (elem) {\n elem.style.height = '';\n };\n\n _this.handleEntered = function (elem) {\n _this.clearContainerHeight(elem);\n\n if (_this.props.onEntered) _this.props.onEntered();\n };\n\n _this.handleEntering = function () {\n if (_this.props.onEntering) _this.props.onEntering();\n };\n\n _this.handleTransitionEnd = function (node, done) {\n var duration = parseDuration(node.lastChild) || 0;\n\n var handler = function handler() {\n _events.default.off(node, _properties.transitionEnd, handler, false);\n\n done();\n };\n\n setTimeout(handler, duration * 1.5);\n\n _events.default.on(node, _properties.transitionEnd, handler, false);\n };\n\n _this.attachRef = function (ref) {\n return _this.element = ref;\n };\n\n return _this;\n }\n\n var _proto = SlideDownTransition.prototype;\n\n _proto.getHeight = function getHeight() {\n var container = this.element;\n var content = container.firstChild;\n var margin = parseInt((0, _style.default)(content, 'margin-top'), 10) + parseInt((0, _style.default)(content, 'margin-bottom'), 10);\n var old = container.style.display;\n var height;\n container.style.display = 'block';\n height = ((0, _height.default)(content) || 0) + (isNaN(margin) ? 0 : margin);\n container.style.display = old;\n return height;\n };\n\n _proto.render = function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n children = _this$props.children,\n className = _this$props.className,\n dropUp = _this$props.dropUp;\n return _react.default.createElement(_Transition.default, {\n appear: true,\n in: this.props.in,\n timeout: 5000,\n onEnter: this.setContainerHeight,\n onEntering: this.handleEntering,\n onEntered: this.handleEntered,\n onExit: this.setContainerHeight,\n onExited: this.clearContainerHeight,\n addEndListener: this.handleTransitionEnd\n }, function (status, innerProps) {\n return _react.default.createElement(\"div\", _extends({}, innerProps, {\n ref: _this2.attachRef,\n className: (0, _classnames.default)(className, dropUp && 'rw-dropup', transitionClasses[status])\n }), _react.default.createElement(\"div\", {\n className: \"rw-popup-transition\"\n }, children));\n });\n };\n\n return SlideDownTransition;\n}(_react.default.Component);\n\nSlideDownTransition.propTypes = propTypes;\nvar _default = SlideDownTransition;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = filterEvents;\n\nvar _contains = _interopRequireDefault(require(\"../query/contains\"));\n\nvar _querySelectorAll = _interopRequireDefault(require(\"../query/querySelectorAll\"));\n\nfunction filterEvents(selector, handler) {\n return function filterHandler(e) {\n var top = e.currentTarget,\n target = e.target,\n matches = (0, _querySelectorAll.default)(top, selector);\n if (matches.some(function (match) {\n return (0, _contains.default)(match, target);\n })) handler.call(this, e);\n };\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inDOM = _interopRequireDefault(require(\"../util/inDOM\"));\n\nvar _on = _interopRequireDefault(require(\"./on\"));\n\nvar _off = _interopRequireDefault(require(\"./off\"));\n\nvar listen = function listen() {};\n\nif (_inDOM.default) {\n listen = function listen(node, eventName, handler, capture) {\n (0, _on.default)(node, eventName, handler, capture);\n return function () {\n (0, _off.default)(node, eventName, handler, capture);\n };\n };\n}\n\nvar _default = listen;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = camelize;\nvar rHyphen = /-(.)/g;\n\nfunction camelize(string) {\n return string.replace(rHyphen, function (_, chr) {\n return chr.toUpperCase();\n });\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = hyphenateStyleName;\n\nvar _hyphenate = _interopRequireDefault(require(\"./hyphenate\"));\n\n/**\n * Copyright 2013-2014, Facebook, Inc.\n * All rights reserved.\n * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/hyphenateStyleName.js\n */\nvar msPattern = /^ms-/;\n\nfunction hyphenateStyleName(string) {\n return (0, _hyphenate.default)(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = hyphenate;\nvar rUpper = /([A-Z])/g;\n\nfunction hyphenate(string) {\n return string.replace(rUpper, '-$1').toLowerCase();\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = _getComputedStyle;\n\nvar _camelizeStyle = _interopRequireDefault(require(\"../util/camelizeStyle\"));\n\nvar rposition = /^(top|right|bottom|left)$/;\nvar rnumnonpx = /^([+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|))(?!px)[a-z%]+$/i;\n\nfunction _getComputedStyle(node) {\n if (!node) throw new TypeError('No Element passed to `getComputedStyle()`');\n var doc = node.ownerDocument;\n return 'defaultView' in doc ? doc.defaultView.opener ? node.ownerDocument.defaultView.getComputedStyle(node, null) : window.getComputedStyle(node, null) : {\n //ie 8 \"magic\" from: https://github.com/jquery/jquery/blob/1.11-stable/src/css/curCSS.js#L72\n getPropertyValue: function getPropertyValue(prop) {\n var style = node.style;\n prop = (0, _camelizeStyle.default)(prop);\n if (prop == 'float') prop = 'styleFloat';\n var current = node.currentStyle[prop] || null;\n if (current == null && style && style[prop]) current = style[prop];\n\n if (rnumnonpx.test(current) && !rposition.test(prop)) {\n // Remember the original values\n var left = style.left;\n var runStyle = node.runtimeStyle;\n var rsLeft = runStyle && runStyle.left; // Put in the new values to get a computed value out\n\n if (rsLeft) runStyle.left = node.currentStyle.left;\n style.left = prop === 'fontSize' ? '1em' : current;\n current = style.pixelLeft + 'px'; // Revert the changed values\n\n style.left = left;\n if (rsLeft) runStyle.left = rsLeft;\n }\n\n return current;\n }\n };\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = removeStyle;\n\nfunction removeStyle(node, key) {\n return 'removeProperty' in node.style ? node.style.removeProperty(key) : node.style.removeAttribute(key);\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = isTransform;\nvar supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;\n\nfunction isTransform(property) {\n return !!(property && supportedTransforms.test(property));\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.classNamesShape = exports.timeoutsShape = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar timeoutsShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number,\n appear: _propTypes.default.number\n}).isRequired]) : null;\nexports.timeoutsShape = timeoutsShape;\nvar classNamesShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({\n enter: _propTypes.default.string,\n exit: _propTypes.default.string,\n active: _propTypes.default.string\n}), _propTypes.default.shape({\n enter: _propTypes.default.string,\n enterDone: _propTypes.default.string,\n enterActive: _propTypes.default.string,\n exit: _propTypes.default.string,\n exitDone: _propTypes.default.string,\n exitActive: _propTypes.default.string\n})]) : null;\nexports.classNamesShape = classNamesShape;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactIs = require('react-is');\n\nvar _createChainableTypeChecker = require('./utils/createChainableTypeChecker');\n\nvar _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction elementType(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n\n if (_react2.default.isValidElement(propValue)) {\n return new Error('Invalid ' + location + ' `' + propFullName + '` of type ReactElement ' + ('supplied to `' + componentName + '`,expected an element type (a string ') + ', component class, or function component).');\n }\n\n if (!(0, _reactIs.isValidElementType)(propValue)) {\n return new Error('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected an element type (a string ') + ', component class, or function component).');\n }\n\n return null;\n}\n\nexports.default = (0, _createChainableTypeChecker2.default)(elementType);\nmodule.exports = exports['default'];","'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","/** @license React v16.13.0\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","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = require(\"react-dom\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _uncontrollable = _interopRequireDefault(require(\"uncontrollable\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _reactComponentManagers = require(\"react-component-managers\");\n\nvar _Widget = _interopRequireDefault(require(\"./Widget\"));\n\nvar _Header = _interopRequireDefault(require(\"./Header\"));\n\nvar _Footer = _interopRequireDefault(require(\"./Footer\"));\n\nvar _Month = _interopRequireDefault(require(\"./Month\"));\n\nvar _Year = _interopRequireDefault(require(\"./Year\"));\n\nvar _Decade = _interopRequireDefault(require(\"./Decade\"));\n\nvar _Century = _interopRequireDefault(require(\"./Century\"));\n\nvar _messages = require(\"./messages\");\n\nvar _SlideTransitionGroup = _interopRequireDefault(require(\"./SlideTransitionGroup\"));\n\nvar _focusManager = _interopRequireDefault(require(\"./util/focusManager\"));\n\nvar _localizers = require(\"./util/localizers\");\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\n\nvar Props = _interopRequireWildcard(require(\"./util/Props\"));\n\nvar _dates = _interopRequireDefault(require(\"./util/dates\"));\n\nvar _widgetHelpers = require(\"./util/widgetHelpers\");\n\nvar _interaction = require(\"./util/interaction\");\n\nvar _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _class3, _temp;\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\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 _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object['ke' + 'ys'](descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object['define' + 'Property'](target, property, desc); desc = null; } return desc; }\n\nfunction _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and set to use loose mode. ' + 'To use proposal-class-properties in spec mode with decorators, wait for ' + 'the next major version of decorators in stage 2.'); }\n\nvar last = function last(a) {\n return a[a.length - 1];\n};\n\nvar VIEW_UNIT = {\n month: 'day',\n year: 'month',\n decade: 'year',\n century: 'decade'\n};\nvar VIEW_OPTIONS = ['month', 'year', 'decade', 'century'];\nvar VIEW = {\n month: _Month.default,\n year: _Year.default,\n decade: _Decade.default,\n century: _Century.default\n};\nvar ARROWS_TO_DIRECTION = {\n ArrowDown: 'DOWN',\n ArrowUp: 'UP',\n ArrowRight: 'RIGHT',\n ArrowLeft: 'LEFT'\n};\nvar OPPOSITE_DIRECTION = {\n LEFT: 'RIGHT',\n RIGHT: 'LEFT'\n};\nvar MULTIPLIER = {\n year: 1,\n decade: 10,\n century: 100\n};\n\nfunction inRangeValue(_value, min, max) {\n var value = dateOrNull(_value);\n if (value === null) return value;\n return _dates.default.max(_dates.default.min(value, max), min);\n}\n\nvar propTypes = {\n /** @ignore */\n activeId: _propTypes.default.string,\n\n /**\n * @example ['disabled', ['new Date()']]\n */\n disabled: CustomPropTypes.disabled,\n\n /**\n * @example ['readOnly', ['new Date()']]\n */\n readOnly: CustomPropTypes.disabled,\n\n /**\n * @example ['onChangePicker', [ ['new Date()'] ]]\n */\n onChange: _propTypes.default.func,\n\n /**\n * @example ['valuePicker', [ ['new Date()'] ]]\n */\n value: _propTypes.default.instanceOf(Date),\n\n /**\n * The minimum date that the Calendar can navigate from.\n *\n * @example ['prop', ['min', 'new Date()']]\n */\n min: _propTypes.default.instanceOf(Date).isRequired,\n\n /**\n * The maximum date that the Calendar can navigate to.\n *\n * @example ['prop', ['max', 'new Date()']]\n */\n max: _propTypes.default.instanceOf(Date).isRequired,\n\n /**\n * Default current date at which the calendar opens. If none is provided, opens at today's date or the `value` date (if any).\n */\n currentDate: _propTypes.default.instanceOf(Date),\n\n /**\n * Change event Handler that is called when the currentDate is changed. The handler is called with the currentDate object.\n */\n onCurrentDateChange: _propTypes.default.func,\n\n /** Specify the navigate into the past header icon */\n navigatePrevIcon: _propTypes.default.node,\n\n /** Specify the navigate into the future header icon */\n navigateNextIcon: _propTypes.default.node,\n\n /**\n * Controls the currently displayed calendar view. Use `defaultView` to set a unique starting view.\n *\n * @type {(\"month\"|\"year\"|\"decade\"|\"century\")}\n * @controllable onViewChange\n */\n view: function view(props) {\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 _propTypes.default.oneOf(props.views || VIEW_OPTIONS).apply(void 0, [props].concat(args));\n },\n\n /**\n * Defines a list of views the Calendar can traverse through, starting with the\n * first in the list to the last.\n *\n * @type array<\"month\"|\"year\"|\"decade\"|\"century\">\n */\n views: _propTypes.default.arrayOf(_propTypes.default.oneOf(VIEW_OPTIONS)).isRequired,\n\n /**\n * A callback fired when the `view` changes.\n *\n * @controllable view\n */\n onViewChange: _propTypes.default.func,\n\n /**\n * Callback fired when the Calendar navigates between views, or forward and backwards in time.\n *\n * @type function(date: ?Date, direction: string, view: string)\n */\n onNavigate: _propTypes.default.func,\n culture: _propTypes.default.string,\n autoFocus: _propTypes.default.bool,\n\n /**\n * Show or hide the Calendar footer.\n *\n * @example ['prop', ['footer', true]]\n */\n footer: _propTypes.default.bool,\n\n /**\n * Provide a custom component to render the days of the month. The Component is provided the following props\n *\n * - `date`: a `Date` object for the day of the month to render\n * - `label`: a formatted `string` of the date to render. To adjust the format of the `label` string use the `dateFormat` prop, listed below.\n */\n dayComponent: CustomPropTypes.elementType,\n\n /**\n * A formatter for the header button of the month view.\n *\n * @example ['dateFormat', ['headerFormat', \"{ date: 'medium' }\"]]\n */\n headerFormat: CustomPropTypes.dateFormat,\n\n /**\n * A formatter for the Calendar footer, formats today's Date as a string.\n *\n * @example ['dateFormat', ['footerFormat', \"{ date: 'medium' }\", \"date => 'Today is: ' + formatter(date)\"]]\n */\n footerFormat: CustomPropTypes.dateFormat,\n\n /**\n * A formatter calendar days of the week, the default formats each day as a Narrow name: \"Mo\", \"Tu\", etc.\n *\n * @example ['prop', { dayFormat: \"day => \\n['🎉', 'M', 'T','W','Th', 'F', '🎉'][day.getDay()]\" }]\n */\n dayFormat: CustomPropTypes.dateFormat,\n\n /**\n * A formatter for day of the month\n *\n * @example ['prop', { dateFormat: \"dt => String(dt.getDate())\" }]\n */\n dateFormat: CustomPropTypes.dateFormat,\n\n /**\n * A formatter for month name.\n *\n * @example ['dateFormat', ['monthFormat', \"{ raw: 'MMMM' }\", null, { defaultView: '\"year\"' }]]\n */\n monthFormat: CustomPropTypes.dateFormat,\n\n /**\n * A formatter for month name.\n *\n * @example ['dateFormat', ['yearFormat', \"{ raw: 'yy' }\", null, { defaultView: '\"decade\"' }]]\n */\n yearFormat: CustomPropTypes.dateFormat,\n\n /**\n * A formatter for decade, the default formats the first and last year of the decade like: 2000 - 2009.\n */\n decadeFormat: CustomPropTypes.dateFormat,\n\n /**\n * A formatter for century, the default formats the first and last year of the century like: 1900 - 1999.\n */\n centuryFormat: CustomPropTypes.dateFormat,\n isRtl: _propTypes.default.bool,\n messages: _propTypes.default.shape({\n moveBack: _propTypes.default.string,\n moveForward: _propTypes.default.string\n }),\n onKeyDown: _propTypes.default.func,\n\n /** @ignore */\n tabIndex: _propTypes.default.any\n /**\n * ---\n * localized: true\n * shortcuts:\n * - { key: ctrl + down arrow, label: navigate to next view }\n * - { key: ctrl + up arrow, label: navigate to previous view }\n * - { key: ctrl + left arrow, label: \"navigate to previous: month, year, decade, or century\" }\n * - { key: ctrl + right arrow, label: \"navigate to next: month, year, decade, or century\" }\n * - { key: left arrow, label: move focus to previous date}\n * - { key: right arrow, label: move focus to next date }\n * - { key: up arrow, label: move focus up within view }\n * - { key: down key, label: move focus down within view }\n * ---\n *\n * @public\n */\n\n};\n\nvar Calendar = (0, _reactLifecyclesCompat.polyfill)(_class = (_class2 = (_temp = _class3 =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Calendar, _React$Component);\n\n Calendar.move = function move(date, min, max, unit, direction) {\n var isMonth = unit === 'month';\n var isUpOrDown = direction === 'UP' || direction === 'DOWN';\n var rangeUnit = VIEW_UNIT[unit];\n var addUnit = isMonth && isUpOrDown ? 'week' : VIEW_UNIT[unit];\n var amount = isMonth || !isUpOrDown ? 1 : 4;\n var newDate;\n if (direction === 'UP' || direction === 'LEFT') amount *= -1;\n newDate = _dates.default.add(date, amount, addUnit);\n return _dates.default.inRange(newDate, min, max, rangeUnit) ? newDate : date;\n };\n\n function Calendar() {\n var _this;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.handleFocusWillChange = function () {\n if (_this.props.tabIndex == -1) return false;\n };\n\n _initializerDefineProperty(_this, \"handleViewChange\", _descriptor, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleMoveBack\", _descriptor2, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleMoveForward\", _descriptor3, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleChange\", _descriptor4, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleFooterClick\", _descriptor5, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _initializerDefineProperty(_this, \"handleKeyDown\", _descriptor6, _assertThisInitialized(_assertThisInitialized(_this)));\n\n _this.viewId = (0, _widgetHelpers.instanceId)(_assertThisInitialized(_assertThisInitialized(_this)), '_calendar');\n _this.labelId = (0, _widgetHelpers.instanceId)(_assertThisInitialized(_assertThisInitialized(_this)), '_calendar_label');\n _this.activeId = _this.props.activeId || (0, _widgetHelpers.instanceId)(_assertThisInitialized(_assertThisInitialized(_this)), '_calendar_active_cell');\n (0, _reactComponentManagers.autoFocus)(_assertThisInitialized(_assertThisInitialized(_this)));\n _this.focusManager = (0, _focusManager.default)(_assertThisInitialized(_assertThisInitialized(_this)), {\n willHandle: _this.handleFocusWillChange\n });\n var _this$props = _this.props,\n view = _this$props.view,\n views = _this$props.views;\n _this.state = {\n selectedIndex: 0,\n view: view || views[0]\n };\n return _this;\n }\n\n Calendar.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var messages = _ref.messages,\n view = _ref.view,\n views = _ref.views,\n value = _ref.value,\n currentDate = _ref.currentDate;\n view = view || views[0];\n var slideDirection = prevState.slideDirection,\n lastView = prevState.view,\n lastDate = prevState.currentDate;\n\n if (lastView !== view) {\n slideDirection = views.indexOf(lastView) > views.indexOf(view) ? 'top' : 'bottom';\n } else if (lastDate !== currentDate) {\n slideDirection = _dates.default.gt(currentDate, lastDate) ? 'left' : 'right';\n }\n\n return {\n view: view,\n slideDirection: slideDirection,\n messages: (0, _messages.getMessages)(messages),\n currentDate: currentDate || value || new Date()\n };\n };\n\n var _proto = Calendar.prototype;\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props2 = this.props,\n value = _this$props2.value,\n min = _this$props2.min,\n max = _this$props2.max;\n var view = this.state.view;\n value = inRangeValue(value, min, max);\n if (!_dates.default.eq(value, dateOrNull(prevProps.value), VIEW_UNIT[view])) this.maybeSetCurrentDate(value);\n };\n\n _proto.render = function render() {\n var _this$props3 = this.props,\n className = _this$props3.className,\n value = _this$props3.value,\n footerFormat = _this$props3.footerFormat,\n disabled = _this$props3.disabled,\n readOnly = _this$props3.readOnly,\n footer = _this$props3.footer,\n views = _this$props3.views,\n min = _this$props3.min,\n max = _this$props3.max,\n culture = _this$props3.culture,\n tabIndex = _this$props3.tabIndex;\n var _this$state = this.state,\n currentDate = _this$state.currentDate,\n view = _this$state.view,\n slideDirection = _this$state.slideDirection,\n focused = _this$state.focused,\n messages = _this$state.messages;\n var View = VIEW[view],\n todaysDate = new Date(),\n todayNotInRange = !_dates.default.inRange(todaysDate, min, max, view);\n\n var key = view + '_' + _dates.default[view](currentDate);\n\n var elementProps = Props.pickElementProps(this),\n viewProps = Props.pick(this.props, View);\n var isDisabled = disabled || readOnly;\n return _react.default.createElement(_Widget.default, _extends({}, elementProps, {\n role: \"group\",\n focused: focused,\n disabled: disabled,\n readOnly: readOnly,\n tabIndex: tabIndex || 0,\n onKeyDown: this.handleKeyDown,\n onBlur: this.focusManager.handleBlur,\n onFocus: this.focusManager.handleFocus,\n className: (0, _classnames.default)(className, 'rw-calendar rw-widget-container'),\n \"aria-activedescendant\": this.activeId\n }), _react.default.createElement(_Header.default, {\n isRtl: this.isRtl(),\n label: this.getHeaderLabel(),\n labelId: this.labelId,\n messages: messages,\n upDisabled: isDisabled || view === last(views),\n prevDisabled: isDisabled || !_dates.default.inRange(this.nextDate('LEFT'), min, max, view),\n nextDisabled: isDisabled || !_dates.default.inRange(this.nextDate('RIGHT'), min, max, view),\n onViewChange: this.handleViewChange,\n onMoveLeft: this.handleMoveBack,\n onMoveRight: this.handleMoveForward\n }), _react.default.createElement(Calendar.Transition, {\n direction: slideDirection\n }, _react.default.createElement(View, _extends({}, viewProps, {\n key: key,\n id: this.viewId,\n activeId: this.activeId,\n value: value,\n today: todaysDate,\n disabled: disabled,\n focused: currentDate,\n onChange: this.handleChange,\n onKeyDown: this.handleKeyDown,\n \"aria-labelledby\": this.labelId\n }))), footer && _react.default.createElement(_Footer.default, {\n value: todaysDate,\n format: footerFormat,\n culture: culture,\n disabled: disabled || todayNotInRange,\n readOnly: readOnly,\n onClick: this.handleFooterClick\n }));\n };\n\n _proto.navigate = function navigate(direction, date) {\n var _this$props4 = this.props,\n views = _this$props4.views,\n min = _this$props4.min,\n max = _this$props4.max,\n onNavigate = _this$props4.onNavigate,\n onViewChange = _this$props4.onViewChange;\n var _this$state2 = this.state,\n view = _this$state2.view,\n currentDate = _this$state2.currentDate;\n var slideDir = direction === 'LEFT' || direction === 'UP' ? 'right' : 'left';\n if (direction === 'UP') view = views[views.indexOf(view) + 1] || view;\n if (direction === 'DOWN') view = views[views.indexOf(view) - 1] || view;\n if (!date) date = ['LEFT', 'RIGHT'].indexOf(direction) !== -1 ? this.nextDate(direction) : currentDate;\n\n if (_dates.default.inRange(date, min, max, view)) {\n (0, _widgetHelpers.notify)(onNavigate, [date, slideDir, view]);\n this.focus(true);\n this.maybeSetCurrentDate(date);\n (0, _widgetHelpers.notify)(onViewChange, [view]);\n }\n };\n\n _proto.focus = function focus() {\n if (+this.props.tabIndex > -1) (0, _reactDom.findDOMNode)(this).focus();\n };\n\n _proto.maybeSetCurrentDate = function maybeSetCurrentDate(date) {\n var _this$props5 = this.props,\n min = _this$props5.min,\n max = _this$props5.max;\n var _this$state3 = this.state,\n view = _this$state3.view,\n currentDate = _this$state3.currentDate;\n var inRangeDate = inRangeValue(date ? new Date(date) : currentDate, min, max);\n if (date === currentDate || _dates.default.eq(inRangeDate, dateOrNull(currentDate), VIEW_UNIT[view])) return;\n (0, _widgetHelpers.notify)(this.props.onCurrentDateChange, inRangeDate);\n };\n\n _proto.nextDate = function nextDate(direction) {\n var method = direction === 'LEFT' ? 'subtract' : 'add';\n var _this$state4 = this.state,\n currentDate = _this$state4.currentDate,\n view = _this$state4.view;\n var unit = view === 'month' ? view : 'year';\n var multi = MULTIPLIER[view] || 1;\n return _dates.default[method](currentDate, 1 * multi, unit);\n };\n\n _proto.getHeaderLabel = function getHeaderLabel() {\n var _this$props6 = this.props,\n culture = _this$props6.culture,\n decadeFormat = _this$props6.decadeFormat,\n yearFormat = _this$props6.yearFormat,\n headerFormat = _this$props6.headerFormat,\n centuryFormat = _this$props6.centuryFormat;\n var _this$state5 = this.state,\n currentDate = _this$state5.currentDate,\n view = _this$state5.view;\n\n switch (view) {\n case 'month':\n headerFormat = _localizers.date.getFormat('header', headerFormat);\n return _localizers.date.format(currentDate, headerFormat, culture);\n\n case 'year':\n yearFormat = _localizers.date.getFormat('year', yearFormat);\n return _localizers.date.format(currentDate, yearFormat, culture);\n\n case 'decade':\n decadeFormat = _localizers.date.getFormat('decade', decadeFormat);\n return _localizers.date.format(_dates.default.startOf(currentDate, 'decade'), decadeFormat, culture);\n\n case 'century':\n centuryFormat = _localizers.date.getFormat('century', centuryFormat);\n return _localizers.date.format(_dates.default.startOf(currentDate, 'century'), centuryFormat, culture);\n }\n };\n\n _proto.isRtl = function isRtl() {\n return !!(this.props.isRtl || this.context && this.context.isRtl);\n };\n\n _proto.isValidView = function isValidView(next, views) {\n if (views === void 0) {\n views = this.props.views;\n }\n\n return views.indexOf(next) !== -1;\n };\n\n return Calendar;\n}(_react.default.Component), _class3.displayName = 'Calendar', _class3.propTypes = propTypes, _class3.defaultProps = {\n value: null,\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n views: VIEW_OPTIONS,\n tabIndex: '0',\n footer: true\n}, _class3.contextTypes = {\n isRtl: _propTypes.default.bool\n}, _class3.Transition = _SlideTransitionGroup.default, _temp), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, \"handleViewChange\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this2 = this;\n\n return function () {\n _this2.navigate('UP');\n };\n }\n}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, \"handleMoveBack\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this3 = this;\n\n return function () {\n _this3.navigate('LEFT');\n };\n }\n}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, \"handleMoveForward\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this4 = this;\n\n return function () {\n _this4.navigate('RIGHT');\n };\n }\n}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"handleChange\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this5 = this;\n\n return function (date) {\n var _this5$props = _this5.props,\n views = _this5$props.views,\n onChange = _this5$props.onChange;\n var view = _this5.state.view;\n\n if (views[0] === view) {\n _this5.maybeSetCurrentDate(date);\n\n (0, _widgetHelpers.notify)(onChange, date);\n\n _this5.focus();\n\n return;\n }\n\n _this5.navigate('DOWN', date);\n };\n }\n}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"handleFooterClick\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this6 = this;\n\n return function (date) {\n var _this6$props = _this6.props,\n views = _this6$props.views,\n min = _this6$props.min,\n max = _this6$props.max,\n onViewChange = _this6$props.onViewChange;\n var firstView = views[0];\n (0, _widgetHelpers.notify)(_this6.props.onChange, date);\n\n if (_dates.default.inRange(date, min, max, firstView)) {\n _this6.focus();\n\n _this6.maybeSetCurrentDate(date);\n\n (0, _widgetHelpers.notify)(onViewChange, [firstView]);\n }\n };\n }\n}), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, \"handleKeyDown\", [_interaction.widgetEditable], {\n enumerable: true,\n initializer: function initializer() {\n var _this7 = this;\n\n return function (e) {\n var _this7$state = _this7.state,\n currentDate = _this7$state.currentDate,\n view = _this7$state.view;\n var ctrl = e.ctrlKey || e.metaKey;\n var key = e.key;\n var direction = ARROWS_TO_DIRECTION[key];\n var unit = VIEW_UNIT[view];\n\n if (key === 'Enter') {\n e.preventDefault();\n return _this7.handleChange(currentDate);\n }\n\n if (direction) {\n if (ctrl) {\n e.preventDefault();\n\n _this7.navigate(direction);\n } else {\n if (_this7.isRtl() && OPPOSITE_DIRECTION[direction]) direction = OPPOSITE_DIRECTION[direction];\n var nextDate = Calendar.move(currentDate, _this7.props.min, _this7.props.max, view, direction);\n\n if (!_dates.default.eq(currentDate, nextDate, unit)) {\n e.preventDefault();\n if (_dates.default.gt(nextDate, currentDate, view)) _this7.navigate('RIGHT', nextDate);else if (_dates.default.lt(nextDate, currentDate, view)) _this7.navigate('LEFT', nextDate);else _this7.maybeSetCurrentDate(nextDate);\n }\n }\n }\n\n (0, _widgetHelpers.notify)(_this7.props.onKeyDown, [e]);\n };\n }\n})), _class2)) || _class;\n\nfunction dateOrNull(dt) {\n if (dt && !isNaN(dt.getTime())) return dt;\n return null;\n}\n\nvar _default = (0, _uncontrollable.default)(Calendar, {\n value: 'onChange',\n currentDate: 'onCurrentDateChange',\n view: 'onViewChange'\n}, ['focus']);\n\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = makeAutoFocusable;\nexports.PropTypes = void 0;\n\nvar _propTypes = require(\"prop-types\");\n\nvar _reactDom = require(\"react-dom\");\n\nvar _spyOnComponent = _interopRequireDefault(require(\"spy-on-component\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PropTypes = {\n autoFocus: _propTypes.bool\n};\nexports.PropTypes = PropTypes;\n\nfunction makeAutoFocusable(instance) {\n (0, _spyOnComponent.default)(instance, {\n componentDidMount: function componentDidMount() {\n var autoFocus = this.props.autoFocus;\n if (autoFocus) this.focus ? this.focus() : (0, _reactDom.findDOMNode)(this).focus();\n }\n });\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.callFocusEventHandler = callFocusEventHandler;\nexports.default = createFocusManager;\n\nvar _reactDom = require(\"react-dom\");\n\nvar _timeoutManager = _interopRequireDefault(require(\"./timeoutManager\"));\n\nvar _mountManager = _interopRequireDefault(require(\"./mountManager\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction callFocusEventHandler(inst, focused, e) {\n var handler = inst.props[focused ? 'onFocus' : 'onBlur'];\n handler && handler(e);\n}\n\nfunction createFocusManager(instance, _temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n willHandle = _ref.willHandle,\n didHandle = _ref.didHandle,\n onChange = _ref.onChange,\n _ref$isDisabled = _ref.isDisabled,\n isDisabled = _ref$isDisabled === void 0 ? function () {\n return !!instance.props.disabled;\n } : _ref$isDisabled;\n\n var lastFocused;\n var timeouts = (0, _timeoutManager.default)(instance);\n var isMounted = (0, _mountManager.default)(instance);\n\n function _handleFocus(focused, event) {\n if (event && event.persist) event.persist();\n if (willHandle && willHandle(focused, event) === false) return;\n timeouts.set('focus', function () {\n (0, _reactDom.unstable_batchedUpdates)(function () {\n if (focused !== lastFocused) {\n if (didHandle) didHandle.call(instance, focused, event); // only fire a change when unmounted if its a blur\n\n if (isMounted() || !focused) {\n lastFocused = focused;\n onChange && onChange(focused, event);\n }\n }\n });\n });\n }\n\n return {\n handleBlur: function handleBlur(event) {\n if (!isDisabled()) _handleFocus(false, event);\n },\n handleFocus: function handleFocus(event) {\n if (!isDisabled()) _handleFocus(true, event);\n }\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.mixin = mixin;\nexports.default = mixIntoClass;\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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction mixin(componentClass, _ref) {\n var propTypes = _ref.propTypes,\n contextTypes = _ref.contextTypes,\n childContextTypes = _ref.childContextTypes,\n getChildContext = _ref.getChildContext,\n protoSpec = _objectWithoutProperties(_ref, [\"propTypes\", \"contextTypes\", \"childContextTypes\", \"getChildContext\"]);\n\n if (propTypes) componentClass.propTypes = _extends({}, componentClass.propTypes, propTypes);\n if (contextTypes) componentClass.contextTypes = _extends({}, componentClass.contextTypes, contextTypes);\n if (childContextTypes) componentClass.childContextTypes = _extends({}, componentClass.childContextTypes, childContextTypes);\n\n if (getChildContext) {\n var baseGCContext = componentClass.prototype.getChildContext;\n\n componentClass.prototype.getChildContext = function $getChildContext() {\n return _extends({}, baseGCContext && baseGCContext.call(this), getChildContext.call(this));\n };\n }\n\n _extends(componentClass.prototype, protoSpec);\n\n return componentClass;\n}\n\nfunction mixIntoClass(spec) {\n return function (componentClass) {\n return mixin(componentClass, spec);\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _Button = _interopRequireDefault(require(\"./Button\"));\n\nvar _Icon = require(\"./Icon\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar Header =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Header, _React$Component);\n\n function Header() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Header.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n messages = _this$props.messages,\n label = _this$props.label,\n labelId = _this$props.labelId,\n onMoveRight = _this$props.onMoveRight,\n onMoveLeft = _this$props.onMoveLeft,\n onViewChange = _this$props.onViewChange,\n prevDisabled = _this$props.prevDisabled,\n upDisabled = _this$props.upDisabled,\n nextDisabled = _this$props.nextDisabled,\n _this$props$navigateP = _this$props.navigatePrevIcon,\n navigatePrevIcon = _this$props$navigateP === void 0 ? _Icon.chevronLeft : _this$props$navigateP,\n _this$props$navigateN = _this$props.navigateNextIcon,\n navigateNextIcon = _this$props$navigateN === void 0 ? _Icon.chevronRight : _this$props$navigateN,\n isRtl = _this$props.isRtl;\n return _react.default.createElement(\"div\", {\n className: \"rw-calendar-header\"\n }, _react.default.createElement(_Button.default, {\n className: \"rw-calendar-btn-left\",\n onClick: onMoveLeft,\n disabled: prevDisabled,\n label: messages.moveBack(),\n icon: isRtl ? navigateNextIcon : navigatePrevIcon\n }), _react.default.createElement(_Button.default, {\n id: labelId,\n onClick: onViewChange,\n className: \"rw-calendar-btn-view\",\n disabled: upDisabled,\n \"aria-live\": \"polite\",\n \"aria-atomic\": \"true\"\n }, label), _react.default.createElement(_Button.default, {\n className: \"rw-calendar-btn-right\",\n onClick: onMoveRight,\n disabled: nextDisabled,\n label: messages.moveForward(),\n icon: isRtl ? navigatePrevIcon : navigateNextIcon\n }));\n };\n\n return Header;\n}(_react.default.Component);\n\nHeader.propTypes = {\n label: _propTypes.default.string.isRequired,\n labelId: _propTypes.default.string,\n upDisabled: _propTypes.default.bool.isRequired,\n prevDisabled: _propTypes.default.bool.isRequired,\n nextDisabled: _propTypes.default.bool.isRequired,\n onViewChange: _propTypes.default.func.isRequired,\n onMoveLeft: _propTypes.default.func.isRequired,\n onMoveRight: _propTypes.default.func.isRequired,\n navigatePrevIcon: _propTypes.default.node,\n navigateNextIcon: _propTypes.default.node,\n messages: _propTypes.default.shape({\n moveBack: _propTypes.default.func.isRequired,\n moveForward: _propTypes.default.func.isRequired\n }),\n isRtl: _propTypes.default.bool\n};\nvar _default = Header;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = Footer;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _Button = _interopRequireDefault(require(\"./Button\"));\n\nvar _localizers = require(\"./util/localizers\");\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar propTypes = {\n disabled: _propTypes.default.bool,\n readOnly: _propTypes.default.bool,\n value: _propTypes.default.instanceOf(Date),\n onClick: _propTypes.default.func.isRequired,\n culture: _propTypes.default.string,\n format: CustomPropTypes.dateFormat\n};\n\nfunction Footer(_ref) {\n var disabled = _ref.disabled,\n readOnly = _ref.readOnly,\n value = _ref.value,\n onClick = _ref.onClick,\n culture = _ref.culture,\n format = _ref.format;\n return _react.default.createElement(\"div\", {\n className: \"rw-calendar-footer\"\n }, _react.default.createElement(_Button.default, {\n disabled: !!(disabled || readOnly),\n onClick: onClick.bind(null, value)\n }, _localizers.date.format(value, _localizers.date.getFormat('footer', format), culture)));\n}\n\nFooter.propTypes = propTypes;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _CalendarView = _interopRequireDefault(require(\"./CalendarView\"));\n\nvar _dates = _interopRequireDefault(require(\"./util/dates\"));\n\nvar _localizers = require(\"./util/localizers\");\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\n\nvar _ = require(\"./util/_\");\n\nvar Props = _interopRequireWildcard(require(\"./util/Props\"));\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar isEqual = function isEqual(dateA, dateB) {\n return _dates.default.eq(dateA, dateB, 'day');\n};\n\nvar MonthView =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(MonthView, _React$Component);\n\n function MonthView() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.renderRow = function (row, rowIdx) {\n var _this$props = _this.props,\n focused = _this$props.focused,\n today = _this$props.today,\n activeId = _this$props.activeId,\n disabled = _this$props.disabled,\n onChange = _this$props.onChange,\n value = _this$props.value,\n culture = _this$props.culture,\n min = _this$props.min,\n max = _this$props.max,\n footerFormat = _this$props.footerFormat,\n dateFormat = _this$props.dateFormat,\n Day = _this$props.dayComponent;\n footerFormat = _localizers.date.getFormat('footer', footerFormat);\n dateFormat = _localizers.date.getFormat('dayOfMonth', dateFormat);\n return _react.default.createElement(_CalendarView.default.Row, {\n key: rowIdx\n }, row.map(function (date, colIdx) {\n var formattedDate = _localizers.date.format(date, dateFormat, culture);\n\n var label = _localizers.date.format(date, footerFormat, culture);\n\n return _react.default.createElement(_CalendarView.default.Cell, {\n key: colIdx,\n activeId: activeId,\n label: label,\n date: date,\n now: today,\n min: min,\n max: max,\n unit: \"day\",\n viewUnit: \"month\",\n onChange: onChange,\n focused: focused,\n selected: value,\n disabled: disabled\n }, Day ? _react.default.createElement(Day, {\n date: date,\n label: formattedDate\n }) : formattedDate);\n }));\n };\n\n return _this;\n }\n\n var _proto = MonthView.prototype;\n\n _proto.renderHeaders = function renderHeaders(week, format, culture) {\n var firstOfWeek = _localizers.date.firstOfWeek(culture);\n\n return week.map(function (date) {\n return _react.default.createElement(\"th\", {\n className: \"rw-head-cell\",\n key: 'header_' + _dates.default.weekday(date, undefined, firstOfWeek)\n }, _localizers.date.format(date, format, culture));\n });\n };\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n className = _this$props2.className,\n focused = _this$props2.focused,\n culture = _this$props2.culture,\n activeId = _this$props2.activeId,\n dayFormat = _this$props2.dayFormat;\n\n var month = _dates.default.visibleDays(focused, culture);\n\n var rows = (0, _.chunk)(month, 7);\n dayFormat = _localizers.date.getFormat('weekday', dayFormat);\n return _react.default.createElement(_CalendarView.default, _extends({}, Props.omitOwn(this), {\n activeId: activeId,\n className: (0, _classnames.default)(className, 'rw-calendar-month')\n }), _react.default.createElement(\"thead\", {\n className: \"rw-calendar-head\"\n }, _react.default.createElement(\"tr\", {\n className: \"rw-calendar-row\"\n }, this.renderHeaders(rows[0], dayFormat, culture))), _react.default.createElement(_CalendarView.default.Body, null, rows.map(this.renderRow)));\n };\n\n return MonthView;\n}(_react.default.Component);\n\nMonthView.isEqual = isEqual;\nMonthView.propTypes = {\n activeId: _propTypes.default.string,\n culture: _propTypes.default.string,\n today: _propTypes.default.instanceOf(Date),\n value: _propTypes.default.instanceOf(Date),\n focused: _propTypes.default.instanceOf(Date),\n min: _propTypes.default.instanceOf(Date),\n max: _propTypes.default.instanceOf(Date),\n onChange: _propTypes.default.func.isRequired,\n dayComponent: CustomPropTypes.elementType,\n dayFormat: CustomPropTypes.dateFormat,\n dateFormat: CustomPropTypes.dateFormat,\n footerFormat: CustomPropTypes.dateFormat,\n disabled: _propTypes.default.bool\n};\nvar _default = MonthView;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","var MILI = 'milliseconds'\n , SECONDS = 'seconds'\n , MINUTES = 'minutes'\n , HOURS = 'hours'\n , DAY = 'day'\n , WEEK = 'week'\n , MONTH = 'month'\n , YEAR = 'year'\n , DECADE = 'decade'\n , CENTURY = 'century';\n\nvar dates = module.exports = {\n\n add: function(date, num, unit) {\n date = new Date(date)\n\n switch (unit){\n case MILI:\n case SECONDS:\n case MINUTES:\n case HOURS:\n case YEAR:\n return dates[unit](date, dates[unit](date) + num)\n case DAY:\n return dates.date(date, dates.date(date) + num)\n case WEEK:\n return dates.date(date, dates.date(date) + (7 * num)) \n case MONTH:\n return monthMath(date, num)\n case DECADE:\n return dates.year(date, dates.year(date) + (num * 10))\n case CENTURY:\n return dates.year(date, dates.year(date) + (num * 100))\n }\n\n throw new TypeError('Invalid units: \"' + unit + '\"')\n },\n\n subtract: function(date, num, unit) {\n return dates.add(date, -num, unit)\n },\n\n startOf: function(date, unit, firstOfWeek) {\n date = new Date(date)\n\n switch (unit) {\n case 'century':\n case 'decade':\n case 'year':\n date = dates.month(date, 0);\n case 'month':\n date = dates.date(date, 1);\n case 'week':\n case 'day':\n date = dates.hours(date, 0);\n case 'hours':\n date = dates.minutes(date, 0);\n case 'minutes':\n date = dates.seconds(date, 0);\n case 'seconds':\n date = dates.milliseconds(date, 0);\n }\n\n if (unit === DECADE) \n date = dates.subtract(date, dates.year(date) % 10, 'year')\n \n if (unit === CENTURY) \n date = dates.subtract(date, dates.year(date) % 100, 'year')\n\n if (unit === WEEK) \n date = dates.weekday(date, 0, firstOfWeek);\n\n return date\n },\n\n\n endOf: function(date, unit, firstOfWeek){\n date = new Date(date)\n date = dates.startOf(date, unit, firstOfWeek)\n date = dates.add(date, 1, unit)\n date = dates.subtract(date, 1, MILI)\n return date\n },\n\n eq: createComparer(function(a, b){ return a === b }),\n neq: createComparer(function(a, b){ return a !== b }),\n gt: createComparer(function(a, b){ return a > b }),\n gte: createComparer(function(a, b){ return a >= b }),\n lt: createComparer(function(a, b){ return a < b }),\n lte: createComparer(function(a, b){ return a <= b }),\n\n min: function(){\n return new Date(Math.min.apply(Math, arguments))\n },\n\n max: function(){\n return new Date(Math.max.apply(Math, arguments))\n },\n \n inRange: function(day, min, max, unit){\n unit = unit || 'day'\n\n return (!min || dates.gte(day, min, unit))\n && (!max || dates.lte(day, max, unit))\n },\n\n milliseconds: createAccessor('Milliseconds'),\n seconds: createAccessor('Seconds'),\n minutes: createAccessor('Minutes'),\n hours: createAccessor('Hours'),\n day: createAccessor('Day'),\n date: createAccessor('Date'),\n month: createAccessor('Month'),\n year: createAccessor('FullYear'),\n\n decade: function (date, val) {\n return val === undefined \n ? dates.year(dates.startOf(date, DECADE))\n : dates.add(date, val + 10, YEAR);\n },\n\n century: function (date, val) {\n return val === undefined \n ? dates.year(dates.startOf(date, CENTURY))\n : dates.add(date, val + 100, YEAR);\n },\n\n weekday: function (date, val, firstDay) {\n var weekday = (dates.day(date) + 7 - (firstDay || 0) ) % 7;\n\n return val === undefined \n ? weekday \n : dates.add(date, val - weekday, DAY);\n },\n\n diff: function (date1, date2, unit, asFloat) {\n var dividend, divisor, result;\n\n switch (unit) {\n case MILI:\n case SECONDS:\n case MINUTES:\n case HOURS:\n case DAY:\n case WEEK:\n dividend = date2.getTime() - date1.getTime(); break;\n case MONTH:\n case YEAR:\n case DECADE:\n case CENTURY:\n dividend = (dates.year(date2) - dates.year(date1)) * 12 + dates.month(date2) - dates.month(date1); break;\n default:\n throw new TypeError('Invalid units: \"' + unit + '\"');\n }\n\n switch (unit) {\n case MILI:\n divisor = 1; break;\n case SECONDS:\n divisor = 1000; break;\n case MINUTES:\n divisor = 1000 * 60; break;\n case HOURS:\n divisor = 1000 * 60 * 60; break;\n case DAY:\n divisor = 1000 * 60 * 60 * 24; break;\n case WEEK:\n divisor = 1000 * 60 * 60 * 24 * 7; break;\n case MONTH:\n divisor = 1; break;\n case YEAR:\n divisor = 12; break;\n case DECADE:\n divisor = 120; break;\n case CENTURY:\n divisor = 1200; break;\n default:\n throw new TypeError('Invalid units: \"' + unit + '\"');\n }\n\n result = dividend / divisor;\n\n return asFloat ? result : absoluteFloor(result);\n }\n};\n\nfunction absoluteFloor(number) {\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}\n\nfunction monthMath(date, val){\n var current = dates.month(date)\n , newMonth = (current + val);\n\n date = dates.month(date, newMonth)\n\n while (newMonth < 0 ) newMonth = 12 + newMonth\n \n //month rollover\n if ( dates.month(date) !== ( newMonth % 12))\n date = dates.date(date, 0) //move to last of month\n\n return date\n}\n\nfunction createAccessor(method){\n return function(date, val){\n if (val === undefined)\n return date['get' + method]()\n\n date = new Date(date)\n date['set' + method](val)\n return date\n }\n}\n\nfunction createComparer(operator) {\n return function (a, b, unit) {\n return operator(+dates.startOf(a, unit), +dates.startOf(b, unit))\n };\n}\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _CalendarView = _interopRequireDefault(require(\"./CalendarView\"));\n\nvar _dates = _interopRequireDefault(require(\"./util/dates\"));\n\nvar _localizers = require(\"./util/localizers\");\n\nvar _ = require(\"./util/_\");\n\nvar Props = _interopRequireWildcard(require(\"./util/Props\"));\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar YearView =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(YearView, _React$Component);\n\n function YearView() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.renderRow = function (row, rowIdx) {\n var _this$props = _this.props,\n focused = _this$props.focused,\n activeId = _this$props.activeId,\n disabled = _this$props.disabled,\n onChange = _this$props.onChange,\n value = _this$props.value,\n today = _this$props.today,\n culture = _this$props.culture,\n headerFormat = _this$props.headerFormat,\n monthFormat = _this$props.monthFormat,\n min = _this$props.min,\n max = _this$props.max;\n headerFormat = _localizers.date.getFormat('header', headerFormat);\n monthFormat = _localizers.date.getFormat('month', monthFormat);\n return _react.default.createElement(_CalendarView.default.Row, {\n key: rowIdx\n }, row.map(function (date, colIdx) {\n var label = _localizers.date.format(date, headerFormat, culture);\n\n return _react.default.createElement(_CalendarView.default.Cell, {\n key: colIdx,\n activeId: activeId,\n label: label,\n date: date,\n now: today,\n min: min,\n max: max,\n unit: \"month\",\n onChange: onChange,\n focused: focused,\n selected: value,\n disabled: disabled\n }, _localizers.date.format(date, monthFormat, culture));\n }));\n };\n\n return _this;\n }\n\n var _proto = YearView.prototype;\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n focused = _this$props2.focused,\n activeId = _this$props2.activeId,\n months = _dates.default.monthsInYear(_dates.default.year(focused));\n\n return _react.default.createElement(_CalendarView.default, _extends({}, Props.omitOwn(this), {\n activeId: activeId\n }), _react.default.createElement(_CalendarView.default.Body, null, (0, _.chunk)(months, 4).map(this.renderRow)));\n };\n\n return YearView;\n}(_react.default.Component);\n\nYearView.propTypes = {\n activeId: _propTypes.default.string,\n culture: _propTypes.default.string,\n today: _propTypes.default.instanceOf(Date),\n value: _propTypes.default.instanceOf(Date),\n focused: _propTypes.default.instanceOf(Date),\n min: _propTypes.default.instanceOf(Date),\n max: _propTypes.default.instanceOf(Date),\n onChange: _propTypes.default.func.isRequired,\n headerFormat: CustomPropTypes.dateFormat,\n monthFormat: CustomPropTypes.dateFormat,\n disabled: _propTypes.default.bool\n};\nvar _default = YearView;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _CalendarView = _interopRequireDefault(require(\"./CalendarView\"));\n\nvar _dates = _interopRequireDefault(require(\"./util/dates\"));\n\nvar _localizers = require(\"./util/localizers\");\n\nvar _ = require(\"./util/_\");\n\nvar Props = _interopRequireWildcard(require(\"./util/Props\"));\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar DecadeView =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(DecadeView, _React$Component);\n\n function DecadeView() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.renderRow = function (row, rowIdx) {\n var _this$props = _this.props,\n focused = _this$props.focused,\n activeId = _this$props.activeId,\n disabled = _this$props.disabled,\n onChange = _this$props.onChange,\n yearFormat = _this$props.yearFormat,\n value = _this$props.value,\n today = _this$props.today,\n culture = _this$props.culture,\n min = _this$props.min,\n max = _this$props.max;\n return _react.default.createElement(_CalendarView.default.Row, {\n key: rowIdx\n }, row.map(function (date, colIdx) {\n var label = _localizers.date.format(date, _localizers.date.getFormat('year', yearFormat), culture);\n\n return _react.default.createElement(_CalendarView.default.Cell, {\n key: colIdx,\n unit: \"year\",\n activeId: activeId,\n label: label,\n date: date,\n now: today,\n min: min,\n max: max,\n onChange: onChange,\n focused: focused,\n selected: value,\n disabled: disabled\n }, label);\n }));\n };\n\n return _this;\n }\n\n var _proto = DecadeView.prototype;\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n focused = _this$props2.focused,\n activeId = _this$props2.activeId;\n return _react.default.createElement(_CalendarView.default, _extends({}, Props.omitOwn(this), {\n activeId: activeId\n }), _react.default.createElement(_CalendarView.default.Body, null, (0, _.chunk)(getDecadeYears(focused), 4).map(this.renderRow)));\n };\n\n return DecadeView;\n}(_react.default.Component);\n\nDecadeView.propTypes = {\n activeId: _propTypes.default.string,\n culture: _propTypes.default.string,\n today: _propTypes.default.instanceOf(Date),\n value: _propTypes.default.instanceOf(Date),\n focused: _propTypes.default.instanceOf(Date),\n min: _propTypes.default.instanceOf(Date),\n max: _propTypes.default.instanceOf(Date),\n onChange: _propTypes.default.func.isRequired,\n yearFormat: CustomPropTypes.dateFormat,\n disabled: _propTypes.default.bool\n};\n\nfunction getDecadeYears(_date) {\n var days = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],\n date = _dates.default.add(_dates.default.startOf(_date, 'decade'), -2, 'year');\n\n return days.map(function () {\n return date = _dates.default.add(date, 1, 'year');\n });\n}\n\nvar _default = DecadeView;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _CalendarView = _interopRequireDefault(require(\"./CalendarView\"));\n\nvar _dates = _interopRequireDefault(require(\"./util/dates\"));\n\nvar _localizers = require(\"./util/localizers\");\n\nvar _ = require(\"./util/_\");\n\nvar Props = _interopRequireWildcard(require(\"./util/Props\"));\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar CenturyView =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(CenturyView, _React$Component);\n\n function CenturyView() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.renderRow = function (row, rowIdx) {\n var _this$props = _this.props,\n focused = _this$props.focused,\n activeId = _this$props.activeId,\n disabled = _this$props.disabled,\n onChange = _this$props.onChange,\n value = _this$props.value,\n today = _this$props.today,\n culture = _this$props.culture,\n min = _this$props.min,\n decadeFormat = _this$props.decadeFormat,\n max = _this$props.max;\n decadeFormat = _localizers.date.getFormat('decade', decadeFormat);\n return _react.default.createElement(_CalendarView.default.Row, {\n key: rowIdx\n }, row.map(function (date, colIdx) {\n var label = _localizers.date.format(_dates.default.startOf(date, 'decade'), decadeFormat, culture);\n\n return _react.default.createElement(_CalendarView.default.Cell, {\n key: colIdx,\n unit: \"decade\",\n activeId: activeId,\n label: label,\n date: date,\n now: today,\n min: min,\n max: max,\n onChange: onChange,\n focused: focused,\n selected: value,\n disabled: disabled\n }, label);\n }));\n };\n\n return _this;\n }\n\n var _proto = CenturyView.prototype;\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n focused = _this$props2.focused,\n activeId = _this$props2.activeId;\n return _react.default.createElement(_CalendarView.default, _extends({}, Props.omitOwn(this), {\n activeId: activeId\n }), _react.default.createElement(_CalendarView.default.Body, null, (0, _.chunk)(getCenturyDecades(focused), 4).map(this.renderRow)));\n };\n\n return CenturyView;\n}(_react.default.Component);\n\nCenturyView.propTypes = {\n activeId: _propTypes.default.string,\n culture: _propTypes.default.string,\n today: _propTypes.default.instanceOf(Date),\n value: _propTypes.default.instanceOf(Date),\n focused: _propTypes.default.instanceOf(Date),\n min: _propTypes.default.instanceOf(Date),\n max: _propTypes.default.instanceOf(Date),\n onChange: _propTypes.default.func.isRequired,\n decadeFormat: CustomPropTypes.dateFormat,\n disabled: _propTypes.default.bool\n};\n\nfunction getCenturyDecades(_date) {\n var days = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],\n date = _dates.default.add(_dates.default.startOf(_date, 'century'), -20, 'year');\n\n return days.map(function () {\n return date = _dates.default.add(date, 10, 'year');\n });\n}\n\nvar _default = CenturyView;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _events = _interopRequireDefault(require(\"dom-helpers/events\"));\n\nvar _style = _interopRequireDefault(require(\"dom-helpers/style\"));\n\nvar _height = _interopRequireDefault(require(\"dom-helpers/query/height\"));\n\nvar _properties = require(\"dom-helpers/transition/properties\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _TransitionGroup = _interopRequireDefault(require(\"react-transition-group/TransitionGroup\"));\n\nvar _Transition = _interopRequireWildcard(require(\"react-transition-group/Transition\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = require(\"react-dom\");\n\nvar Props = _interopRequireWildcard(require(\"./util/Props\"));\n\nvar _transitionStyle, _transitionClasses;\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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 _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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar DirectionPropType = _propTypes.default.oneOf(['left', 'right', 'top', 'bottom']);\n\nvar transitionStyle = (_transitionStyle = {}, _transitionStyle[_Transition.ENTERING] = {\n position: 'absolute'\n}, _transitionStyle[_Transition.EXITING] = {\n position: 'absolute'\n}, _transitionStyle);\nvar transitionClasses = (_transitionClasses = {}, _transitionClasses[_Transition.ENTERED] = 'rw-calendar-transition-entered', _transitionClasses[_Transition.ENTERING] = 'rw-calendar-transition-entering', _transitionClasses[_Transition.EXITING] = 'rw-calendar-transition-exiting', _transitionClasses[_Transition.EXITED] = 'rw-calendar-transition-exited', _transitionClasses);\n\nfunction parseDuration(node) {\n var str = (0, _style.default)(node, _properties.transitionDuration);\n var mult = str.indexOf('ms') === -1 ? 1000 : 1;\n return parseFloat(str) * mult;\n}\n\nvar SlideTransition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(SlideTransition, _React$Component);\n\n function SlideTransition() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.handleTransitionEnd = function (node, done) {\n var duration = parseDuration(node) || 300;\n\n var handler = function handler() {\n _events.default.off(node, _properties.transitionEnd, handler, false);\n\n done();\n };\n\n setTimeout(handler, duration * 1.5);\n\n _events.default.on(node, _properties.transitionEnd, handler, false);\n };\n\n return _this;\n }\n\n var _proto = SlideTransition.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n children = _this$props.children,\n props = _objectWithoutProperties(_this$props, [\"children\"]);\n\n var direction = this.context.direction;\n\n var child = _react.default.Children.only(children);\n\n return _react.default.createElement(_Transition.default, _extends({}, props, {\n timeout: 5000,\n addEndListener: this.handleTransitionEnd\n }), function (status, innerProps) {\n return _react.default.cloneElement(child, _extends({}, innerProps, {\n style: transitionStyle[status],\n className: (0, _classnames.default)(child.props.className, 'rw-calendar-transition', \"rw-calendar-transition-\" + direction, transitionClasses[status])\n }));\n });\n };\n\n return SlideTransition;\n}(_react.default.Component);\n\nSlideTransition.contextTypes = {\n direction: DirectionPropType\n};\n\nvar SlideTransitionGroup =\n/*#__PURE__*/\nfunction (_React$Component2) {\n _inheritsLoose(SlideTransitionGroup, _React$Component2);\n\n function SlideTransitionGroup() {\n var _this2;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _this2 = _React$Component2.call.apply(_React$Component2, [this].concat(args)) || this;\n\n _this2.handleEnter = function (child) {\n var node = (0, _reactDom.findDOMNode)(_assertThisInitialized(_assertThisInitialized(_this2)));\n if (!child) return;\n var height = (0, _height.default)(child) + 'px';\n (0, _style.default)(node, {\n height: height,\n overflow: 'hidden'\n });\n };\n\n _this2.handleExited = function () {\n var node = (0, _reactDom.findDOMNode)(_assertThisInitialized(_assertThisInitialized(_this2)));\n (0, _style.default)(node, {\n overflow: '',\n height: ''\n });\n };\n\n return _this2;\n }\n\n var _proto2 = SlideTransitionGroup.prototype;\n\n _proto2.getChildContext = function getChildContext() {\n return {\n direction: this.props.direction\n };\n };\n\n _proto2.render = function render() {\n var _this$props2 = this.props,\n children = _this$props2.children,\n direction = _this$props2.direction;\n return _react.default.createElement(_TransitionGroup.default, _extends({}, Props.omitOwn(this), {\n component: \"div\",\n className: \"rw-calendar-transition-group\"\n }), _react.default.createElement(SlideTransition, {\n key: children.key,\n direction: direction,\n onEnter: this.handleEnter,\n onExited: this.handleExited\n }, children));\n };\n\n return SlideTransitionGroup;\n}(_react.default.Component);\n\nSlideTransitionGroup.childContextTypes = {\n direction: DirectionPropType\n};\nSlideTransitionGroup.defaultProps = {\n direction: 'left'\n};\nSlideTransitionGroup.propTypes = {\n direction: DirectionPropType\n};\nvar _default = SlideTransitionGroup;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _ChildMapping = require(\"./utils/ChildMapping\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nvar values = Object.values || function (obj) {\n return Object.keys(obj).map(function (k) {\n return obj[k];\n });\n};\n\nvar defaultProps = {\n component: 'div',\n childFactory: function childFactory(child) {\n return child;\n }\n /**\n * The `<TransitionGroup>` component manages a set of transition components\n * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition\n * components, `<TransitionGroup>` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the `<TransitionGroup>`.\n *\n * Note that `<TransitionGroup>` does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\n};\n\nvar TransitionGroup =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(TransitionGroup, _React$Component);\n\n function TransitionGroup(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n\n var handleExited = _this.handleExited.bind(_assertThisInitialized(_assertThisInitialized(_this))); // Initial children should all be entering, dependent on appear\n\n\n _this.state = {\n handleExited: handleExited,\n firstRender: true\n };\n return _this;\n }\n\n var _proto = TransitionGroup.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: {\n isMounting: !this.appeared\n }\n };\n };\n\n _proto.componentDidMount = function componentDidMount() {\n this.appeared = true;\n this.mounted = true;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n var prevChildMapping = _ref.children,\n handleExited = _ref.handleExited,\n firstRender = _ref.firstRender;\n return {\n children: firstRender ? (0, _ChildMapping.getInitialChildMapping)(nextProps, handleExited) : (0, _ChildMapping.getNextChildMapping)(nextProps, prevChildMapping, handleExited),\n firstRender: false\n };\n };\n\n _proto.handleExited = function handleExited(child, node) {\n var currentChildMapping = (0, _ChildMapping.getChildMapping)(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited) {\n child.props.onExited(node);\n }\n\n if (this.mounted) {\n this.setState(function (state) {\n var children = _extends({}, state.children);\n\n delete children[child.key];\n return {\n children: children\n };\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n Component = _this$props.component,\n childFactory = _this$props.childFactory,\n props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n var children = values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component === null) {\n return children;\n }\n\n return _react.default.createElement(Component, props, children);\n };\n\n return TransitionGroup;\n}(_react.default.Component);\n\nTransitionGroup.childContextTypes = {\n transitionGroup: _propTypes.default.object.isRequired\n};\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * `<TransitionGroup>` renders a `<div>` by default. You can change this\n * behavior by providing a `component` prop.\n * If you use React v16+ and would like to avoid a wrapping `<div>` element\n * you can pass in `component={null}`. This is useful if the wrapping div\n * borks your css styles.\n */\n component: _propTypes.default.any,\n\n /**\n * A set of `<Transition>` components, that are toggled `in` and out as they\n * leave. the `<TransitionGroup>` will inject specific transition props, so\n * remember to spread them through if you are wrapping the `<Transition>` as\n * with our `<Fade>` example.\n *\n * While this component is meant for multiple `Transition` or `CSSTransition`\n * children, sometimes you may want to have a single transition child with\n * content that you want to be transitioned out and in when you change it\n * (e.g. routes, images etc.) In that case you can change the `key` prop of\n * the transition child as you change its content, this will cause\n * `TransitionGroup` to transition the child out and back in.\n */\n children: _propTypes.default.node,\n\n /**\n * A convenience prop that enables or disables appear animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n appear: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables enter animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n enter: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables exit animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n exit: _propTypes.default.bool,\n\n /**\n * You may need to apply reactive updates to a child as it is exiting.\n * This is generally done by using `cloneElement` however in the case of an exiting\n * child the element has already been removed and not accessible to the consumer.\n *\n * If you do need to update a child as it leaves you can provide a `childFactory`\n * to wrap every child, even the ones that are leaving.\n *\n * @type Function(child: ReactElement) -> ReactElement\n */\n childFactory: _propTypes.default.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(TransitionGroup);\n\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.getChildMapping = getChildMapping;\nexports.mergeChildMappings = mergeChildMappings;\nexports.getInitialChildMapping = getInitialChildMapping;\nexports.getNextChildMapping = getNextChildMapping;\n\nvar _react = require(\"react\");\n\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\nfunction getChildMapping(children, mapFn) {\n var mapper = function mapper(child) {\n return mapFn && (0, _react.isValidElement)(child) ? mapFn(child) : child;\n };\n\n var result = Object.create(null);\n if (children) _react.Children.map(children, function (c) {\n return c;\n }).forEach(function (child) {\n // run the map function here instead so that the key is the computed one\n result[child.key] = mapper(child);\n });\n return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\n\nfunction mergeChildMappings(prev, next) {\n prev = prev || {};\n next = next || {};\n\n function getValueForKey(key) {\n return key in next ? next[key] : prev[key];\n } // For each key of `next`, the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending = Object.create(null);\n var pendingKeys = [];\n\n for (var prevKey in prev) {\n if (prevKey in next) {\n if (pendingKeys.length) {\n nextKeysPending[prevKey] = pendingKeys;\n pendingKeys = [];\n }\n } else {\n pendingKeys.push(prevKey);\n }\n }\n\n var i;\n var childMapping = {};\n\n for (var nextKey in next) {\n if (nextKeysPending[nextKey]) {\n for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n var pendingNextKey = nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n }\n }\n\n childMapping[nextKey] = getValueForKey(nextKey);\n } // Finally, add the keys which didn't appear before any key in `next`\n\n\n for (i = 0; i < pendingKeys.length; i++) {\n childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n }\n\n return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nfunction getInitialChildMapping(props, onExited) {\n return getChildMapping(props.children, function (child) {\n return (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n appear: getProp(child, 'appear', props),\n enter: getProp(child, 'enter', props),\n exit: getProp(child, 'exit', props)\n });\n });\n}\n\nfunction getNextChildMapping(nextProps, prevChildMapping, onExited) {\n var nextChildMapping = getChildMapping(nextProps.children);\n var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n Object.keys(children).forEach(function (key) {\n var child = children[key];\n if (!(0, _react.isValidElement)(child)) return;\n var hasPrev = key in prevChildMapping;\n var hasNext = key in nextChildMapping;\n var prevChild = prevChildMapping[key];\n var isLeaving = (0, _react.isValidElement)(prevChild) && !prevChild.props.in; // item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)) {\n // console.log('entering', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n } else if (!hasNext && hasPrev && !isLeaving) {\n // item is old (exiting)\n // console.log('leaving', key)\n children[key] = (0, _react.cloneElement)(child, {\n in: false\n });\n } else if (hasNext && hasPrev && (0, _react.isValidElement)(prevChild)) {\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: prevChild.props.in,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n }\n });\n return children;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = matches;\n\nvar _inDOM = _interopRequireDefault(require(\"../util/inDOM\"));\n\nvar _querySelectorAll = _interopRequireDefault(require(\"./querySelectorAll\"));\n\nvar matchesCache;\n\nfunction matches(node, selector) {\n if (!matchesCache && _inDOM.default) {\n var body = document.body;\n var nativeMatch = body.matches || body.matchesSelector || body.webkitMatchesSelector || body.mozMatchesSelector || body.msMatchesSelector;\n matchesCache = nativeMatch ? function (node, selector) {\n return nativeMatch.call(node, selector);\n } : ie8MatchesSelector;\n }\n\n return matchesCache ? matchesCache(node, selector) : null;\n}\n\nfunction ie8MatchesSelector(node, selector) {\n var matches = (0, _querySelectorAll.default)(node.document || node.ownerDocument, selector),\n i = 0;\n\n while (matches[i] && matches[i] !== node) {\n i++;\n }\n\n return !!matches[i];\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _reactDom = require(\"react-dom\");\n\nvar _Input = _interopRequireDefault(require(\"./Input\"));\n\nvar _localizers = require(\"./util/localizers\");\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\n\nvar Props = _interopRequireWildcard(require(\"./util/Props\"));\n\nvar _class, _class2, _temp;\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar DateTimePickerInput = (0, _reactLifecyclesCompat.polyfill)(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(DateTimePickerInput, _React$Component);\n\n function DateTimePickerInput() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.state = {};\n\n _this.handleBlur = function (event) {\n var _this$props = _this.props,\n format = _this$props.format,\n culture = _this$props.culture,\n parse = _this$props.parse,\n onChange = _this$props.onChange,\n onBlur = _this$props.onBlur;\n onBlur && onBlur(event);\n\n if (_this._needsFlush) {\n var date = parse(event.target.value);\n var dateIsInvalid = event.target.value != '' && date == null;\n\n if (dateIsInvalid) {\n _this.setState({\n textValue: ''\n });\n }\n\n _this._needsFlush = false;\n onChange(date, formatDate(date, format, culture));\n }\n };\n\n _this.handleChange = function (_ref) {\n var value = _ref.target.value;\n _this._needsFlush = true;\n\n _this.setState({\n textValue: value\n });\n };\n\n return _this;\n }\n\n DateTimePickerInput.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var value = nextProps.value,\n editing = nextProps.editing,\n editFormat = nextProps.editFormat,\n format = nextProps.format,\n culture = nextProps.culture;\n var textValue = formatDate(value, editing && editFormat ? editFormat : format, culture);\n if (prevState.lastValueFromProps !== textValue) return {\n textValue: textValue,\n lastValueFromProps: textValue\n };\n return null;\n };\n\n var _proto = DateTimePickerInput.prototype;\n\n _proto.focus = function focus() {\n (0, _reactDom.findDOMNode)(this).focus();\n };\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n disabled = _this$props2.disabled,\n readOnly = _this$props2.readOnly;\n var textValue = this.state.textValue;\n var props = Props.omitOwn(this);\n return _react.default.createElement(_Input.default, _extends({}, props, {\n type: \"text\",\n className: \"rw-widget-input\",\n value: textValue,\n disabled: disabled,\n readOnly: readOnly,\n onChange: this.handleChange,\n onBlur: this.handleBlur\n }));\n };\n\n return DateTimePickerInput;\n}(_react.default.Component), _class2.propTypes = {\n format: CustomPropTypes.dateFormat.isRequired,\n editing: _propTypes.default.bool,\n editFormat: CustomPropTypes.dateFormat,\n parse: _propTypes.default.func.isRequired,\n value: _propTypes.default.instanceOf(Date),\n onChange: _propTypes.default.func.isRequired,\n onBlur: _propTypes.default.func,\n culture: _propTypes.default.string,\n disabled: CustomPropTypes.disabled,\n readOnly: CustomPropTypes.disabled\n}, _temp)) || _class;\n\nvar _default = DateTimePickerInput;\nexports.default = _default;\n\nfunction isValid(d) {\n return !isNaN(d.getTime());\n}\n\nfunction formatDate(date, format, culture) {\n var val = '';\n if (date instanceof Date && isValid(date)) val = _localizers.date.format(date, format, culture);\n return val;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nInput.propTypes = {\n disabled: _propTypes.default.bool,\n readOnly: _propTypes.default.bool,\n value: _propTypes.default.string,\n type: _propTypes.default.string,\n tabIndex: _propTypes.default.string,\n component: _propTypes.default.any,\n nodeRef: _propTypes.default.func\n};\n\nfunction Input(_ref) {\n var className = _ref.className,\n disabled = _ref.disabled,\n readOnly = _ref.readOnly,\n value = _ref.value,\n tabIndex = _ref.tabIndex,\n nodeRef = _ref.nodeRef,\n _ref$type = _ref.type,\n type = _ref$type === void 0 ? 'text' : _ref$type,\n _ref$component = _ref.component,\n Component = _ref$component === void 0 ? 'input' : _ref$component,\n props = _objectWithoutProperties(_ref, [\"className\", \"disabled\", \"readOnly\", \"value\", \"tabIndex\", \"nodeRef\", \"type\", \"component\"]);\n\n return _react.default.createElement(Component, _extends({}, props, {\n type: type,\n ref: nodeRef,\n tabIndex: tabIndex || 0,\n autoComplete: \"off\",\n disabled: disabled,\n readOnly: readOnly,\n \"aria-disabled\": disabled,\n \"aria-readonly\": readOnly,\n value: value == null ? '' : value,\n className: (0, _classnames.default)(className, 'rw-input')\n }));\n}\n\nvar _default = Input;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _List = _interopRequireDefault(require(\"./List\"));\n\nvar _dates = _interopRequireDefault(require(\"./util/dates\"));\n\nvar _reduceToListState = _interopRequireDefault(require(\"./util/reduceToListState\"));\n\nvar _localizers = require(\"./util/localizers\");\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\n\nvar _class, _class2, _temp;\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nvar format = function format(props) {\n return _localizers.date.getFormat('time', props.format);\n};\n\nvar accessors = {\n text: function text(item) {\n return item.label;\n },\n value: function value(item) {\n return item.date;\n }\n};\n\nvar find = function find(arr, fn) {\n for (var i = 0; i < arr.length; i++) {\n if (fn(arr[i])) return arr[i];\n }\n\n return null;\n};\n\nfunction getBounds(_ref) {\n var min = _ref.min,\n max = _ref.max,\n currentDate = _ref.currentDate,\n value = _ref.value,\n preserveDate = _ref.preserveDate;\n\n //compare just the time regradless of whether they fall on the same day\n if (!preserveDate) {\n var _start = _dates.default.startOf(_dates.default.merge(new Date(), min, currentDate), 'minutes');\n\n var _end = _dates.default.startOf(_dates.default.merge(new Date(), max, currentDate), 'minutes');\n\n if (_dates.default.lte(_end, _start) && _dates.default.gt(max, min, 'day')) _end = _dates.default.tomorrow();\n return {\n min: _start,\n max: _end\n };\n }\n\n var start = _dates.default.today();\n\n var end = _dates.default.tomorrow();\n\n value = value || currentDate || start; //date parts are equal\n\n return {\n min: _dates.default.eq(value, min, 'day') ? _dates.default.merge(start, min, currentDate) : start,\n max: _dates.default.eq(value, max, 'day') ? _dates.default.merge(start, max, currentDate) : end\n };\n}\n\nfunction getDates(_ref2) {\n var step = _ref2.step,\n culture = _ref2.culture,\n props = _objectWithoutProperties(_ref2, [\"step\", \"culture\"]);\n\n var times = [];\n\n var _getBounds = getBounds(props),\n min = _getBounds.min,\n max = _getBounds.max;\n\n var startDay = _dates.default.date(min);\n\n while (_dates.default.date(min) === startDay && _dates.default.lte(min, max)) {\n times.push({\n date: min,\n label: _localizers.date.format(min, format(props), culture)\n });\n min = _dates.default.add(min, step || 30, 'minutes');\n }\n\n return times;\n}\n\nvar TimeList = (0, _reactLifecyclesCompat.polyfill)(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(TimeList, _React$Component);\n\n function TimeList() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.state = {};\n\n _this.handleKeyDown = function (e) {\n var key = e.key;\n var _this$state = _this.state,\n focusedItem = _this$state.focusedItem,\n list = _this$state.list;\n\n if (key === 'End') {\n e.preventDefault();\n\n _this.setState({\n focusedItem: list.last()\n });\n } else if (key === 'Home') {\n e.preventDefault();\n\n _this.setState({\n focusedItem: list.first()\n });\n } else if (key === 'Enter') {\n _this.props.onSelect(focusedItem);\n } else if (key === 'ArrowDown') {\n e.preventDefault();\n\n _this.setState({\n focusedItem: list.next(focusedItem)\n });\n } else if (key === 'ArrowUp') {\n e.preventDefault();\n\n _this.setState({\n focusedItem: list.prev(focusedItem)\n });\n }\n };\n\n return _this;\n }\n\n TimeList.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var value = nextProps.value,\n currentDate = nextProps.currentDate,\n step = nextProps.step;\n var data = getDates(nextProps);\n var currentValue = value || currentDate;\n var valueChanged = !prevState.lastValue || !_dates.default.eq(currentValue, prevState.lastValue, 'minutes');\n var list = (0, _reduceToListState.default)(data, prevState.list, {\n nextProps: nextProps\n });\n var selectedItem = find(data, function (t) {\n return _dates.default.eq(t.date, currentValue, 'minutes');\n });\n var closestDate = find(data, function (t) {\n return Math.abs(_dates.default.diff(t.date, currentValue, 'minutes')) < step;\n });\n return {\n data: data,\n list: list,\n lastValue: currentValue,\n selectedItem: list.nextEnabled(selectedItem),\n focusedItem: valueChanged || !prevState.focusedItem ? list.nextEnabled(selectedItem || closestDate || data[0]) : find(data, function (t) {\n return _dates.default.eq(t.date, prevState.focusedItem.date, 'minutes');\n })\n };\n };\n\n var _proto = TimeList.prototype;\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.unmounted = true;\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n listProps = _this$props.listProps,\n props = _objectWithoutProperties(_this$props, [\"listProps\"]);\n\n var _this$state2 = this.state,\n data = _this$state2.data,\n list = _this$state2.list,\n focusedItem = _this$state2.focusedItem,\n selectedItem = _this$state2.selectedItem;\n delete props.currentDate;\n delete props.min;\n delete props.max;\n delete props.step;\n delete props.format;\n delete props.culture;\n delete props.preserveDate;\n delete props.value;\n return _react.default.createElement(_List.default, _extends({}, props, listProps, {\n data: data,\n dataState: list.dataState,\n isDisabled: list.isDisabled,\n textAccessor: accessors.text,\n valueAccessor: accessors.value,\n selectedItem: selectedItem,\n focusedItem: focusedItem\n }));\n };\n\n return TimeList;\n}(_react.default.Component), _class2.defaultProps = {\n step: 30,\n currentDate: new Date(),\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n preserveDate: true\n}, _class2.propTypes = {\n value: _propTypes.default.instanceOf(Date),\n step: _propTypes.default.number,\n min: _propTypes.default.instanceOf(Date),\n max: _propTypes.default.instanceOf(Date),\n currentDate: _propTypes.default.instanceOf(Date),\n itemComponent: CustomPropTypes.elementType,\n listProps: _propTypes.default.object,\n format: CustomPropTypes.dateFormat,\n onSelect: _propTypes.default.func,\n preserveDate: _propTypes.default.bool,\n culture: _propTypes.default.string\n}, _temp)) || _class;\n\nvar _default = TimeList;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar propTypes = {\n className: _propTypes.default.string,\n component: _propTypes.default.string\n};\n\nfunction ListOptionGroup(_ref) {\n var children = _ref.children,\n className = _ref.className,\n _ref$component = _ref.component,\n component = _ref$component === void 0 ? 'li' : _ref$component;\n var Tag = component;\n return _react.default.createElement(Tag, {\n tabIndex: \"-1\",\n role: \"separator\",\n className: (0, _classnames.default)(className, 'rw-list-optgroup')\n }, children);\n}\n\nListOptionGroup.propTypes = propTypes;\nvar _default = ListOptionGroup;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = scrollTo;\n\nvar _offset = _interopRequireDefault(require(\"../query/offset\"));\n\nvar _height = _interopRequireDefault(require(\"../query/height\"));\n\nvar _scrollParent = _interopRequireDefault(require(\"../query/scrollParent\"));\n\nvar _scrollTop = _interopRequireDefault(require(\"../query/scrollTop\"));\n\nvar _requestAnimationFrame = _interopRequireDefault(require(\"./requestAnimationFrame\"));\n\nvar _isWindow = _interopRequireDefault(require(\"../query/isWindow\"));\n\nfunction scrollTo(selected, scrollParent) {\n var offset = (0, _offset.default)(selected);\n var poff = {\n top: 0,\n left: 0\n };\n var list, listScrollTop, selectedTop, isWin;\n var selectedHeight, listHeight, bottom;\n if (!selected) return;\n list = scrollParent || (0, _scrollParent.default)(selected);\n isWin = (0, _isWindow.default)(list);\n listScrollTop = (0, _scrollTop.default)(list);\n listHeight = (0, _height.default)(list, true);\n isWin = (0, _isWindow.default)(list);\n if (!isWin) poff = (0, _offset.default)(list);\n offset = {\n top: offset.top - poff.top,\n left: offset.left - poff.left,\n height: offset.height,\n width: offset.width\n };\n selectedHeight = offset.height;\n selectedTop = offset.top + (isWin ? 0 : listScrollTop);\n bottom = selectedTop + selectedHeight;\n listScrollTop = listScrollTop > selectedTop ? selectedTop : bottom > listScrollTop + listHeight ? bottom - listHeight : listScrollTop;\n var id = (0, _requestAnimationFrame.default)(function () {\n return (0, _scrollTop.default)(list, listScrollTop);\n });\n return function () {\n return _requestAnimationFrame.default.cancel(id);\n };\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = scrollPrarent;\n\nvar _style = _interopRequireDefault(require(\"../style\"));\n\nvar _height = _interopRequireDefault(require(\"./height\"));\n\nfunction scrollPrarent(node) {\n var position = (0, _style.default)(node, 'position'),\n excludeStatic = position === 'absolute',\n ownerDoc = node.ownerDocument;\n if (position === 'fixed') return ownerDoc || document;\n\n while ((node = node.parentNode) && node.nodeType !== 9) {\n var isStatic = excludeStatic && (0, _style.default)(node, 'position') === 'static',\n style = (0, _style.default)(node, 'overflow') + (0, _style.default)(node, 'overflow-y') + (0, _style.default)(node, 'overflow-x');\n if (isStatic) continue;\n if (/(auto|scroll)/.test(style) && (0, _height.default)(node) < node.scrollHeight) return node;\n }\n\n return document;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = scrollTop;\n\nvar _isWindow = _interopRequireDefault(require(\"./isWindow\"));\n\nfunction scrollTop(node, val) {\n var win = (0, _isWindow.default)(node);\n if (val === undefined) return win ? 'pageYOffset' in win ? win.pageYOffset : win.document.documentElement.scrollTop : node.scrollTop;\n if (win) win.scrollTo('pageXOffset' in win ? win.pageXOffset : win.document.documentElement.scrollLeft, val);else node.scrollTop = val;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inDOM = _interopRequireDefault(require(\"./inDOM\"));\n\nvar vendors = ['', 'webkit', 'moz', 'o', 'ms'];\nvar cancel = 'clearTimeout';\nvar raf = fallback;\nvar compatRaf;\n\nvar getKey = function getKey(vendor, k) {\n return vendor + (!vendor ? k : k[0].toUpperCase() + k.substr(1)) + 'AnimationFrame';\n};\n\nif (_inDOM.default) {\n vendors.some(function (vendor) {\n var rafKey = getKey(vendor, 'request');\n\n if (rafKey in window) {\n cancel = getKey(vendor, 'cancel');\n return raf = function raf(cb) {\n return window[rafKey](cb);\n };\n }\n });\n}\n/* https://github.com/component/raf */\n\n\nvar prev = new Date().getTime();\n\nfunction fallback(fn) {\n var curr = new Date().getTime(),\n ms = Math.max(0, 16 - (curr - prev)),\n req = setTimeout(fn, ms);\n prev = curr;\n return req;\n}\n\ncompatRaf = function compatRaf(cb) {\n return raf(cb);\n};\n\ncompatRaf.cancel = function (id) {\n window[cancel] && typeof window[cancel] === 'function' && window[cancel](id);\n};\n\nvar _default = compatRaf;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Listbox = _interopRequireDefault(require(\"./Listbox\"));\n\nvar _ListOption = _interopRequireDefault(require(\"./ListOption\"));\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\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\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nvar propTypes = {\n searchTerm: PropTypes.string,\n focused: PropTypes.bool,\n onSelect: PropTypes.func.isRequired,\n activeId: PropTypes.string\n};\n\nfunction AddToListOption(_ref) {\n var searchTerm = _ref.searchTerm,\n onSelect = _ref.onSelect,\n focused = _ref.focused,\n children = _ref.children,\n activeId = _ref.activeId,\n props = _objectWithoutProperties(_ref, [\"searchTerm\", \"onSelect\", \"focused\", \"children\", \"activeId\"]);\n\n return _react.default.createElement(_Listbox.default, _extends({}, props, {\n className: \"rw-list-option-create\"\n }), _react.default.createElement(_ListOption.default, {\n onSelect: onSelect,\n focused: focused,\n activeId: activeId,\n dataItem: searchTerm\n }, children));\n}\n\nAddToListOption.propTypes = propTypes;\nvar _default = AddToListOption;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar CustomPropTypes = _interopRequireWildcard(require(\"./util/PropTypes\"));\n\nvar _dataHelpers = require(\"./util/dataHelpers\");\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar DropdownListInput =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(DropdownListInput, _React$Component);\n\n function DropdownListInput() {\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.state = {\n autofilling: false\n };\n\n _this.handleAutofillDetect = function (_ref) {\n var animationName = _ref.animationName;\n var autofilling;\n if (animationName === 'react-widgets-autofill-start') autofilling = true;else if (animationName === 'react-widgets-autofill-cancel') autofilling = false;else return;\n\n _this.setState({\n autofilling: autofilling\n });\n\n _this.props.onAutofill(autofilling);\n };\n\n _this.handleAutofill = function (e) {\n _this.setState({\n autofilling: false\n });\n\n _this.props.onAutofillChange(e);\n };\n\n return _this;\n }\n\n var _proto = DropdownListInput.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n name = _this$props.name,\n placeholder = _this$props.placeholder,\n value = _this$props.value,\n textField = _this$props.textField,\n autoComplete = _this$props.autoComplete,\n Component = _this$props.valueComponent;\n var autofilling = this.state.autofilling;\n var child = null;\n\n if (!autofilling && autoComplete !== 'off') {\n child = !value && placeholder ? _react.default.createElement(\"span\", {\n className: \"rw-placeholder\"\n }, placeholder) : Component ? _react.default.createElement(Component, {\n item: value\n }) : (0, _dataHelpers.dataText)(value, textField);\n }\n\n var val = (0, _dataHelpers.dataValue)(value, textField);\n return _react.default.createElement(\"div\", {\n className: \"rw-input rw-dropdown-list-input\"\n }, autoComplete !== 'off' && _react.default.createElement(\"input\", {\n tabIndex: \"-1\",\n name: name,\n value: val == null ? '' : val,\n autoComplete: autoComplete,\n onChange: this.handleAutofill,\n onAnimationStart: this.handleAutofillDetect,\n className: (0, _classnames.default)('rw-dropdown-list-autofill rw-detect-autofill', !autofilling && 'rw-sr')\n }), child);\n };\n\n return DropdownListInput;\n}(_react.default.Component);\n\nDropdownListInput.propTypes = {\n value: _propTypes.default.any,\n placeholder: _propTypes.default.string,\n name: _propTypes.default.string,\n autoComplete: _propTypes.default.string,\n textField: CustomPropTypes.accessor,\n valueComponent: CustomPropTypes.elementType,\n onAutofill: _propTypes.default.func.isRequired,\n onAutofillChange: _propTypes.default.func.isRequired\n};\nvar _default = DropdownListInput;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = createAccessors;\n\nvar helpers = _interopRequireWildcard(require(\"./dataHelpers\"));\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction createAccessors(_ref) {\n var textField = _ref.textField,\n valueField = _ref.valueField;\n return {\n text: function text(item) {\n return helpers.dataText(item, textField);\n },\n value: function value(item) {\n return helpers.dataValue(item, valueField);\n },\n indexOf: function indexOf(data, item) {\n return helpers.dataIndexOf(data, item, valueField);\n },\n matches: function matches(a, b) {\n return helpers.valueMatcher(a, b, valueField);\n },\n findOrSelf: function findOrSelf(data, item) {\n return helpers.dataItem(data, item, valueField);\n },\n includes: function includes(data, item) {\n return helpers.dataIndexOf(data, item, valueField) !== -1;\n }\n };\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar localizers = _interopRequireWildcard(require(\"./util/localizers\"));\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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nvar _default = {\n setLocalizers: function setLocalizers(_ref) {\n var date = _ref.date,\n number = _ref.number;\n date && this.setDateLocalizer(date);\n number && this.setNumberLocalizer(number);\n },\n setDateLocalizer: localizers.setDate,\n setNumberLocalizer: localizers.setNumber\n};\nexports.default = _default;\nmodule.exports = exports[\"default\"];","var React = require('react');\nvar ReactDOM = require('react-dom');\nvar DOMFactories = require('react-dom-factories');\nvar PropTypes = require('prop-types');\nvar ExecutionEnvironment = require('exenv');\nvar ModalPortal = React.createFactory(require('./ModalPortal'));\nvar ariaAppHider = require('../helpers/ariaAppHider');\nvar refCount = require('../helpers/refCount');\nvar elementClass = require('element-class');\nvar renderSubtreeIntoContainer = require(\"react-dom\").unstable_renderSubtreeIntoContainer;\nvar Assign = require('lodash.assign');\nvar createReactClass = require('create-react-class');\n\nvar SafeHTMLElement = ExecutionEnvironment.canUseDOM ? window.HTMLElement : {};\nvar AppElement = ExecutionEnvironment.canUseDOM ? document.body : {appendChild: function() {}};\n\nfunction getParentElement(parentSelector) {\n return parentSelector();\n}\n\nvar Modal = createReactClass({\n\n displayName: 'Modal',\n statics: {\n setAppElement: function(element) {\n AppElement = ariaAppHider.setElement(element);\n },\n injectCSS: function() {\n \"production\" !== process.env.NODE_ENV\n && console.warn('React-Modal: injectCSS has been deprecated ' +\n 'and no longer has any effect. It will be removed in a later version');\n }\n },\n\n propTypes: {\n isOpen: PropTypes.bool.isRequired,\n style: PropTypes.shape({\n content: PropTypes.object,\n overlay: PropTypes.object\n }),\n portalClassName: PropTypes.string,\n bodyOpenClassName: PropTypes.string,\n appElement: PropTypes.instanceOf(SafeHTMLElement),\n onAfterOpen: PropTypes.func,\n onRequestClose: PropTypes.func,\n closeTimeoutMS: PropTypes.number,\n ariaHideApp: PropTypes.bool,\n shouldCloseOnOverlayClick: PropTypes.bool,\n parentSelector: PropTypes.func,\n role: PropTypes.string,\n contentLabel: PropTypes.string.isRequired\n },\n\n getDefaultProps: function () {\n return {\n isOpen: false,\n portalClassName: 'ReactModalPortal',\n bodyOpenClassName: 'ReactModal__Body--open',\n ariaHideApp: true,\n closeTimeoutMS: 0,\n shouldCloseOnOverlayClick: true,\n parentSelector: function () { return document.body; }\n };\n },\n\n componentDidMount: function() {\n this.node = document.createElement('div');\n this.node.className = this.props.portalClassName;\n\n if (this.props.isOpen) refCount.add(this);\n\n var parent = getParentElement(this.props.parentSelector);\n parent.appendChild(this.node);\n this.renderPortal(this.props);\n },\n\n componentWillUpdate: function(newProps) {\n if(newProps.portalClassName !== this.props.portalClassName) {\n this.node.className = newProps.portalClassName;\n }\n },\n\n componentWillReceiveProps: function(newProps) {\n if (newProps.isOpen) refCount.add(this);\n if (!newProps.isOpen) refCount.remove(this);\n var currentParent = getParentElement(this.props.parentSelector);\n var newParent = getParentElement(newProps.parentSelector);\n\n if(newParent !== currentParent) {\n currentParent.removeChild(this.node);\n newParent.appendChild(this.node);\n }\n\n this.renderPortal(newProps);\n },\n\n componentWillUnmount: function() {\n if (!this.node) return;\n\n refCount.remove(this);\n\n if (this.props.ariaHideApp) {\n ariaAppHider.show(this.props.appElement);\n }\n\n var state = this.portal.state;\n var now = Date.now();\n var closesAt = state.isOpen && this.props.closeTimeoutMS\n && (state.closesAt\n || now + this.props.closeTimeoutMS);\n\n if (closesAt) {\n if (!state.beforeClose) {\n this.portal.closeWithTimeout();\n }\n\n var that = this;\n setTimeout(function() { that.removePortal(); }, closesAt - now);\n } else {\n this.removePortal();\n }\n },\n\n removePortal: function() {\n ReactDOM.unmountComponentAtNode(this.node);\n var parent = getParentElement(this.props.parentSelector);\n parent.removeChild(this.node);\n\n if (refCount.count() === 0) {\n elementClass(document.body).remove(this.props.bodyOpenClassName);\n }\n },\n\n renderPortal: function(props) {\n if (props.isOpen || refCount.count() > 0) {\n elementClass(document.body).add(this.props.bodyOpenClassName);\n } else {\n elementClass(document.body).remove(this.props.bodyOpenClassName);\n }\n\n if (props.ariaHideApp) {\n ariaAppHider.toggle(props.isOpen, props.appElement);\n }\n\n this.portal = renderSubtreeIntoContainer(this, ModalPortal(Assign({}, props, {defaultStyles: Modal.defaultStyles})), this.node);\n },\n\n render: function () {\n return DOMFactories.noscript();\n }\n});\n\nModal.defaultStyles = {\n overlay: {\n position : 'fixed',\n top : 0,\n left : 0,\n right : 0,\n bottom : 0,\n backgroundColor : 'rgba(255, 255, 255, 0.75)'\n },\n content: {\n position : 'absolute',\n top : '40px',\n left : '40px',\n right : '40px',\n bottom : '40px',\n border : '1px solid #ccc',\n background : '#fff',\n overflow : 'auto',\n WebkitOverflowScrolling : 'touch',\n borderRadius : '4px',\n outline : 'none',\n padding : '20px'\n }\n}\n\nmodule.exports = Modal\n","/*!\n Copyright (c) 2015 Jed Watson.\n Based on code that is Copyright 2013-2015, Facebook, Inc.\n All rights reserved.\n*/\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","var React = require('react');\nvar DOMFactories = require('react-dom-factories');\nvar focusManager = require('../helpers/focusManager');\nvar scopeTab = require('../helpers/scopeTab');\nvar Assign = require('lodash.assign');\nvar createReactClass = require('create-react-class');\n\nvar div = DOMFactories.div;\n\n// so that our CSS is statically analyzable\nvar CLASS_NAMES = {\n overlay: 'ReactModal__Overlay',\n content: 'ReactModal__Content'\n};\n\nvar ModalPortal = module.exports = createReactClass({\n\n displayName: 'ModalPortal',\n shouldClose: null,\n\n getDefaultProps: function() {\n return {\n style: {\n overlay: {},\n content: {}\n }\n };\n },\n\n getInitialState: function() {\n return {\n afterOpen: false,\n beforeClose: false\n };\n },\n\n componentDidMount: function() {\n // Focus needs to be set when mounting and already open\n if (this.props.isOpen) {\n this.setFocusAfterRender(true);\n this.open();\n }\n },\n\n componentWillUnmount: function() {\n clearTimeout(this.closeTimer);\n },\n\n componentWillReceiveProps: function(newProps) {\n // Focus only needs to be set once when the modal is being opened\n if (!this.props.isOpen && newProps.isOpen) {\n this.setFocusAfterRender(true);\n this.open();\n } else if (this.props.isOpen && !newProps.isOpen) {\n this.close();\n }\n },\n\n componentDidUpdate: function () {\n if (this.focusAfterRender) {\n this.focusContent();\n this.setFocusAfterRender(false);\n }\n },\n\n setFocusAfterRender: function (focus) {\n this.focusAfterRender = focus;\n },\n\n afterClose: function () {\n focusManager.returnFocus();\n focusManager.teardownScopedFocus();\n },\n\n open: function () {\n if (this.state.afterOpen && this.state.beforeClose) {\n clearTimeout(this.closeTimer);\n this.setState({ beforeClose: false });\n } else {\n focusManager.setupScopedFocus(this.node);\n focusManager.markForFocusLater();\n this.setState({isOpen: true}, function() {\n this.setState({afterOpen: true});\n\n if (this.props.isOpen && this.props.onAfterOpen) {\n this.props.onAfterOpen();\n }\n }.bind(this));\n }\n },\n\n close: function() {\n if (this.props.closeTimeoutMS > 0)\n this.closeWithTimeout();\n else\n this.closeWithoutTimeout();\n },\n\n focusContent: function() {\n // Don't steal focus from inner elements\n if (!this.contentHasFocus()) {\n this.refs.content.focus();\n }\n },\n\n closeWithTimeout: function() {\n var closesAt = Date.now() + this.props.closeTimeoutMS;\n this.setState({beforeClose: true, closesAt: closesAt}, function() {\n this.closeTimer = setTimeout(this.closeWithoutTimeout, this.state.closesAt - Date.now());\n }.bind(this));\n },\n\n closeWithoutTimeout: function() {\n this.setState({\n beforeClose: false,\n isOpen: false,\n afterOpen: false,\n closesAt: null\n }, this.afterClose);\n },\n\n handleKeyDown: function(event) {\n if (event.keyCode == 9 /*tab*/) scopeTab(this.refs.content, event);\n if (event.keyCode == 27 /*esc*/) {\n event.preventDefault();\n this.requestClose(event);\n }\n },\n\n handleOverlayOnClick: function (event) {\n if (this.shouldClose === null) {\n this.shouldClose = true;\n }\n\n if (this.shouldClose && this.props.shouldCloseOnOverlayClick) {\n if (this.ownerHandlesClose())\n this.requestClose(event);\n else\n this.focusContent();\n }\n this.shouldClose = null;\n },\n\n handleContentOnClick: function () {\n this.shouldClose = false;\n },\n\n requestClose: function(event) {\n if (this.ownerHandlesClose())\n this.props.onRequestClose(event);\n },\n\n ownerHandlesClose: function() {\n return this.props.onRequestClose;\n },\n\n shouldBeClosed: function() {\n return !this.state.isOpen && !this.state.beforeClose;\n },\n\n contentHasFocus: function() {\n return document.activeElement === this.refs.content || this.refs.content.contains(document.activeElement);\n },\n\n buildClassName: function(which, additional) {\n var classNames = (typeof additional === 'object') ? additional : {\n base: CLASS_NAMES[which],\n afterOpen: CLASS_NAMES[which] + \"--after-open\",\n beforeClose: CLASS_NAMES[which] + \"--before-close\"\n };\n var className = classNames.base;\n if (this.state.afterOpen) { className += \" \" + classNames.afterOpen; }\n if (this.state.beforeClose) { className += \" \" + classNames.beforeClose; }\n return (typeof additional === 'string' && additional) ? [className, additional].join(\" \") : className;\n },\n\n render: function() {\n var contentStyles = (this.props.className) ? {} : this.props.defaultStyles.content;\n var overlayStyles = (this.props.overlayClassName) ? {} : this.props.defaultStyles.overlay;\n\n return this.shouldBeClosed() ? div() : (\n div({\n ref: \"overlay\",\n className: this.buildClassName('overlay', this.props.overlayClassName),\n style: Assign({}, overlayStyles, this.props.style.overlay || {}),\n onClick: this.handleOverlayOnClick\n },\n div({\n ref: \"content\",\n style: Assign({}, contentStyles, this.props.style.content || {}),\n className: this.buildClassName('content', this.props.className),\n tabIndex: \"-1\",\n onKeyDown: this.handleKeyDown,\n onClick: this.handleContentOnClick,\n role: this.props.role,\n \"aria-label\": this.props.contentLabel\n },\n this.props.children\n )\n )\n );\n }\n});\n","var findTabbable = require('../helpers/tabbable');\nvar focusLaterElements = [];\nvar modalElement = null;\nvar needToFocus = false;\n\nfunction handleBlur(event) {\n needToFocus = true;\n}\n\nfunction handleFocus(event) {\n if (needToFocus) {\n needToFocus = false;\n if (!modalElement) {\n return;\n }\n // need to see how jQuery shims document.on('focusin') so we don't need the\n // setTimeout, firefox doesn't support focusin, if it did, we could focus\n // the element outside of a setTimeout. Side-effect of this implementation\n // is that the document.body gets focus, and then we focus our element right\n // after, seems fine.\n setTimeout(function() {\n if (modalElement.contains(document.activeElement))\n return;\n var el = (findTabbable(modalElement)[0] || modalElement);\n el.focus();\n }, 0);\n }\n}\n\nexports.markForFocusLater = function() {\n focusLaterElements.push(document.activeElement);\n};\n\nexports.returnFocus = function() {\n var toFocus = null;\n try {\n toFocus = focusLaterElements.pop();\n toFocus.focus();\n return;\n }\n catch (e) {\n console.warn('You tried to return focus to '+toFocus+' but it is not in the DOM anymore');\n }\n};\n\nexports.setupScopedFocus = function(element) {\n modalElement = element;\n\n if (window.addEventListener) {\n window.addEventListener('blur', handleBlur, false);\n document.addEventListener('focus', handleFocus, true);\n } else {\n window.attachEvent('onBlur', handleBlur);\n document.attachEvent('onFocus', handleFocus);\n }\n};\n\nexports.teardownScopedFocus = function() {\n modalElement = null;\n\n if (window.addEventListener) {\n window.removeEventListener('blur', handleBlur);\n document.removeEventListener('focus', handleFocus);\n } else {\n window.detachEvent('onBlur', handleBlur);\n document.detachEvent('onFocus', handleFocus);\n }\n};\n","var findTabbable = require('../helpers/tabbable');\n\nmodule.exports = function(node, event) {\n var tabbable = findTabbable(node);\n if (!tabbable.length) {\n event.preventDefault();\n return;\n }\n var finalTabbable = tabbable[event.shiftKey ? 0 : tabbable.length - 1];\n var leavingFinalTabbable = (\n finalTabbable === document.activeElement ||\n // handle immediate shift+tab after opening with mouse\n node === document.activeElement\n );\n if (!leavingFinalTabbable) return;\n event.preventDefault();\n var target = tabbable[event.shiftKey ? tabbable.length - 1 : 0];\n target.focus();\n};\n","var _element = typeof document !== 'undefined' ? document.body : null;\n\nfunction setElement(element) {\n if (typeof element === 'string') {\n var el = document.querySelectorAll(element);\n element = 'length' in el ? el[0] : el;\n }\n _element = element || _element;\n return _element;\n}\n\nfunction hide(appElement) {\n validateElement(appElement);\n (appElement || _element).setAttribute('aria-hidden', 'true');\n}\n\nfunction show(appElement) {\n validateElement(appElement);\n (appElement || _element).removeAttribute('aria-hidden');\n}\n\nfunction toggle(shouldHide, appElement) {\n if (shouldHide)\n hide(appElement);\n else\n show(appElement);\n}\n\nfunction validateElement(appElement) {\n if (!appElement && !_element)\n throw new Error('react-modal: You must set an element with `Modal.setAppElement(el)` to make this accessible');\n}\n\nfunction resetForTesting() {\n _element = document.body;\n}\n\nexports.toggle = toggle;\nexports.setElement = setElement;\nexports.show = show;\nexports.hide = hide;\nexports.resetForTesting = resetForTesting;\n","var modals = [];\n\nmodule.exports = {\n add: function (element) {\n if (modals.indexOf(element) === -1) {\n modals.push(element);\n }\n },\n remove: function (element) {\n var index = modals.indexOf(element);\n if (index === -1) {\n return;\n }\n modals.splice(index, 1);\n },\n count: function () {\n return modals.length;\n }\n};\n","module.exports = function(opts) {\n return new ElementClass(opts)\n}\n\nfunction indexOf(arr, prop) {\n if (arr.indexOf) return arr.indexOf(prop)\n for (var i = 0, len = arr.length; i < len; i++)\n if (arr[i] === prop) return i\n return -1\n}\n\nfunction ElementClass(opts) {\n if (!(this instanceof ElementClass)) return new ElementClass(opts)\n var self = this\n if (!opts) opts = {}\n\n // similar doing instanceof HTMLElement but works in IE8\n if (opts.nodeType) opts = {el: opts}\n\n this.opts = opts\n this.el = opts.el || document.body\n if (typeof this.el !== 'object') this.el = document.querySelector(this.el)\n}\n\nElementClass.prototype.add = function(className) {\n var el = this.el\n if (!el) return\n if (el.className === \"\") return el.className = className\n var classes = el.className.split(' ')\n if (indexOf(classes, className) > -1) return classes\n classes.push(className)\n el.className = classes.join(' ')\n return classes\n}\n\nElementClass.prototype.remove = function(className) {\n var el = this.el\n if (!el) return\n if (el.className === \"\") return\n var classes = el.className.split(' ')\n var idx = indexOf(classes, className)\n if (idx > -1) classes.splice(idx, 1)\n el.className = classes.join(' ')\n return classes\n}\n\nElementClass.prototype.has = function(className) {\n var el = this.el\n if (!el) return\n var classes = el.className.split(' ')\n return indexOf(classes, className) > -1\n}\n\nElementClass.prototype.toggle = function(className) {\n var el = this.el\n if (!el) return\n if (this.has(className)) this.remove(className)\n else this.add(className)\n}\n","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (acequire, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof acequirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _acequire = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && acequire.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar acequire = function(module, callback) {\n var packagedModule = _acequire(\"\", module, callback);\n if (packagedModule == undefined && acequire.original)\n return acequire.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin acequires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative acequires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _acequire(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.acequire || !root.acequire.packaged) {\n acequire.original = root.acequire;\n root.acequire = acequire;\n root.acequire.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\n var real = {\n exec: RegExp.prototype.exec,\n test: RegExp.prototype.test,\n match: String.prototype.match,\n replace: String.prototype.replace,\n split: String.prototype.split\n },\n compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n compliantLastIndexIncrement = function () {\n var x = /^/g;\n real.test.call(x, \"\");\n return !x.lastIndex;\n }();\n\n if (compliantLastIndexIncrement && compliantExecNpcg)\n return;\n RegExp.prototype.exec = function (str) {\n var match = real.exec.apply(this, arguments),\n name, r2;\n if ( typeof(str) == 'string' && match) {\n if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n real.replace.call(str.slice(match.index), r2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined)\n match[i] = undefined;\n }\n });\n }\n if (this._xregexp && this._xregexp.captureNames) {\n for (var i = 1; i < match.length; i++) {\n name = this._xregexp.captureNames[i - 1];\n if (name)\n match[name] = match[i];\n }\n }\n if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n this.lastIndex--;\n }\n return match;\n };\n if (!compliantLastIndexIncrement) {\n RegExp.prototype.test = function (str) {\n var match = real.exec.call(this, str);\n if (match && this.global && !match[0].length && (this.lastIndex > match.index))\n this.lastIndex--;\n return !!match;\n };\n }\n\n function getNativeFlags (regex) {\n return (regex.global ? \"g\" : \"\") +\n (regex.ignoreCase ? \"i\" : \"\") +\n (regex.multiline ? \"m\" : \"\") +\n (regex.extended ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n (regex.sticky ? \"y\" : \"\");\n }\n\n function indexOf (array, item, from) {\n if (Array.prototype.indexOf) // Use the native array method if available\n return array.indexOf(item, from);\n for (var i = from || 0; i < array.length; i++) {\n if (array[i] === item)\n return i;\n }\n return -1;\n }\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) { // .length is 1\n var target = this;\n if (typeof target != \"function\") {\n throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n }\n var args = slice.call(arguments, 1); // for normal call\n var bound = function () {\n\n if (this instanceof bound) {\n\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n\n }\n\n };\n if(target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n return bound;\n };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n if(function() { // test IE < 9 to splice bug - see issue #138\n function makeArray(l) {\n var a = new Array(l+2);\n a[0] = a[1] = 0;\n return a;\n }\n var array = [], lengthBefore;\n \n array.splice.apply(array, makeArray(20));\n array.splice.apply(array, makeArray(26));\n\n lengthBefore = array.length; //46\n array.splice(5, 0, \"XXX\"); // add one element\n\n lengthBefore + 1 == array.length\n\n if (lengthBefore + 1 == array.length) {\n return true;// has right splice implementation without bugs\n }\n }()) {//IE 6/7\n var array_splice = Array.prototype.splice;\n Array.prototype.splice = function(start, deleteCount) {\n if (!arguments.length) {\n return [];\n } else {\n return array_splice.apply(this, [\n start === void 0 ? 0 : start,\n deleteCount === void 0 ? (this.length - start) : deleteCount\n ].concat(slice.call(arguments, 2)))\n }\n };\n } else {//IE8\n Array.prototype.splice = function(pos, removeCount){\n var length = this.length;\n if (pos > 0) {\n if (pos > length)\n pos = length;\n } else if (pos == void 0) {\n pos = 0;\n } else if (pos < 0) {\n pos = Math.max(length + pos, 0);\n }\n\n if (!(pos+removeCount < length))\n removeCount = length - pos;\n\n var removed = this.slice(pos, pos+removeCount);\n var insert = slice.call(arguments, 2);\n var add = insert.length; \n if (pos === length) {\n if (add) {\n this.push.apply(this, insert);\n }\n } else {\n var remove = Math.min(removeCount, length - pos);\n var tailOldPos = pos + remove;\n var tailNewPos = tailOldPos + add - remove;\n var tailCount = length - tailOldPos;\n var lengthAfterRemove = length - remove;\n\n if (tailNewPos < tailOldPos) { // case A\n for (var i = 0; i < tailCount; ++i) {\n this[tailNewPos+i] = this[tailOldPos+i];\n }\n } else if (tailNewPos > tailOldPos) { // case B\n for (i = tailCount; i--; ) {\n this[tailNewPos+i] = this[tailOldPos+i];\n }\n } // else, add == remove (nothing to do)\n\n if (add && pos === lengthAfterRemove) {\n this.length = lengthAfterRemove; // truncate array\n this.push.apply(this, insert);\n } else {\n this.length = lengthAfterRemove + add; // reserves space\n for (i = 0; i < add; ++i) {\n this[pos+i] = insert[i];\n }\n }\n }\n return removed;\n };\n }\n}\nif (!Array.isArray) {\n Array.isArray = function isArray(obj) {\n return _toString(obj) == \"[object Array]\";\n };\n}\nvar boxedString = Object(\"a\"),\n splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n thisp = arguments[1],\n i = -1,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(); // TODO message\n }\n\n while (++i < length) {\n if (i in self) {\n fun.call(thisp, self[i], i, object);\n }\n }\n };\n}\nif (!Array.prototype.map) {\n Array.prototype.map = function map(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n result = Array(length),\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self)\n result[i] = fun.call(thisp, self[i], i, object);\n }\n return result;\n };\n}\nif (!Array.prototype.filter) {\n Array.prototype.filter = function filter(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n result = [],\n value,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n if (fun.call(thisp, value, i, object)) {\n result.push(value);\n }\n }\n }\n return result;\n };\n}\nif (!Array.prototype.every) {\n Array.prototype.every = function every(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && !fun.call(thisp, self[i], i, object)) {\n return false;\n }\n }\n return true;\n };\n}\nif (!Array.prototype.some) {\n Array.prototype.some = function some(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && fun.call(thisp, self[i], i, object)) {\n return true;\n }\n }\n return false;\n };\n}\nif (!Array.prototype.reduce) {\n Array.prototype.reduce = function reduce(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n\n var i = 0;\n var result;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n if (++i >= length) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n } while (true);\n }\n\n for (; i < length; i++) {\n if (i in self) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n }\n\n return result;\n };\n}\nif (!Array.prototype.reduceRight) {\n Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n\n var result, i = length - 1;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n if (--i < 0) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n } while (true);\n }\n\n do {\n if (i in this) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n var self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = 0;\n if (arguments.length > 1) {\n i = toInteger(arguments[1]);\n }\n i = i >= 0 ? i : Math.max(0, length + i);\n for (; i < length; i++) {\n if (i in self && self[i] === sought) {\n return i;\n }\n }\n return -1;\n };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n var self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n var i = length - 1;\n if (arguments.length > 1) {\n i = Math.min(i, toInteger(arguments[1]));\n }\n i = i >= 0 ? i : length - Math.abs(i);\n for (; i >= 0; i--) {\n if (i in self && sought === self[i]) {\n return i;\n }\n }\n return -1;\n };\n}\nif (!Object.getPrototypeOf) {\n Object.getPrototypeOf = function getPrototypeOf(object) {\n return object.__proto__ || (\n object.constructor ?\n object.constructor.prototype :\n prototypeOfObject\n );\n };\n}\nif (!Object.getOwnPropertyDescriptor) {\n var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n \"non-object: \";\n Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT + object);\n if (!owns(object, property))\n return;\n\n var descriptor, getter, setter;\n descriptor = { enumerable: true, configurable: true };\n if (supportsAccessors) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n\n var getter = lookupGetter(object, property);\n var setter = lookupSetter(object, property);\n object.__proto__ = prototype;\n\n if (getter || setter) {\n if (getter) descriptor.get = getter;\n if (setter) descriptor.set = setter;\n return descriptor;\n }\n }\n descriptor.value = object[property];\n return descriptor;\n };\n}\nif (!Object.getOwnPropertyNames) {\n Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n return Object.keys(object);\n };\n}\nif (!Object.create) {\n var createEmpty;\n if (Object.prototype.__proto__ === null) {\n createEmpty = function () {\n return { \"__proto__\": null };\n };\n } else {\n createEmpty = function () {\n var empty = {};\n for (var i in empty)\n empty[i] = null;\n empty.constructor =\n empty.hasOwnProperty =\n empty.propertyIsEnumerable =\n empty.isPrototypeOf =\n empty.toLocaleString =\n empty.toString =\n empty.valueOf =\n empty.__proto__ = null;\n return empty;\n }\n }\n\n Object.create = function create(prototype, properties) {\n var object;\n if (prototype === null) {\n object = createEmpty();\n } else {\n if (typeof prototype != \"object\")\n throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n var Type = function () {};\n Type.prototype = prototype;\n object = new Type();\n object.__proto__ = prototype;\n }\n if (properties !== void 0)\n Object.defineProperties(object, properties);\n return object;\n };\n}\n\nfunction doesDefinePropertyWork(object) {\n try {\n Object.defineProperty(object, \"sentinel\", {});\n return \"sentinel\" in object;\n } catch (exception) {\n }\n}\nif (Object.defineProperty) {\n var definePropertyWorksOnObject = doesDefinePropertyWork({});\n var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n doesDefinePropertyWork(document.createElement(\"div\"));\n if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n var definePropertyFallback = Object.defineProperty;\n }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n \"on this javascript engine\";\n\n Object.defineProperty = function defineProperty(object, property, descriptor) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n if (definePropertyFallback) {\n try {\n return definePropertyFallback.call(Object, object, property, descriptor);\n } catch (exception) {\n }\n }\n if (owns(descriptor, \"value\")) {\n\n if (supportsAccessors && (lookupGetter(object, property) ||\n lookupSetter(object, property)))\n {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n delete object[property];\n object[property] = descriptor.value;\n object.__proto__ = prototype;\n } else {\n object[property] = descriptor.value;\n }\n } else {\n if (!supportsAccessors)\n throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n if (owns(descriptor, \"get\"))\n defineGetter(object, property, descriptor.get);\n if (owns(descriptor, \"set\"))\n defineSetter(object, property, descriptor.set);\n }\n\n return object;\n };\n}\nif (!Object.defineProperties) {\n Object.defineProperties = function defineProperties(object, properties) {\n for (var property in properties) {\n if (owns(properties, property))\n Object.defineProperty(object, property, properties[property]);\n }\n return object;\n };\n}\nif (!Object.seal) {\n Object.seal = function seal(object) {\n return object;\n };\n}\nif (!Object.freeze) {\n Object.freeze = function freeze(object) {\n return object;\n };\n}\ntry {\n Object.freeze(function () {});\n} catch (exception) {\n Object.freeze = (function freeze(freezeObject) {\n return function freeze(object) {\n if (typeof object == \"function\") {\n return object;\n } else {\n return freezeObject(object);\n }\n };\n })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n Object.preventExtensions = function preventExtensions(object) {\n return object;\n };\n}\nif (!Object.isSealed) {\n Object.isSealed = function isSealed(object) {\n return false;\n };\n}\nif (!Object.isFrozen) {\n Object.isFrozen = function isFrozen(object) {\n return false;\n };\n}\nif (!Object.isExtensible) {\n Object.isExtensible = function isExtensible(object) {\n if (Object(object) === object) {\n throw new TypeError(); // TODO message\n }\n var name = '';\n while (owns(object, name)) {\n name += '?';\n }\n object[name] = true;\n var returnValue = owns(object, name);\n delete object[name];\n return returnValue;\n };\n}\nif (!Object.keys) {\n var hasDontEnumBug = true,\n dontEnums = [\n \"toString\",\n \"toLocaleString\",\n \"valueOf\",\n \"hasOwnProperty\",\n \"isPrototypeOf\",\n \"propertyIsEnumerable\",\n \"constructor\"\n ],\n dontEnumsLength = dontEnums.length;\n\n for (var key in {\"toString\": null}) {\n hasDontEnumBug = false;\n }\n\n Object.keys = function keys(object) {\n\n if (\n (typeof object != \"object\" && typeof object != \"function\") ||\n object === null\n ) {\n throw new TypeError(\"Object.keys called on a non-object\");\n }\n\n var keys = [];\n for (var name in object) {\n if (owns(object, name)) {\n keys.push(name);\n }\n }\n\n if (hasDontEnumBug) {\n for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n var dontEnum = dontEnums[i];\n if (owns(object, dontEnum)) {\n keys.push(dontEnum);\n }\n }\n }\n return keys;\n };\n\n}\nif (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n ws = \"[\" + ws + \"]\";\n var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n trimEndRegexp = new RegExp(ws + ws + \"*$\");\n String.prototype.trim = function trim() {\n return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n };\n}\n\nfunction toInteger(n) {\n n = +n;\n if (n !== n) { // isNaN\n n = 0;\n } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n return n;\n}\n\nfunction isPrimitive(input) {\n var type = typeof input;\n return (\n input === null ||\n type === \"undefined\" ||\n type === \"boolean\" ||\n type === \"number\" ||\n type === \"string\"\n );\n}\n\nfunction toPrimitive(input) {\n var val, valueOf, toString;\n if (isPrimitive(input)) {\n return input;\n }\n valueOf = input.valueOf;\n if (typeof valueOf === \"function\") {\n val = valueOf.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n toString = input.toString;\n if (typeof toString === \"function\") {\n val = toString.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n throw new TypeError();\n}\nvar toObject = function (o) {\n if (o == null) { // this matches both null and undefined\n throw new TypeError(\"can't convert \"+o+\" to object\");\n }\n return Object(o);\n};\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./regexp\");\nacequire(\"./es5-shim\");\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.getDocumentHead = function(doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n}\n\nexports.createElement = function(tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\n\nexports.hasCssClass = function(el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function(el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function(node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n};\n\nexports.hasCssString = function(id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n\n if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\n while (index < sheets.length)\n if (sheets[index++].owningElement.id === id) return true;\n } else if ((sheets = doc.getElementsByTagName(\"style\"))) {\n while (index < sheets.length)\n if (sheets[index++].id === id) return true;\n }\n\n return false;\n};\n\nexports.importCssString = function importCssString(cssText, id, doc) {\n doc = doc || document;\n if (id && exports.hasCssString(id, doc))\n return null;\n \n var style;\n \n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n \n if (doc.createStyleSheet) {\n style = doc.createStyleSheet();\n style.cssText = cssText;\n if (id)\n style.owningElement.id = id;\n } else {\n style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n\n exports.getDocumentHead(doc).appendChild(style);\n }\n};\n\nexports.importCssStylsheet = function(uri, doc) {\n if (doc.createStyleSheet) {\n doc.createStyleSheet(uri);\n } else {\n var link = exports.createElement('link');\n link.rel = 'stylesheet';\n link.href = uri;\n\n exports.getDocumentHead(doc).appendChild(link);\n }\n};\n\nexports.getInnerWidth = function(element) {\n return (\n parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) +\n parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + \n element.clientWidth\n );\n};\n\nexports.getInnerHeight = function(element) {\n return (\n parseInt(exports.computedStyle(element, \"paddingTop\"), 10) +\n parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) +\n element.clientHeight\n );\n};\n\nexports.scrollbarWidth = function(document) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n\n outer.appendChild(inner);\n\n var body = document.documentElement;\n body.appendChild(outer);\n\n var noScrollbar = inner.offsetWidth;\n\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n\n return noScrollbar-withScrollbar;\n};\n\nif (typeof document == \"undefined\") {\n exports.importCssString = function() {};\n return;\n}\n\nif (window.pageYOffset !== undefined) {\n exports.getPageScrollTop = function() {\n return window.pageYOffset;\n };\n\n exports.getPageScrollLeft = function() {\n return window.pageXOffset;\n };\n}\nelse {\n exports.getPageScrollTop = function() {\n return document.body.scrollTop;\n };\n\n exports.getPageScrollLeft = function() {\n return document.body.scrollLeft;\n };\n}\n\nif (window.getComputedStyle)\n exports.computedStyle = function(element, style) {\n if (style)\n return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\n return window.getComputedStyle(element, \"\") || {};\n };\nelse\n exports.computedStyle = function(element, style) {\n if (style)\n return element.currentStyle[style];\n return element.currentStyle;\n };\nexports.setInnerHtml = function(el, innerHtml) {\n var element = el.cloneNode(false);//document.createElement(\"div\");\n element.innerHTML = innerHtml;\n el.parentNode.replaceChild(element, el);\n return element;\n};\n\nif (\"textContent\" in document.documentElement) {\n exports.setInnerText = function(el, innerText) {\n el.textContent = innerText;\n };\n\n exports.getInnerText = function(el) {\n return el.textContent;\n };\n}\nelse {\n exports.setInnerText = function(el, innerText) {\n el.innerText = innerText;\n };\n\n exports.getInnerText = function(el) {\n return el.innerText;\n };\n}\n\nexports.getParentWindow = function(document) {\n return document.defaultView || document.parentWindow;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\n\nexports.mixin = function(obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\n\nexports.implement = function(proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./fixoldbrowsers\");\n\nvar oop = acequire(\"./oop\");\nvar Keys = (function() {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\n },\n\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\n },\n\n FUNCTION_KEYS : {\n 8 : \"Backspace\",\n 9 : \"Tab\",\n 13 : \"Return\",\n 19 : \"Pause\",\n 27 : \"Esc\",\n 32 : \"Space\",\n 33 : \"PageUp\",\n 34 : \"PageDown\",\n 35 : \"End\",\n 36 : \"Home\",\n 37 : \"Left\",\n 38 : \"Up\",\n 39 : \"Right\",\n 40 : \"Down\",\n 44 : \"Print\",\n 45 : \"Insert\",\n 46 : \"Delete\",\n 96 : \"Numpad0\",\n 97 : \"Numpad1\",\n 98 : \"Numpad2\",\n 99 : \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n ret[173] = '-';\n \n (function() {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) { \n ret.KEY_MODS[i] = mods.filter(function(x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n\n return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function() {\n if (exports.isMac) {\n return exports.OS.MAC;\n } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n};\nif (typeof navigator != \"object\")\n return;\n\nvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\nvar ua = navigator.userAgent;\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE = \n (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n \nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\nexports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv:(\\d+)/)||[])[1], 10) < 4;\nexports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isIPad = ua.indexOf(\"iPad\") >= 0;\n\nexports.isTouchPad = ua.indexOf(\"TouchPad\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keys = acequire(\"./keys\");\nvar useragent = acequire(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nexports.addListener = function(elem, type, callback) {\n if (elem.addEventListener) {\n return elem.addEventListener(type, callback, false);\n }\n if (elem.attachEvent) {\n var wrapper = function() {\n callback.call(elem, window.event);\n };\n callback._wrapper = wrapper;\n elem.attachEvent(\"on\" + type, wrapper);\n }\n};\n\nexports.removeListener = function(elem, type, callback) {\n if (elem.removeEventListener) {\n return elem.removeEventListener(type, callback, false);\n }\n if (elem.detachEvent) {\n elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n }\n};\nexports.stopEvent = function(e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\n\nexports.stopPropagation = function(e) {\n if (e.stopPropagation)\n e.stopPropagation();\n else\n e.cancelBubble = true;\n};\n\nexports.preventDefault = function(e) {\n if (e.preventDefault)\n e.preventDefault();\n else\n e.returnValue = false;\n};\nexports.getButton = function(e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n if (e.preventDefault) {\n return e.button;\n }\n else {\n return {1:0, 2:2, 4:1}[e.button];\n }\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n\n exports.removeListener(document, \"mousemove\", eventHandler, true);\n exports.removeListener(document, \"mouseup\", onMouseUp, true);\n exports.removeListener(document, \"dragstart\", onMouseUp, true);\n }\n\n exports.addListener(document, \"mousemove\", eventHandler, true);\n exports.addListener(document, \"mouseup\", onMouseUp, true);\n exports.addListener(document, \"dragstart\", onMouseUp, true);\n \n return onMouseUp;\n};\n\nexports.addTouchMoveListener = function (el, callback) {\n if (\"ontouchmove\" in el) {\n var startx, starty;\n exports.addListener(el, \"touchstart\", function (e) {\n var touchObj = e.changedTouches[0];\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n });\n exports.addListener(el, \"touchmove\", function (e) {\n var factor = 1,\n touchObj = e.changedTouches[0];\n\n e.wheelX = -(touchObj.clientX - startx) / factor;\n e.wheelY = -(touchObj.clientY - starty) / factor;\n\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n\n callback(e);\n });\n } \n};\n\nexports.addMouseWheelListener = function(el, callback) {\n if (\"onmousewheel\" in el) {\n exports.addListener(el, \"mousewheel\", function(e) {\n var factor = 8;\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n callback(e);\n });\n } else if (\"onwheel\" in el) {\n exports.addListener(el, \"wheel\", function(e) {\n var factor = 0.35;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n \n callback(e);\n });\n } else {\n exports.addListener(el, \"DOMMouseScroll\", function(e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n callback(e);\n });\n }\n};\n\nexports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\n var clicks = 0;\n var startX, startY, timer; \n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n } else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\n\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n \n e._clicks = clicks;\n\n eventHandler[callbackName](\"mousedown\", e);\n\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n function onDblclick(e) {\n clicks = 2;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\n eventHandler[callbackName](\"mousedown\", e);\n eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function(el) {\n exports.addListener(el, \"mousedown\", onMousedown);\n if (useragent.isOldIE)\n exports.addListener(el, \"dblclick\", onDblclick);\n });\n};\n\nvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\n ? function(e) {\n return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n }\n : function(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n };\n\nexports.getModifierString = function(e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n \n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\n keyCode = -1;\n }\n \n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n \n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n \n return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback) {\n var addListener = exports.addListener;\n if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function(e) {\n lastKeyDownKeyCode = e.keyCode;\n });\n addListener(el, \"keypress\", function(e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n });\n } else {\n var lastDefaultPrevented = null;\n\n addListener(el, \"keydown\", function(e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n });\n\n addListener(el, \"keypress\", function(e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n });\n\n addListener(el, \"keyup\", function(e) {\n pressedKeys[e.keyCode] = null;\n });\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function(callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + postMessageId;\n exports.addListener(win, \"message\", function listener(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n exports.removeListener(win, \"message\", listener);\n callback();\n }\n });\n win.postMessage(messageName, \"*\");\n };\n}\n\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || window.msRequestAnimationFrame\n || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function(callback) {\n setTimeout(callback, 17);\n };\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n\n if (count >>= 1)\n string += string;\n }\n return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\n\nexports.copyArray = function(array){\n var copy = [];\n for (var i=0, l=array.length; i<l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else \n copy[i] = array[i];\n }\n return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n \n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\nexports.arrayToMap = function(arr) {\n var map = {};\n for (var i=0; i<arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n\n};\n\nexports.createMap = function(props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function(array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\n\nexports.escapeRegExp = function(str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n return str.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/</g, \"<\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n var matches = [];\n\n string.replace(regExp, function(str) {\n matches.push({\n offset: arguments[arguments.length-2],\n length: str.length\n });\n });\n\n return matches;\n};\nexports.deferredCall = function(fcn) {\n var timer = null;\n var callback = function() {\n timer = null;\n fcn();\n };\n\n var deferred = function(timeout) {\n deferred.cancel();\n timer = setTimeout(callback, timeout || 0);\n return deferred;\n };\n\n deferred.schedule = deferred;\n\n deferred.call = function() {\n this.cancel();\n fcn();\n return deferred;\n };\n\n deferred.cancel = function() {\n clearTimeout(timer);\n timer = null;\n return deferred;\n };\n \n deferred.isPending = function() {\n return timer;\n };\n\n return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n var timer = null;\n var callback = function() {\n timer = null;\n fcn();\n };\n\n var _self = function(timeout) {\n if (timer == null)\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n\n _self.delay = function(timeout) {\n timer && clearTimeout(timer);\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.schedule = _self;\n\n _self.call = function() {\n this.cancel();\n fcn();\n };\n\n _self.cancel = function() {\n timer && clearTimeout(timer);\n timer = null;\n };\n\n _self.isPending = function() {\n return timer;\n };\n\n return _self;\n};\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\n\nvar TextInput = function(parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n\n if (useragent.isTouchPad)\n text.setAttribute(\"x-palm-disable-auto-cap\", true);\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n if (useragent.isOldIE) text.style.top = \"-1000px\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var PLACEHOLDER = \"\\x01\\x01\";\n\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var tempStyle = '';\n var isSelectionEmpty = true;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n \n event.addListener(text, \"blur\", function(e) {\n host.onBlur(e);\n isFocused = false;\n });\n event.addListener(text, \"focus\", function(e) {\n isFocused = true;\n host.onFocus(e);\n resetSelection();\n });\n this.focus = function() {\n if (tempStyle) return text.focus();\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n text.focus();\n setTimeout(function() {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function() {\n text.blur();\n };\n this.isFocused = function() {\n return isFocused;\n };\n var syncSelection = lang.delayedCall(function() {\n isFocused && resetSelection(isSelectionEmpty);\n });\n var syncValue = lang.delayedCall(function() {\n if (!inComposition) {\n text.value = PLACEHOLDER;\n isFocused && resetSelection();\n }\n });\n\n function resetSelection(isEmpty) {\n if (inComposition)\n return;\n inComposition = true;\n \n if (inputHandler) {\n selectionStart = 0;\n selectionEnd = isEmpty ? 0 : text.value.length - 1;\n } else {\n var selectionStart = isEmpty ? 2 : 1;\n var selectionEnd = 2;\n }\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n } catch(e){}\n \n inComposition = false;\n }\n\n function resetValue() {\n if (inComposition)\n return;\n text.value = PLACEHOLDER;\n if (useragent.isWebKit)\n syncValue.schedule();\n }\n\n useragent.isWebKit || host.addEventListener('changeSelection', function() {\n if (host.selection.isEmpty() != isSelectionEmpty) {\n isSelectionEmpty = !isSelectionEmpty;\n syncSelection.schedule();\n }\n });\n\n resetValue();\n if (isFocused)\n host.onFocus();\n\n\n var isAllSelected = function(text) {\n return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n };\n if (!text.setSelectionRange && text.createTextRange) {\n text.setSelectionRange = function(selectionStart, selectionEnd) {\n var range = this.createTextRange();\n range.collapse(true);\n range.moveStart('character', selectionStart);\n range.moveEnd('character', selectionEnd);\n range.select();\n };\n isAllSelected = function(text) {\n try {\n var range = text.ownerDocument.selection.createRange();\n }catch(e) {}\n if (!range || range.parentElement() != text) return false;\n return range.text == text.value;\n }\n }\n if (useragent.isOldIE) {\n var inPropertyChange = false;\n var onPropertyChange = function(e){\n if (inPropertyChange)\n return;\n var data = text.value;\n if (inComposition || !data || data == PLACEHOLDER)\n return;\n if (e && data == PLACEHOLDER[0])\n return syncProperty.schedule();\n\n sendText(data);\n inPropertyChange = true;\n resetValue();\n inPropertyChange = false;\n };\n var syncProperty = lang.delayedCall(onPropertyChange);\n event.addListener(text, \"propertychange\", onPropertyChange);\n\n var keytable = { 13:1, 27:1 };\n event.addListener(text, \"keyup\", function (e) {\n if (inComposition && (!text.value || keytable[e.keyCode]))\n setTimeout(onCompositionEnd, 0);\n if ((text.value.charCodeAt(0)||0) < 129) {\n return syncProperty.call();\n }\n inComposition ? onCompositionUpdate() : onCompositionStart();\n });\n event.addListener(text, \"keydown\", function (e) {\n syncProperty.schedule(50);\n });\n }\n\n var onSelect = function(e) {\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (inputHandler) {\n resetSelection(host.selection.isEmpty());\n }\n };\n\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb};\n this.getInputHandler = function() {return inputHandler};\n var afterContextMenu = false;\n \n var sendText = function(data) {\n if (inputHandler) {\n data = inputHandler(data);\n inputHandler = null;\n }\n if (pasted) {\n resetSelection();\n if (data)\n host.onPaste(data);\n pasted = false;\n } else if (data == PLACEHOLDER.charAt(0)) {\n if (afterContextMenu)\n host.execCommand(\"del\", {source: \"ace\"});\n else // some versions of android do not fire keydown when pressing backspace\n host.execCommand(\"backspace\", {source: \"ace\"});\n } else {\n if (data.substring(0, 2) == PLACEHOLDER)\n data = data.substr(2);\n else if (data.charAt(0) == PLACEHOLDER.charAt(0))\n data = data.substr(1);\n else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n \n if (data)\n host.onTextInput(data);\n }\n if (afterContextMenu)\n afterContextMenu = false;\n };\n var onInput = function(e) {\n if (inComposition)\n return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n \n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function(){\n copied = false;\n resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n \n var onCut = function(e) {\n doCopy(e, true);\n };\n \n var onCopy = function(e) {\n doCopy(e, false);\n };\n \n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n event.addListener(text, \"select\", onSelect);\n\n event.addListener(text, \"input\", onInput);\n\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)){\n event.addListener(parentNode, \"keydown\", function(e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n });\n }\n var onCompositionStart = function(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) \n return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n host.session.markUndoGroup();\n };\n\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n var val = text.value.replace(/\\x01/g, \"\");\n if (inComposition.lastValue === val) return;\n \n host.onCompositionUpdate(val);\n if (inComposition.lastValue)\n host.undo();\n if (inComposition.canUndo)\n inComposition.lastValue = val;\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function() {\n timer = null;\n var str = text.value.replace(/\\x01/g, \"\");\n if (inComposition)\n return;\n else if (str == c.lastValue)\n resetValue();\n else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n inputHandler = function compositionInputHandler(str) {\n if (timer)\n clearTimeout(timer);\n str = str.replace(/\\x01/g, \"\");\n if (str == c.lastValue)\n return \"\";\n if (c.lastValue && timer)\n host.undo();\n return str;\n };\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n if (useragent.isChrome && useragent.isChrome >= 53) {\n onInput();\n }\n };\n \n \n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n event.addListener(text, \"compositionstart\", onCompositionStart);\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function(){syncComposition.schedule()});\n } else {\n event.addListener(text, \"keyup\", function(){syncComposition.schedule()});\n event.addListener(text, \"keydown\", function(){syncComposition.schedule()});\n }\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function() {\n return text;\n };\n\n this.setReadOnly = function(readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n \n this.moveToMouse = function(e, bringToFront) {\n if (!bringToFront && useragent.isOldIE)\n return;\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + \"height:\" + text.style.height + \";\"\n + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n }; \n move(e);\n\n if (e.type != \"mousedown\")\n return;\n\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$keepTextAreaAtCursor = null;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin && !useragent.isOldIE)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, useragent.isOldIE ? 200 : 0);\n }\n\n var onContextMenu = function(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function(e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n};\n\nexports.TextInput = TextInput;\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\n\nfunction DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n this.onMouseDown = function(ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n editor.$blockScrolling++;\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n editor.$blockScrolling--;\n if (button == 2)\n editor.textInput.onContextMenu(ev.domEvent);\n return; // stopping event here breaks contextmenu on ff mac\n }\n\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function(pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n editor.$blockScrolling++;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n editor.$blockScrolling--;\n };\n\n this.select = function() {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n editor.$blockScrolling++;\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.extendSelectionBy = function(unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n editor.$blockScrolling++;\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n } else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd =\n this.selectAllEnd =\n this.selectByWordsEnd =\n this.selectByLinesEnd = function() {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function() {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n\n this.onQuadClick = function(ev) {\n var editor = this.editor;\n\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function(ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n\n var t = ev.domEvent.timeStamp;\n var dt = t - (this.$lastScrollTime||0);\n \n var editor = this.editor;\n var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n if (isScrolable || dt < 200) {\n this.$lastScrollTime = t;\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n \n this.onTouchMove = function (ev) {\n var t = ev.domEvent.timeStamp;\n var dt = t - (this.$lastScrollTime || 0);\n\n var editor = this.editor;\n var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n if (isScrolable || dt < 200) {\n this.$lastScrollTime = t;\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n if (cmp < 0)\n return {cursor: range.start, anchor: range.end};\n else\n return {cursor: range.end, anchor: range.start};\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n}\n\n(function() {\n this.$init = function() {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n this.getElement = function() {\n return this.$element || this.$init();\n };\n this.setText = function(text) {\n dom.setInnerText(this.getElement(), text);\n };\n this.setHtml = function(html) {\n this.getElement().innerHTML = html;\n };\n this.setPosition = function(x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n this.setClassName = function(className) {\n dom.addCssClass(this.getElement(), className);\n };\n this.show = function(text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n\n this.hide = function() {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n this.getHeight = function() {\n return this.getElement().offsetHeight;\n };\n this.getWidth = function() {\n return this.getElement().offsetWidth;\n };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(acequire, exports, module) {\n\"use strict\";\nvar dom = acequire(\"../lib/dom\");\nvar oop = acequire(\"../lib/oop\");\nvar event = acequire(\"../lib/event\");\nvar Tooltip = acequire(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\")\n return;\n\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n\n\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\n\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation)\n return;\n tooltipAnnotation = annotation.text.join(\"<br/>\");\n\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\n editor.removeEventListener(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n\n event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout)\n return;\n\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n });\n \n editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n this.setPosition = function(x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n \n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n\n this.$pos = null;\n this.$inSelection = null;\n \n this.propagationStopped = false;\n this.defaultPrevented = false;\n};\n\n(function() { \n \n this.stopPropagation = function() {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n \n this.preventDefault = function() {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n \n this.stop = function() {\n this.stopPropagation();\n this.preventDefault();\n };\n this.getDocumentPosition = function() {\n if (this.$pos)\n return this.$pos;\n \n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n this.inSelection = function() {\n if (this.$inSelection !== null)\n return this.$inSelection;\n \n var editor = this.editor;\n \n\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n\n return this.$inSelection;\n };\n this.getButton = function() {\n return event.getButton(this.domEvent);\n };\n this.getShiftKey = function() {\n return this.domEvent.shiftKey;\n };\n \n this.getAccelKey = useragent.isMac\n ? function() { return this.domEvent.metaKey; }\n : function() { return this.domEvent.ctrlKey; };\n \n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n var editor = mouseHandler.editor;\n\n var blankImage = dom.createElement(\"img\");\n blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (useragent.isOpera)\n blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n\n this.onDragStart = function(e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function(){\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n if (useragent.isOpera) {\n editor.container.appendChild(blankImage);\n blankImage.scrollTop = 0;\n }\n dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n if (useragent.isOpera) {\n editor.container.removeChild(blankImage);\n }\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n isInternal = true;\n this.setState(\"drag\");\n };\n\n this.onDragEnd = function(e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.renderer.$cursorLayer.setBlinking(true);\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n\n this.onDragEnter = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragOver = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function(e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n\n this.onDrop = function(e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n } else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n } else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\n\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.$blockScrolling += 1;\n editor.moveCursorToPosition(cursor);\n editor.$blockScrolling -= 1;\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {x: x, y: y};\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = {row: cursor.row, column: cursor.column};\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\n }\n }\n\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.$blockScrolling += 1;\n editor.selection.fromOrientedRange(range);\n editor.$blockScrolling -= 1;\n if (editor.isFocused() && !isInternal)\n editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function() {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function(type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n var dropEffect = \"none\";\n\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n\n return dropEffect;\n }\n}\n\n(function() {\n\n this.dragWait = function() {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n\n this.dragWaitEnd = function() {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n\n this.dragReadyEnd = function(e) {\n this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n\n this.startDrag = function(){\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n\n this.onMouseDrag = function(e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n\n this.onMouseDown = function(e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\nvar dom = acequire(\"./dom\");\n\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n\n s.src = path;\n head.appendChild(s);\n\n s.onload = s.onreadystatechange = function(_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function(url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n}\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n\n if (typeof e != \"object\" || !e)\n e = {};\n\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n\n listeners = listeners.slice();\n for (var i=0; i<listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n \n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i=0; i<listeners.length; i++)\n listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n var _self = this;\n callback && this.addEventListener(eventName, function newCallback() {\n _self.removeEventListener(eventName, newCallback);\n callback.apply(null, arguments);\n });\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n var handlers = this._defaultHandlers\n if (!handlers)\n handlers = this._defaultHandlers = {_disabled_: {}};\n \n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1) \n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n var handlers = this._defaultHandlers\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n \n if (handlers[eventName] == callback) {\n var old = handlers[eventName];\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n } else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"no use strict\";\n\nvar oop = acequire(\"./oop\");\nvar EventEmitter = acequire(\"./event_emitter\").EventEmitter;\n\nvar optionsProvider = {\n setOptions: function(optList) {\n Object.keys(optList).forEach(function(key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function(optionNames) {\n var result = {};\n if (!optionNames) {\n optionNames = Object.keys(this.$options);\n } else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n optionNames.forEach(function(key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function(name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function(name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\n\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\n\nfunction reportError(msg, data) {\n var e = new Error(msg);\n e.data = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function() { throw e; });\n}\n\nvar AppConfig = function() {\n this.$defaultOptions = {};\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n this.defineOptions = function(obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n\n Object.keys(options).forEach(function(key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = {forwardTo: opt};\n\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n\n return this;\n };\n\n this.resetOptions = function(obj) {\n Object.keys(obj.$options).forEach(function(key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n\n this.setDefaultValue = function(path, name, value) {\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n\n this.setDefaultValues = function(path, optionHash) {\n Object.keys(optionHash).forEach(function(key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n \n this.warn = warn;\n this.reportError = reportError;\n \n}).call(AppConfig.prototype);\n\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"], function(acequire, exports, module) {\n\"no use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar net = acequire(\"./lib/net\");\nvar AppConfig = acequire(\"./lib/app_config\").AppConfig;\n\nmodule.exports = exports = new AppConfig();\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {}\n};\n\nexports.get = function(key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n\n return options[key];\n};\n\nexports.set = function(key, value) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n\n options[key] = value;\n};\n\nexports.all = function() {\n return lang.copyObject(options);\n};\nexports.moduleUrl = function(name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = acequire(moduleName);\n } catch (e) {}\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n\n exports.$loading[moduleName].push(onLoad);\n\n if (exports.$loading[moduleName].length > 1)\n return;\n\n var afterLoad = function() {\n acequire([moduleName], function(module) {\n exports._emit(\"load.module\", {name: moduleName, module: module});\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function(onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n options.packaged = packaged || acequire.packaged || module.packaged || (global.define && define.packaged);\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i<scripts.length; i++) {\n var script = scripts[i];\n\n var src = script.src || script.getAttribute(\"src\");\n if (!src)\n continue;\n\n var attributes = script.attributes;\n for (var j=0, l=attributes.length; j < l; j++) {\n var attr = attributes[j];\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n if (m)\n scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions)\n if (typeof scriptOptions[key] !== \"undefined\")\n exports.set(key, scriptOptions[key]);\n}\n\nexports.init = init;\n\nfunction deHyphenate(str) {\n return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar DefaultHandlers = acequire(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = acequire(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = acequire(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = acequire(\"./dragdrop_handler\").DragdropHandler;\nvar config = acequire(\"../config\");\n\nvar MouseHandler = function(editor) {\n var _self = this;\n this.editor = editor;\n\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n\n var focusEditor = function(e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement())\n if (windowBlurred)\n window.focus();\n editor.focus();\n };\n\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\n event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, \"touchmove\"));\n\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\n\n event.addListener(mouseTarget, \"mousedown\", focusEditor);\n event.addListener(gutterEl, \"mousedown\", focusEditor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\n }\n\n editor.on(\"mousemove\", function(e){\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n } else {\n renderer.setCursorStyle(\"\");\n }\n });\n};\n\n(function() {\n this.onMouseEvent = function(name, e) {\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseMove = function(name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseWheel = function(name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n\n this.editor._emit(name, mouseEvent);\n };\n \n this.onTouchMove = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = 1;//this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n\n this.setState = function(state) {\n this.state = state;\n };\n\n this.captureMouse = function(ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n\n this.isMousePressed = true;\n var renderer = this.editor.renderer;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$keepTextAreaAtCursor = null;\n\n var self = this;\n var onMouseMove = function(e) {\n if (!e) return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n\n var onCaptureEnd = function(e) {\n clearInterval(timerId);\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n if (renderer.$keepTextAreaAtCursor == null) {\n renderer.$keepTextAreaAtCursor = true;\n renderer.$moveTextAreaToCursor();\n }\n self.isMousePressed = false;\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n };\n\n var onCaptureInterval = function() {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function() {onCaptureEnd(ev);});\n }\n\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n this.releaseMouse = null;\n this.cancelContextMenu = function() {\n var stop = function(e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n}).call(MouseHandler.prototype);\n\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: {initialValue: 2},\n dragDelay: {initialValue: (useragent.isMac ? 150 : 0)},\n dragEnabled: {initialValue: true},\n focusTimout: {initialValue: 0},\n tooltipFollowsMouse: {initialValue: true}\n});\n\n\nexports.MouseHandler = MouseHandler;\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nfunction FoldHandler(editor) {\n\n editor.on(\"click\", function(e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n\n e.stop();\n }\n });\n\n editor.on(\"gutterclick\", function(e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n\n editor.on(\"gutterdblclick\", function(e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n if (fold) {\n session.removeFold(fold);\n } else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0});\n }\n }\n e.stop();\n }\n });\n}\n\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keyUtil = acequire(\"../lib/keys\");\nvar event = acequire(\"../lib/event\");\n\nvar KeyBinding = function(editor) {\n this.$editor = editor;\n this.$data = {editor: editor};\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n};\n\n(function() {\n this.setDefaultHandler = function(kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n\n this.setKeyboardHandler = function(kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n\n this.addKeyboardHandler(kb, 1);\n };\n\n this.addKeyboardHandler = function(kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n\n this.removeKeyboardHandler = function(kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n\n this.getKeyboardHandler = function() {\n return this.$handlers[this.$handlers.length - 1];\n };\n \n this.getStatusText = function() {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function(h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n\n this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e\n );\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n } else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 && \n toExecute.passEvent != true && toExecute.command.passEvent != true\n ) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n \n if (!success && hashId == -1) {\n toExecute = {command: \"insertstring\"};\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n \n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n \n return success;\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n\n this.onTextInput = function(text) {\n this.$callKeyboardHandlers(-1, text);\n };\n\n}).call(KeyBinding.prototype);\n\nexports.KeyBinding = KeyBinding;\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n\n this.end = {\n row: endRow,\n column: endColumn\n };\n};\n\n(function() {\n this.isEqual = function(range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n this.toString = function() {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n\n this.contains = function(row, column) {\n return this.compare(row, column) == 0;\n };\n this.compareRange = function(range) {\n var cmp,\n end = range.end,\n start = range.start;\n\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n this.comparePoint = function(p) {\n return this.compare(p.row, p.column);\n };\n this.containsRange = function(range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n this.intersects = function(range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n this.isEnd = function(row, column) {\n return this.end.row == row && this.end.column == column;\n };\n this.isStart = function(row, column) {\n return this.start.row == row && this.start.column == column;\n };\n this.setStart = function(row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n this.setEnd = function(row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n this.inside = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideStart = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideEnd = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.compare = function(row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n\n if (row < this.start.row)\n return -1;\n\n if (row > this.end.row)\n return 1;\n\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n\n return 0;\n };\n this.compareStart = function(row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareEnd = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareInside = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.clipRows = function(firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = {row: lastRow + 1, column: 0};\n else if (this.end.row < firstRow)\n var end = {row: firstRow, column: 0};\n\n if (this.start.row > lastRow)\n var start = {row: lastRow + 1, column: 0};\n else if (this.start.row < firstRow)\n var start = {row: firstRow, column: 0};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n this.extend = function(row, column) {\n var cmp = this.compare(row, column);\n\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = {row: row, column: column};\n else\n var end = {row: row, column: column};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function() {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n this.isMultiLine = function() {\n return (this.start.row !== this.end.row);\n };\n this.clone = function() {\n return Range.fromPoints(this.start, this.end);\n };\n this.collapseRows = function() {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)\n else\n return new Range(this.start.row, 0, this.end.row, 0)\n };\n this.toScreenRange = function(session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n\n return new Range(\n screenPosStart.row, screenPosStart.column,\n screenPosEnd.row, screenPosEnd.column\n );\n };\n this.moveBy = function(row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar lang = acequire(\"./lib/lang\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Range = acequire(\"./range\").Range;\nvar Selection = function(session) {\n this.session = session;\n this.doc = session.getDocument();\n\n this.clearSelection();\n this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\n this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\n\n var self = this;\n this.lead.on(\"change\", function(e) {\n self._emit(\"changeCursor\");\n if (!self.$isEmpty)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n\n this.selectionAnchor.on(\"change\", function() {\n if (!self.$isEmpty)\n self._emit(\"changeSelection\");\n });\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.isEmpty = function() {\n return (this.$isEmpty || (\n this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column\n ));\n };\n this.isMultiLine = function() {\n if (this.isEmpty()) {\n return false;\n }\n\n return this.getRange().isMultiLine();\n };\n this.getCursor = function() {\n return this.lead.getPosition();\n };\n this.setSelectionAnchor = function(row, column) {\n this.anchor.setPosition(row, column);\n\n if (this.$isEmpty) {\n this.$isEmpty = false;\n this._emit(\"changeSelection\");\n }\n };\n this.getSelectionAnchor = function() {\n if (this.$isEmpty)\n return this.getSelectionLead();\n else\n return this.anchor.getPosition();\n };\n this.getSelectionLead = function() {\n return this.lead.getPosition();\n };\n this.shiftSelection = function(columns) {\n if (this.$isEmpty) {\n this.moveCursorTo(this.lead.row, this.lead.column + columns);\n return;\n }\n\n var anchor = this.getSelectionAnchor();\n var lead = this.getSelectionLead();\n\n var isBackwards = this.isBackwards();\n\n if (!isBackwards || anchor.column !== 0)\n this.setSelectionAnchor(anchor.row, anchor.column + columns);\n\n if (isBackwards || lead.column !== 0) {\n this.$moveSelection(function() {\n this.moveCursorTo(lead.row, lead.column + columns);\n });\n }\n };\n this.isBackwards = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n this.getRange = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n\n if (this.isEmpty())\n return Range.fromPoints(lead, lead);\n\n if (this.isBackwards()) {\n return Range.fromPoints(lead, anchor);\n }\n else {\n return Range.fromPoints(anchor, lead);\n }\n };\n this.clearSelection = function() {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function() {\n var lastRow = this.doc.getLength() - 1;\n this.setSelectionAnchor(0, 0);\n this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\n };\n this.setRange =\n this.setSelectionRange = function(range, reverse) {\n if (reverse) {\n this.setSelectionAnchor(range.end.row, range.end.column);\n this.selectTo(range.start.row, range.start.column);\n } else {\n this.setSelectionAnchor(range.start.row, range.start.column);\n this.selectTo(range.end.row, range.end.column);\n }\n if (this.getRange().isEmpty())\n this.$isEmpty = true;\n this.$desiredColumn = null;\n };\n\n this.$moveSelection = function(mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n\n mover.call(this);\n };\n this.selectTo = function(row, column) {\n this.$moveSelection(function() {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function(pos) {\n this.$moveSelection(function() {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function(row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function(pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function() {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function() {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function() {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function() {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function() {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function() {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function() {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function() {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function() {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function() {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.getWordRange = function(row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n this.selectWord = function() {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function() {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function(row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n this.selectLine = function() {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function() {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function() {\n this.moveCursorBy(1, 0);\n };\n this.moveCursorLeft = function() {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(\" \").length-1 == tabSize)\n this.moveCursorBy(0, -tabSize);\n else\n this.moveCursorBy(0, -1);\n }\n };\n this.moveCursorRight = function() {\n var cursor = this.lead.getPosition(),\n fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(\" \").length-1 == tabSize)\n this.moveCursorBy(0, tabSize);\n else\n this.moveCursorBy(0, 1);\n }\n };\n this.moveCursorLineStart = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(\n row, null, firstColumnPosition.row,\n firstColumnPosition.column\n );\n\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n this.moveCursorLineEnd = function() {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n this.moveCursorFileEnd = function() {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function() {\n this.moveCursorTo(0, 0);\n };\n this.moveCursorLongWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n this.moveCursorLongWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (match = this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function(rightOfCursor) {\n var match, index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n\n tokenRe.lastIndex = 0;\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index ++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n\n return index;\n };\n\n this.moveCursorShortWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.moveCursorBy = function(rows, chars) {\n var screenPos = this.session.documentToScreenPosition(\n this.lead.row,\n this.lead.column\n );\n\n if (chars === 0) {\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column);\n \n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n if (docPos.row > 0 || rows > 0)\n docPos.row++;\n }\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n this.moveCursorToPosition = function(position) {\n this.moveCursorTo(position.row, position.column);\n };\n this.moveCursorTo = function(row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n\n this.$keepDesiredColumnOnChange = true;\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function() {\n this.lead.detach();\n this.anchor.detach();\n this.session = this.doc = null;\n };\n\n this.fromOrientedRange = function(range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function(range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n this.getRangeOfMovements = function(func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start,end);\n } catch(e) {\n return Range.fromPoints(start,start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function() {\n if (this.rangeCount) {\n var data = this.ranges.map(function(r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n\n this.fromJSON = function(data) {\n if (data.start == undefined) {\n if (this.rangeList) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--; ) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n } else\n data = data[0];\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function(data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--; ) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar config = acequire(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n this.states = rules;\n\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n var flag = \"g\";\n\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive)\n flag = \"gi\";\n if (rule.regex == null)\n continue;\n\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", { \n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n \n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n \n splitterRurles.forEach(function(rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n};\n\n(function() {\n this.$setMaxTokenCount = function(m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n \n this.$applyToken = function(str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{type: types, value: str}];\n\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n\n this.$arrayTokens = function(str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n\n this.removeCapturingGroups = function(src) {\n var r = src.replace(\n /\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,\n function(x, y) {return y ? \"(?:\" : x;}\n );\n return r;\n };\n\n this.createSplitterRegexp = function(src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n m, esc, parenOpen, parenClose, square, index\n ) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index+1;\n lastCapture.stack = -1;\n }\n stack--;\n } else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack\n lastCapture.start = index;\n }\n }\n return m;\n });\n\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n \n return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n };\n this.getLineTokens = function(line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift()\n startState = stack.shift()\n }\n } else\n var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n\n var token = {type: null, value: \"\"};\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: skipped};\n }\n }\n\n for (var i = 0; i < match.length-2; i++) {\n if (match[i + 1] === undefined)\n continue;\n\n rule = state[mapping[i]];\n\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack);\n else\n type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n \n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: value};\n }\n } else if (type) {\n if (token.type)\n tokens.push(token);\n token = {type: null, value: \"\"};\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n\n if (lastIndex == line.length)\n break;\n\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 2000),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type)\n tokens.push(token);\n \n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens : tokens,\n state : stack.length ? stack : currentState\n };\n };\n \n this.reportError = config.reportError;\n \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n this.$rules = {\n \"start\" : [{\n token : \"empty_line\",\n regex : '^$'\n }, {\n defaultToken : \"text\"\n }]\n };\n};\n\n(function() {\n\n this.addRules = function(rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function() {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n } else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function() {\n return this.$embeds;\n };\n\n var pushState = function(currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function() {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\"\n ? rule\n : typeof rule.include == \"string\"\n ? rule.include\n : \"\";\n if (includeName) {\n toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function(x) {return !x.next;});\n state.splice.apply(state, args);\n i--;\n }\n \n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(\n rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n );\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n Object.keys(map).forEach(function(className) {\n var a = map[className];\n if (ignoreCase)\n a = a.toLowerCase();\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--; )\n keywords[list[i]] = className;\n });\n if (Object.getPrototypeOf(keywords)) {\n keywords.__proto__ = null;\n }\n this.$keywordList = Object.keys(keywords);\n map = null;\n return ignoreCase\n ? function(value) {return keywords[value.toLowerCase()] || defaultToken }\n : function(value) {return keywords[value] || defaultToken };\n };\n\n this.getKeywords = function() {\n return this.$keywords;\n };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n this.$behaviours = {};\n};\n\n(function () {\n\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n }\n \n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n }\n \n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n }\n \n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n }\n \n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {}\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n }\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nvar TokenIterator = function(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n this.stepBackward = function() {\n this.$tokenIndex -= 1;\n \n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n \n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.stepForward = function() {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentTokenRow = function () {\n return this.$row;\n }; \n this.getCurrentTokenColumn = function() {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n \n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n \n return column; \n };\n this.getCurrentTokenPosition = function() {\n return {row: this.$row, column: this.getCurrentTokenColumn()};\n };\n \n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar Behaviour = acequire(\"../behaviour\").Behaviour;\nvar TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\nvar lang = acequire(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar initContext = function(editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = {rangeCount: editor.multiSelect.rangeCount};\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\n\nvar CstyleBehaviour = function() {\n this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n\n this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n\n this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '\"' || text == \"'\") {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column-1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n } else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1,1]\n };\n }\n }\n });\n\n this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n\n};\n\n\nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nexports.packages = {};\n\naddUnicodePackage({\n L: \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\n Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\n Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\n Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\n Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n M: \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\n Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\n Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\n Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\n N: \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\n No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\n P: \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\n Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\n Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\n Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\n Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\n Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\n Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\n Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\n S: \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\n Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\n Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\n Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\n So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\n Z: \"002000A01680180E2000-200A20282029202F205F3000\",\n Zs: \"002000A01680180E2000-200A202F205F3000\",\n Zl: \"2028\",\n Zp: \"2029\",\n C: \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\n Cc: \"0000-001F007F-009F\",\n Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\n Co: \"E000-F8FF\",\n Cs: \"D800-DFFF\",\n Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\n});\n\nfunction addUnicodePackage (pack) {\n var codePoint = /\\w{4}/g;\n for (var name in pack)\n exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\n}\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Tokenizer = acequire(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = acequire(\"../unicode\");\nvar lang = acequire(\"../lib/lang\");\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\nvar Range = acequire(\"../range\").Range;\n\nvar Mode = function() {\n this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n this.$defaultBehaviour = new CstyleBehaviour();\n\n this.tokenRe = new RegExp(\"^[\"\n + unicode.packages.L\n + unicode.packages.Mn + unicode.packages.Mc\n + unicode.packages.Nd\n + unicode.packages.Pc + \"\\\\$_]+\", \"g\"\n );\n\n this.nonTokenRe = new RegExp(\"^(?:[^\"\n + unicode.packages.L\n + unicode.packages.Mn + unicode.packages.Mc\n + unicode.packages.Nd\n + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\"\n );\n\n this.getTokenizer = function() {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function(state, session, startRow, endRow) {\n var doc = session.doc;\n\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function(line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n\n var uncomment = function(line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function(line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n \n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n else\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n var testRemove = function(line, i) {\n return regexpStart.test(line);\n };\n \n var shouldInsertSpace = function(line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n return true;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n\n\n var minEmptyLength = Infinity;\n iter(function(line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function(state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function(state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n\n this.autoOutdent = function(state, doc, row) {\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function(session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n this.$embeds.push(i);\n this.$modes[i] = new mapping[i]();\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function(scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function() {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\n }\n };\n\n this.$delegator = function(method, args, defaultHandler) {\n var state = args[0];\n if (typeof state != \"string\")\n state = state[0];\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function(state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n \n this.getKeywords = function(append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n \n this.$createKeywordList = function() {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function(state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function(word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n \n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(\n row, endRow - row + 1,\n line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n );\n }\n break;\n }\n}\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n \n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n this.getDocument = function() {\n return this.document;\n };\n this.$insertRight = false;\n this.onChange = function(delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n\n if (delta.start.row > this.row)\n return;\n \n var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n \n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n }\n \n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n \n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column)\n return;\n\n var old = {\n row: this.row,\n column: this.column\n };\n\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n this.detach = function() {\n this.document.removeEventListener(\"change\", this.$onChange);\n };\n this.attach = function(doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0)\n pos.column = 0;\n\n return pos;\n };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar applyDelta = acequire(\"./apply_delta\").applyDelta;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Range = acequire(\"./range\").Range;\nvar Anchor = acequire(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({row: 0, column: 0}, textOrLines);\n } else {\n this.insert({row: 0, column:0}, textOrLines);\n }\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setValue = function(text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({row: 0, column: 0}, text);\n };\n this.getValue = function() {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n this.createAnchor = function(row, column) {\n return new Anchor(this, row, column);\n };\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function(text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function(text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineCharacter = function() {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function(newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineMode = function() {\n return this.$newLineMode;\n };\n this.isNewLine = function(text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n this.getLine = function(row) {\n return this.$lines[row] || \"\";\n };\n this.getLines = function(firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n this.getAllLines = function() {\n return this.getLines(0, this.getLength());\n };\n this.getLength = function() {\n return this.$lines.length;\n };\n this.getTextRange = function(range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n this.getLinesForRange = function(range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n this.insertLines = function(row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n this.removeLines = function(firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n this.insertNewLine = function(position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n this.insert = function(position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n \n return this.insertMergedLines(position, this.$split(text));\n };\n this.insertInLine = function(position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n \n return this.clonePos(end);\n };\n \n this.clippedPos = function(row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {row: row, column: column};\n };\n \n this.clonePos = function(pos) {\n return {row: pos.row, column: pos.column};\n };\n \n this.pos = function(row, column) {\n return {row: row, column: column};\n };\n \n this.$clipPosition = function(position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n this.insertFullLines = function(row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({row: row, column: column}, lines);\n }; \n this.insertMergedLines = function(position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n \n return this.clonePos(end);\n };\n this.remove = function(range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n });\n return this.clonePos(start);\n };\n this.removeInLine = function(row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n }, true);\n \n return this.clonePos(start);\n };\n this.removeFullLines = function(firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\n var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\n var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\n var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n \n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n this.removeNewLine = function(row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n this.replace = function(range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n \n return end;\n };\n this.applyDeltas = function(deltas) {\n for (var i=0; i<deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n this.revertDeltas = function(deltas) {\n for (var i=deltas.length-1; i>=0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n this.applyDelta = function(delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n \n if (isInsert && delta.lines.length > 20000)\n this.$splitAndapplyLargeDelta(delta, 20000);\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n };\n \n this.$splitAndapplyLargeDelta = function(delta, MAX) {\n var lines = delta.lines;\n var l = lines.length;\n var row = delta.start.row; \n var column = delta.start.column;\n var from = 0, to = 0;\n do {\n from = to;\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n if (to > l) {\n delta.lines = chunk;\n delta.start.row = row + from;\n delta.start.column = column;\n break;\n }\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n } while(true);\n };\n this.revertDelta = function(delta) {\n this.applyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n this.indexToPosition = function(index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return {row: i, column: index + lines[i].length + newlineLength};\n }\n return {row: l-1, column: lines[l-1].length};\n };\n this.positionToIndex = function(pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n\n return index + pos.column;\n };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n\n var self = this;\n\n this.$worker = function() {\n if (!self.running) { return; }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n \n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines ++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { \n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n \n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n this.setTokenizer = function(tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n\n this.start(0);\n };\n this.setDocument = function(doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n\n this.stop();\n };\n this.fireUpdateEvent = function(firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", {data: data});\n };\n this.start = function(startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n \n this.scheduleStart = function() {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n }\n\n this.$updateOnChange = function(delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n this.stop();\n };\n this.stop = function() {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n this.getTokens = function(row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n this.getState = function(row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function(row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar Range = acequire(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n};\n\n(function() {\n this.MAX_RANGES = 500;\n \n this.setRegexp = function(regExp) {\n if (this.regExp+\"\" == regExp+\"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function(html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function(match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j --; ) {\n markerLayer.drawSingleLineMarker(\n html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [ folds ];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column,\n last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n\n this.folds.forEach(function(fold) {\n fold.setFoldLine(this);\n }, this);\n}\n\n(function() {\n this.shiftRow = function(shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function(fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function(fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function(a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n\n this.containsRow = function(row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function(callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp, stop, isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function(row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n\n this.addRemoveChars = function(row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row)\n {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n\n this.split = function(row, column) {\n var pos = this.getNextFoldTo(row, column);\n \n if (!pos || pos.kind == \"inside\")\n return null;\n \n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n \n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function(foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function() {\n var ret = [this.range.toString() + \": [\" ];\n\n this.folds.forEach(function(fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function(idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\nvar Range = acequire(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n this.ranges = [];\n};\n\n(function() {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function(pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n\n return -i-1;\n }\n return -i - 1;\n };\n\n this.add = function(range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function(list) {\n var removed = [];\n for (var i = list.length; i--; ) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n\n this.substractPoint = function(pos) {\n var i = this.pointIndex(pos);\n\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n this.merge = function() {\n var removed = [];\n var list = this.ranges;\n \n list = list.sort(function(a, b) {\n return comparePoints(a.start, b.start);\n });\n \n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n \n this.ranges = list;\n\n return removed;\n };\n\n this.contains = function(row, column) {\n return this.pointIndex({row: row, column: column}) >= 0;\n };\n\n this.containsPoint = function(pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function(pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n\n\n this.clipRows = function(startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n\n var startIndex = this.pointIndex({row: startRow, column: 0});\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n\n this.removeAll = function() {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function(session) {\n if (this.session)\n this.detach();\n\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n\n this.session.on('change', this.onChange);\n };\n\n this.detach = function() {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function(delta) {\n if (delta.action == \"insert\"){\n var start = delta.start;\n var end = delta.end;\n } else {\n var end = delta.start;\n var start = delta.end;\n }\n var startRow = start.row;\n var endRow = end.row;\n var lineDif = endRow - startRow;\n\n var colDiff = -start.column + end.column;\n var ranges = this.ranges;\n\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row < startRow)\n continue;\n if (r.start.row > startRow)\n break;\n\n if (r.start.row == startRow && r.start.column >= start.column ) {\n if (r.start.column == start.column && this.$insertRight) {\n } else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$insertRight) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) { \n if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar RangeList = acequire(\"../range_list\").RangeList;\nvar oop = acequire(\"../lib/oop\")\nvar Fold = exports.Fold = function(range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n this.toString = function() {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function(foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function(fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function() {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function(subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function(fold) {\n if (this.range.isEqual(fold))\n return;\n\n if (!this.range.containsRange(fold))\n throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n consumeRange(fold, this.start);\n\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n\n if (cmp == 0)\n return afterStart.addSubFold(fold);\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterEnd = this.subFolds[j];\n\n if (cmp == 0)\n throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n fold.setFoldLine(this.foldLine);\n\n return fold;\n };\n \n this.restoreRange = function(range) {\n return restoreRange(range, this.start);\n };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar FoldLine = acequire(\"./fold_line\").FoldLine;\nvar Fold = acequire(\"./fold\").Fold;\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n this.getFoldAt = function(row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var fold = folds[i];\n if (fold.range.contains(row, column)) {\n if (side == 1 && fold.range.isEnd(row, column)) {\n continue;\n } else if (side == -1 && fold.range.isStart(row, column)) {\n continue;\n }\n return fold;\n }\n }\n };\n this.getFoldsInRange = function(range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else\n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function(ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function(range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function() {\n var folds = [];\n var foldLines = this.$foldData;\n \n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n\n return folds;\n };\n this.getFoldStringAt = function(row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n\n this.getFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n\n this.getFoldedRowCount = function(first, last) {\n var foldData = this.$foldData, rowCount = last-first+1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last-start;\n else\n rowCount = 0; // in one fold\n }\n break;\n } else if (end >= first){\n if (start >= first) // fold inside range\n rowCount -= end-start;\n else\n rowCount -= end-first+1;\n }\n }\n return rowCount;\n };\n\n this.$addFoldLine = function(foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function(a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function(placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n \n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n if (!(startRow < endRow || \n startRow == endRow && startColumn <= endColumn - 2))\n throw new Error(\"The range has to be at least 2 characters width\");\n\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n \n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n folds.forEach(function(subFold) {\n fold.addSubFold(subFold);\n });\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n return fold;\n };\n\n this.addFolds = function(folds) {\n folds.forEach(function(fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function(fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else\n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else\n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else\n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else\n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n\n this.removeFolds = function(folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function(fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function(fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function(subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n }\n fold.subFolds = [];\n };\n\n this.expandFolds = function(folds) {\n folds.forEach(function(fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function(location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n expandInner = true;\n } else if (typeof location == \"number\")\n range = new Range(location, 0, location, this.getLine(location).length);\n else if (\"row\" in location)\n range = Range.fromPoints(location, location);\n else\n range = location;\n \n folds = this.getFoldsInRangeList(range);\n if (expandInner) {\n this.removeFolds(folds);\n } else {\n var subFolds = folds;\n while (subFolds.length) {\n this.expandFolds(subFolds);\n subFolds = this.getFoldsInRangeList(range);\n }\n }\n if (folds.length)\n return folds;\n };\n this.isRowFolded = function(docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(\n foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function() {\n var fd = [];\n fd = this.$foldData.map(function(foldLine) {\n var folds = foldLine.folds.map(function(fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n\n return fd;\n };\n\n this.toggleFold = function(tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1 ) {\n fold = folds[0];\n }\n }\n\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function(row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n if (token && /^comment|string/.test(token.type)) {\n var range = new Range();\n var re = new RegExp(token.type.replace(/\\..*/, \"\\\\.\"));\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n iterator.stepForward();\n }\n \n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n iterator = new TokenIterator(this, row, column);\n \n if (dir != -1) {\n do {\n token = iterator.stepForward();\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n } else\n token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function(startRow, endRow, depth) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow\n ) {\n row = range.end.row;\n try {\n var fold = this.addFold(\"...\", range);\n if (fold)\n fold.collapseChildren = depth;\n } catch(e) {}\n }\n }\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function(style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n \n if (this.$foldStyle == style)\n return;\n\n this.$foldStyle = style;\n \n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function(foldMode) {\n if (this.$foldMode == foldMode)\n return;\n \n this.$foldMode = foldMode;\n \n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n \n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n \n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n \n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function(row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n \n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n \n this.$toggleFoldWidget = function(row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n \n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) \n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n \n return range;\n };\n \n \n \n this.toggleFoldWidget = function(toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n \n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n \n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function(delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function(e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\n\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\nvar Range = acequire(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n this.findMatchingBracket = function(position, chr) {\n if (position.column == 0) return null;\n\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n if (charBeforeCursor == \"\") return null;\n\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n \n this.getBracketRange = function(pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n\n var chr = line.charAt(pos.column-1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {row: pos.row, column: pos.column + 1};\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n \n return range;\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\"\n };\n\n this.$findOpeningBracket = function(bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n \n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n \n while (true) {\n \n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n \n value = token.value;\n valueIndex = value.length - 1;\n }\n \n return null;\n };\n\n this.$findClosingBracket = function(bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n\n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n\n valueIndex = 0;\n }\n \n return null;\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar lang = acequire(\"./lib/lang\");\nvar config = acequire(\"./config\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Selection = acequire(\"./selection\").Selection;\nvar TextMode = acequire(\"./mode/text\").Mode;\nvar Range = acequire(\"./range\").Range;\nvar Document = acequire(\"./document\").Document;\nvar BackgroundTokenizer = acequire(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = acequire(\"./search_highlight\").SearchHighlight;\n\nvar EditSession = function(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function() {\n return this.join(\"\\n\");\n };\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(text);\n\n this.setDocument(text);\n this.selection = new Selection(this);\n\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n};\n\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setDocument = function(doc) {\n if (this.doc)\n this.doc.removeListener(\"change\", this.$onChange);\n\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n\n if (this.bgTokenizer)\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.resetCaches();\n };\n this.getDocument = function() {\n return this.doc;\n };\n this.$resetRowCache = function(docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function(cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n\n return low -1;\n };\n\n this.resetCaches = function() {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer)\n this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function(e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function(delta) {\n this.$modified = true;\n\n this.$resetRowCache(delta.start.row);\n\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\n this.$deltasDoc.push(delta);\n if (removedFolds && removedFolds.length != 0) {\n this.$deltasFold.push({\n action: \"removeFolds\",\n folds: removedFolds\n });\n }\n\n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n this.setValue = function(text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n\n this.$resetRowCache(0);\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n this.getValue =\n this.toString = function() {\n return this.doc.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.getState = function(row) {\n return this.bgTokenizer.getState(row);\n };\n this.getTokens = function(row) {\n return this.bgTokenizer.getTokens(row);\n };\n this.getTokenAt = function(row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n this.setUndoManager = function(undoManager) {\n this.$undoManager = undoManager;\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n\n if (undoManager) {\n var self = this;\n\n this.$syncInformUndoManager = function() {\n self.$informUndoManager.cancel();\n\n if (self.$deltasFold.length) {\n self.$deltas.push({\n group: \"fold\",\n deltas: self.$deltasFold\n });\n self.$deltasFold = [];\n }\n\n if (self.$deltasDoc.length) {\n self.$deltas.push({\n group: \"doc\",\n deltas: self.$deltasDoc\n });\n self.$deltasDoc = [];\n }\n\n if (self.$deltas.length > 0) {\n undoManager.execute({\n action: \"aceupdate\",\n args: [self.$deltas, self],\n merge: self.mergeUndoDeltas\n });\n }\n self.mergeUndoDeltas = false;\n self.$deltas = [];\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n };\n this.markUndoGroup = function() {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n \n this.$defaultUndoManager = {\n undo: function() {},\n redo: function() {},\n reset: function() {}\n };\n this.getUndoManager = function() {\n return this.$undoManager || this.$defaultUndoManager;\n };\n this.getTabString = function() {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n this.setUseSoftTabs = function(val) {\n this.setOption(\"useSoftTabs\", val);\n };\n this.getUseSoftTabs = function() {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n this.setTabSize = function(tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n this.getTabSize = function() {\n return this.$tabSize;\n };\n this.isTabStop = function(position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n\n this.$overwrite = false;\n this.setOverwrite = function(overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n this.getOverwrite = function() {\n return this.$overwrite;\n };\n this.toggleOverwrite = function() {\n this.setOverwrite(!this.$overwrite);\n };\n this.addGutterDecoration = function(row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n this.removeGutterDecoration = function(row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n this.getBreakpoints = function() {\n return this.$breakpoints;\n };\n this.setBreakpoints = function(rows) {\n this.$breakpoints = [];\n for (var i=0; i<rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoints = function() {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n this.setBreakpoint = function(row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoint = function(row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.addMarker = function(range, clazz, type, inFront) {\n var id = this.$markerId++;\n\n var marker = {\n range : range,\n type : type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz : clazz,\n inFront: !!inFront,\n id: id\n };\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n\n return id;\n };\n this.addDynamicMarker = function(marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n\n return marker;\n };\n this.removeMarker = function(markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n if (marker) {\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n }\n };\n this.getMarkers = function(inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n\n this.highlight = function(re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n this.highlightLines = function(startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n this.setAnnotations = function(annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n this.getAnnotations = function() {\n return this.$annotations || [];\n };\n this.clearAnnotations = function() {\n this.setAnnotations([]);\n };\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n } else {\n this.$autoNewLine = \"\\n\";\n }\n };\n this.getWordRange = function(row, column) {\n var line = this.getLine(row);\n\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n\n var start = column;\n if (start > 0) {\n do {\n start--;\n }\n while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n this.getAWordRange = function(row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n this.setNewLineMode = function(newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n this.getNewLineMode = function() {\n return this.doc.getNewLineMode();\n };\n this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n this.getUseWorker = function() { return this.$useWorker; };\n this.onReloadTokenizer = function(e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = {};\n this.$mode = null;\n this.$modeId = null;\n this.setMode = function(mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function(m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function(mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode) \n return;\n\n this.$mode = mode;\n\n this.$stopWorker();\n\n if (this.$useWorker)\n this.$startWorker();\n\n var tokenizer = mode.getTokenizer();\n\n if(tokenizer.addEventListener !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.addEventListener(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n var _self = this;\n this.bgTokenizer.addEventListener(\"update\", function(e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n \n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\");\n }\n };\n\n this.$stopWorker = function() {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function() {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n this.getMode = function() {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n this.setScrollTop = function(scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function() {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n this.setScrollLeft = function(scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n this.getScrollLeft = function() {\n return this.$scrollLeft;\n };\n this.getScreenWidth = function() {\n this.$computeWidth();\n if (this.lineWidgets) \n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n \n this.getLineWidgetMaxWidth = function() {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function(w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function(force) {\n if (this.$modified || force) {\n this.$modified = false;\n\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n this.getLine = function(row) {\n return this.doc.getLine(row);\n };\n this.getLines = function(firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n this.getLength = function() {\n return this.doc.getLength();\n };\n this.getTextRange = function(range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n this.insert = function(position, text) {\n return this.doc.insert(position, text);\n };\n this.remove = function(range) {\n return this.doc.remove(range);\n };\n this.removeFullLines = function(firstRow, lastRow){\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n this.undoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n var lastUndoRange = null;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.group == \"doc\") {\n this.doc.revertDeltas(delta.deltas);\n lastUndoRange =\n this.$getUndoSelection(delta.deltas, true, lastUndoRange);\n } else {\n delta.deltas.forEach(function(foldDelta) {\n this.addFolds(foldDelta.folds);\n }, this);\n }\n }\n this.$fromUndo = false;\n lastUndoRange &&\n this.$undoSelect &&\n !dontSelect &&\n this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.redoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n var lastUndoRange = null;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.group == \"doc\") {\n this.doc.applyDeltas(delta.deltas);\n lastUndoRange =\n this.$getUndoSelection(delta.deltas, false, lastUndoRange);\n }\n }\n this.$fromUndo = false;\n lastUndoRange &&\n this.$undoSelect &&\n !dontSelect &&\n this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.setUndoSelect = function(enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var delta = deltas[0];\n var range, point;\n var lastDeltaIsInsert = false;\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n lastDeltaIsInsert = true;\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n lastDeltaIsInsert = false;\n }\n\n for (var i = 1; i < deltas.length; i++) {\n delta = deltas[i];\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n lastDeltaIsInsert = true;\n } else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n lastDeltaIsInsert = false;\n }\n }\n if (lastUndoRange != null) {\n if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\n lastUndoRange.start.column += range.end.column - range.start.column;\n lastUndoRange.end.column += range.end.column - range.start.column;\n }\n\n var cmp = lastUndoRange.compareRange(range);\n if (cmp == 1) {\n range.setStart(lastUndoRange.start);\n } else if (cmp == -1) {\n range.setEnd(lastUndoRange.end);\n }\n }\n\n return range;\n };\n this.replace = function(range, text) {\n return this.doc.replace(range, text);\n };\n this.moveText = function(fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function(x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n this.indentRows = function(startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row=startRow; row<=endRow; row++)\n this.doc.insertInLine({row: row, column: 0}, indentString);\n };\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function(firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row-firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength()-1) return 0;\n var diff = row-lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function(x){\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n \n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow+diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n this.moveLinesUp = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n this.moveLinesDown = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n this.duplicateLines = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n\n this.$clipRowToDocument = function(row) {\n return Math.max(0, Math.min(row, this.doc.getLength()-1));\n };\n\n this.$clipColumnToRow = function(row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n\n this.$clipPositionToDocument = function(row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len-1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function(range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(\n range.start.row,\n range.start.column\n );\n }\n\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(\n range.end.row,\n range.end.column\n );\n }\n return range;\n };\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min : null,\n max : null\n };\n this.setUseWrapMode = function(useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n this.getUseWrapMode = function() {\n return this.$useWrapMode;\n };\n this.setWrapLimitRange = function(min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = {min: $printMargin, max: $printMargin};\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n\n this.$constrainWrapLimit = function(wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n\n return wrapLimit;\n };\n this.getWrapLimit = function() {\n return this.$wrapLimit;\n };\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n this.getWrapLimitRange = function() {\n return {\n min : this.$wrapLimitRange.min,\n max : this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function(delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n \n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else\n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function(firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row ++;\n } else {\n tokens = [];\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(\n placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(\n lines[row].substring(lastColumn, column),\n tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this),\n foldLine.end.row,\n lines[foldLine.end.row].length + 1\n );\n\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n\n this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n\n var isCode = this.$wrapAsCode;\n\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var displayed = tokens.slice(lastSplit, screenPos);\n var len = displayed.length;\n displayed.join(\"\")\n .replace(/12/g, function() {\n len -= 1;\n })\n .replace(/2/g, function() {\n len -= 1;\n });\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split --;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split --;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n this.$getDisplayTokens = function(str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n this.getRowLength = function(row) {\n if (this.lineWidgets)\n var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n this.getRowLineCount = function(row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function(screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n }\n this.getScreenLastRowColumn = function(screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n this.getDocumentLastRowColumn = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n this.getRowSplitData = function(row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n this.getScreenTabSize = function(screenColumn) {\n return this.$tabSize - screenColumn % this.$tabSize;\n };\n\n\n this.screenToDocumentRow = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n\n this.screenToDocumentColumn = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n this.screenToDocumentPosition = function(screenRow, screenColumn) {\n if (screenRow < 0)\n return {row: 0, column: 0};\n\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row+1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n var splitIndex = Math.floor(screenRow - row);\n column = splits[splitIndex];\n if(splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n\n return {row: docRow, column: docColumn};\n };\n this.documentToScreenPosition = function(docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(docRow, docColumn);\n\n docRow = pos.row;\n docColumn = pos.column;\n\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd, row = 0;\n\n\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ?foldLine.start.row :Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow ++;\n screenRowOffset++;\n }\n textLine = textLine.substring(\n wrapRow[screenRowOffset - 1] || 0, textLine.length\n );\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n this.documentToScreenColumn = function(row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n this.documentToScreenRow = function(docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n this.getScreenLength = function() {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row :Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row ++;\n if (row > foldStart) {\n row = fold.end.row+1;\n fold = this.$foldData[i++];\n foldStart = fold ?fold.start.row :Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n\n return screenRows;\n };\n this.$setFontMetrics = function(fm) {\n if (!this.$enableVarChar) return;\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n \n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n \n return [screenColumn, column];\n };\n };\n \n this.destroy = function() {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n this.$stopWorker();\n };\n function isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n }\n\n}).call(EditSession.prototype);\n\nacequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nacequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function(value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n }, \n wrapMethod: {\n set: function(val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$modified = true;\n this.$resetRowCache(0);\n this.$updateWrapData(0, this.getLength() - 1);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: { initialValue: true },\n firstLineNumber: {\n set: function() {this._signal(\"changeBreakpoint\");},\n initialValue: 1\n },\n useWorker: {\n set: function(useWorker) {\n this.$useWorker = useWorker;\n\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {initialValue: true},\n tabSize: {\n set: function(tabSize) {\n if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n },\n initialValue: 4,\n handlesSet: true\n },\n overwrite: {\n set: function(val) {this._signal(\"changeOverwrite\");},\n initialValue: false\n },\n newLineMode: {\n set: function(val) {this.doc.setNewLineMode(val)},\n get: function() {return this.doc.getNewLineMode()},\n handlesSet: true\n },\n mode: {\n set: function(val) { this.setMode(val) },\n get: function() { return this.$modeId }\n }\n});\n\nexports.EditSession = EditSession;\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar Range = acequire(\"./range\").Range;\n\nvar Search = function() {\n this.$options = {};\n};\n\n(function() {\n this.set = function(options) {\n oop.mixin(this.$options, options);\n return this;\n };\n this.getOptions = function() {\n return lang.copyObject(this.$options);\n };\n this.setOptions = function(options) {\n this.$options = options;\n };\n this.find = function(session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n\n var firstRange = null;\n iterator.forEach(function(range, row, offset) {\n if (!range.start) {\n var column = range.offset + (offset || 0);\n firstRange = new Range(row, column, row, column + range.length);\n if (!range.length && options.start && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(options.start)\n ) {\n firstRange = null;\n return false;\n }\n } else\n firstRange = range;\n return true;\n });\n\n return firstRange;\n };\n this.findAll = function(session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n \n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n \n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex\n ) {\n continue;\n }\n ranges.push(prevRange = new Range(\n row, startIndex, row + len - 1, endIndex\n ));\n if (len > 2)\n row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n i++;\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n j--;\n \n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n this.replace = function(input, replacement) {\n var options = this.$options;\n\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n\n if (!re)\n return;\n\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n \n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--; ) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n \n return replacement;\n };\n\n this.$matchIterator = function(session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n\n var callback;\n if (options.$isMultiLine) {\n var len = re.length;\n var matchIterator = function(line, row, offset) {\n var startIndex = line.search(re[0]);\n if (startIndex == -1)\n return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(row + i);\n if (line.search(re[i]) == -1)\n return;\n }\n\n var endIndex = line.match(re[len - 1])[0].length;\n\n var range = new Range(row, startIndex, row + len - 1, endIndex);\n if (re.offset == 1) {\n range.start.row--;\n range.start.column = Number.MAX_VALUE;\n } else if (offset)\n range.start.column += offset;\n\n if (callback(range))\n return true;\n };\n } else if (options.backwards) {\n var matchIterator = function(line, row, startIndex) {\n var matches = lang.getMatchOffsets(line, re);\n for (var i = matches.length-1; i >= 0; i--)\n if (callback(matches[i], row, startIndex))\n return true;\n };\n } else {\n var matchIterator = function(line, row, startIndex) {\n var matches = lang.getMatchOffsets(line, re);\n for (var i = 0; i < matches.length; i++)\n if (callback(matches[i], row, startIndex))\n return true;\n };\n }\n \n var lineIterator = this.$lineIterator(session, options);\n\n return {\n forEach: function(_callback) {\n callback = _callback;\n lineIterator.forEach(matchIterator);\n }\n };\n };\n\n this.$assembleRegExp = function(options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n\n var needle = options.needle;\n\n if (!options.needle)\n return options.re = false;\n\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch(e) {\n re = false;\n }\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function(needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++) try {\n re.push(new RegExp(parts[i], modifier));\n } catch(e) {\n return false;\n }\n if (parts[0] == \"\") {\n re.shift();\n re.offset = 1;\n } else {\n re.offset = 0;\n }\n return re;\n };\n\n this.$lineIterator = function(session, options) {\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n \n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n\n var forEach = backwards ? function(callback) {\n var row = start.row;\n\n var line = session.getLine(row).substring(0, start.column);\n if (callback(line, row))\n return;\n\n for (row--; row >= firstRow; row--)\n if (callback(session.getLine(row), row))\n return;\n\n if (options.wrap == false)\n return;\n\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (callback(session.getLine(row), row))\n return;\n } : function(callback) {\n var row = start.row;\n\n var line = session.getLine(row).substr(start.column);\n if (callback(line, row, start.column))\n return;\n\n for (row = row+1; row <= lastRow; row++)\n if (callback(session.getLine(row), row))\n return;\n\n if (options.wrap == false)\n return;\n\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (callback(session.getLine(row), row))\n return;\n };\n \n return {forEach: forEach};\n };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keyUtil = acequire(\"../lib/keys\");\nvar useragent = acequire(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n \n\n this.addCommand = function(command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n\n this.commands[command.name] = command;\n\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n\n this.removeCommand = function(command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function(key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n \n key.split(\"|\").forEach(function(keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function(keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n \n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position || 0;\n }\n this._addCommandToBinding = function(keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n\n if (typeof position != \"number\") {\n if (position || command.isDefault)\n position = -100;\n else\n position = getPosition(command);\n }\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function(commands) {\n commands && Object.keys(commands).forEach(function(name) {\n var command = commands[name];\n if (!command)\n return;\n \n if (typeof command === \"string\")\n return this.bindKey(command, name);\n\n if (typeof command === \"function\")\n command = { exec: command };\n\n if (typeof command !== \"object\")\n return;\n\n if (!command.name)\n command.name = name;\n\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function(commands) {\n Object.keys(commands).forEach(function(name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function(keyList) {\n Object.keys(keyList).forEach(function(key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function(command) {\n this.bindKey(command.bindKey, command);\n };\n this.parseKeys = function(keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x});\n var key = parts.pop();\n\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return {key: key, hashId: -1};\n else if (parts.length == 1 && parts[0] == \"shift\")\n return {key: key.toUpperCase(), hashId: -1};\n\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return {key: key, hashId: hashId};\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n \n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {command: \"null\"};\n }\n }\n \n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return {command: command};\n };\n \n this.getStatusText = function(editor, data) {\n return data.$keyChain || \"\";\n };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar MultiHashHandler = acequire(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function(e) {\n return e.command.exec(e.editor, e.args || {});\n });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.exec = function(command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--; ) {\n if (this.exec(command[i], editor, args)) return true;\n }\n return false;\n }\n \n if (typeof command === \"string\")\n command = this.commands[command];\n\n if (!command)\n return false;\n\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n\n var e = {editor: editor, command: command, args: args};\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function(editor) {\n if (this.$inReplay)\n return;\n\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.removeEventListener(\"exec\", this.$addCommandToMacro);\n\n if (!this.macro.length)\n this.macro = this.oldMacro;\n\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function(e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function(editor) {\n if (this.$inReplay || !this.macro)\n return;\n\n if (this.recording)\n return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function(x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function(m) {\n return m.map(function(x){\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"../lib/lang\");\nvar config = acequire(\"../config\");\nvar Range = acequire(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n return {win: win, mac: mac};\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/settings_menu\", function(module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n}, {\n name: \"goToNextError\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/error_marker\", function(module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"goToPreviousError\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/error_marker\", function(module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selectall\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function(editor) { editor.selectAll(); },\n readOnly: true\n}, {\n name: \"centerselection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function(editor) { editor.centerSelection(); },\n readOnly: true\n}, {\n name: \"gotoline\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function(editor) {\n var line = parseInt(prompt(\"Enter line number:\"), 10);\n if (!isNaN(line)) {\n editor.gotoLine(line);\n }\n },\n readOnly: true\n}, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function(editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function(editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleFoldWidget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleParentFoldWidget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldall\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function(editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldOther\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function(editor) { \n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfoldall\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function(editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findnext\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function(editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findprevious\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function(editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"selectOrFindNext\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function(editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext(); \n },\n readOnly: true\n}, {\n name: \"selectOrFindPrevious\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function(editor) { \n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n}, {\n name: \"find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor)});\n },\n readOnly: true\n}, {\n name: \"overwrite\",\n bindKey: \"Insert\",\n exec: function(editor) { editor.toggleOverwrite(); },\n readOnly: true\n}, {\n name: \"selecttostart\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function(editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotostart\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function(editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectup\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function(editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golineup\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function(editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttoend\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function(editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotoend\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function(editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectdown\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function(editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golinedown\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function(editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordleft\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function(editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordleft\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function(editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolinestart\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolinestart\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function(editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectleft\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function(editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoleft\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function(editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordright\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordright\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function(editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolineend\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolineend\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function(editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectright\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoright\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function(editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectpagedown\",\n bindKey: \"Shift-PageDown\",\n exec: function(editor) { editor.selectPageDown(); },\n readOnly: true\n}, {\n name: \"pagedown\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function(editor) { editor.scrollPageDown(); },\n readOnly: true\n}, {\n name: \"gotopagedown\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function(editor) { editor.gotoPageDown(); },\n readOnly: true\n}, {\n name: \"selectpageup\",\n bindKey: \"Shift-PageUp\",\n exec: function(editor) { editor.selectPageUp(); },\n readOnly: true\n}, {\n name: \"pageup\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function(editor) { editor.scrollPageUp(); },\n readOnly: true\n}, {\n name: \"gotopageup\",\n bindKey: \"PageUp\",\n exec: function(editor) { editor.gotoPageUp(); },\n readOnly: true\n}, {\n name: \"scrollup\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"scrolldown\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"selectlinestart\",\n bindKey: \"Shift-Home\",\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectlineend\",\n bindKey: \"Shift-End\",\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"togglerecording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function(editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n}, {\n name: \"replaymacro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function(editor) { editor.commands.replay(editor); },\n readOnly: true\n}, {\n name: \"jumptomatching\",\n bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n exec: function(editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selecttomatching\",\n bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\n exec: function(editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"expandToMatching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function(editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"passKeysToBrowser\",\n bindKey: bindKey(null, null),\n exec: function() {},\n passEvent: true,\n readOnly: true\n}, {\n name: \"copy\",\n exec: function(editor) {\n },\n readOnly: true\n},\n{\n name: \"cut\",\n exec: function(editor) {\n var range = editor.getSelectionRange();\n editor._emit(\"cut\", range);\n\n if (!editor.selection.isEmpty()) {\n editor.session.remove(range);\n editor.clearSelection();\n }\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"paste\",\n exec: function(editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n}, {\n name: \"removeline\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function(editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"duplicateSelection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function(editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"sortlines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function(editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"togglecomment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function(editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"toggleBlockComment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function(editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"modifyNumberUp\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function(editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"modifyNumberDown\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function(editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true)});\n }\n}, {\n name: \"undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function(editor) { editor.undo(); }\n}, {\n name: \"redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function(editor) { editor.redo(); }\n}, {\n name: \"copylinesup\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function(editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesup\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function(editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"copylinesdown\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function(editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesdown\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function(editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"del\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function(editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"backspace\",\n bindKey: bindKey(\n \"Shift-Backspace|Backspace\",\n \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n ),\n exec: function(editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"cut_or_delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function(editor) { \n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n } else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestart\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function(editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineend\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K\"),\n exec: function(editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordleft\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function(editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordright\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function(editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function(editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockoutdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockindent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function(editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"insertstring\",\n exec: function(editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"inserttext\",\n exec: function(editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"splitline\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function(editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"transposeletters\",\n bindKey: bindKey(\"Ctrl-T\", \"Ctrl-T\"),\n exec: function(editor) { editor.transposeLetters(); },\n multiSelectAction: function(editor) {editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"touppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function(editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"tolowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function(editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"expandtoline\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function(editor) {\n var range = editor.selection.getRange();\n\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"joinlines\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n}, {\n name: \"invertSelection\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for(var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n}];\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./lib/fixoldbrowsers\");\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar lang = acequire(\"./lib/lang\");\nvar useragent = acequire(\"./lib/useragent\");\nvar TextInput = acequire(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = acequire(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = acequire(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = acequire(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = acequire(\"./edit_session\").EditSession;\nvar Search = acequire(\"./search\").Search;\nvar Range = acequire(\"./range\").Range;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = acequire(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = acequire(\"./commands/default_commands\").commands;\nvar config = acequire(\"./config\");\nvar TokenIterator = acequire(\"./token_iterator\").TokenIterator;\nvar Editor = function(renderer, session) {\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.keyBinding = new KeyBinding(this);\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n\n this.$blockScrolling = 0;\n this.$search = new Search().set({\n wrap: true\n });\n\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n\n this.$initOperationListeners();\n \n this._$emitInputEvent = lang.delayedCall(function() {\n this._signal(\"input\", {});\n if (this.session && this.session.bgTokenizer)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n \n this.on(\"change\", function(_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n\n this.setSession(session || new EditSession(\"\"));\n config.resetOptions(this);\n config._signal(\"editor\", this);\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function() {\n function last(a) {return a[a.length - 1]}\n\n this.selections = [];\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\n\n this.on(\"change\", function() {\n this.curOp || this.startOperation();\n this.curOp.docChanged = true;\n }.bind(this), true);\n\n this.on(\"changeSelection\", function() {\n this.curOp || this.startOperation();\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n this.startOperation = function(commadEvent) {\n if (this.curOp) {\n if (!commadEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commadEvent) {\n this.previousCommand = null;\n commadEvent = {};\n }\n\n this.$opResetTimer.schedule();\n this.curOp = {\n command: commadEvent.command || {},\n args: commadEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined)\n this.$blockScrolling++;\n };\n\n this.endOperation = function(e) {\n if (this.curOp) {\n if (e && e.returnValue === false)\n return this.curOp = null;\n this._signal(\"beforeEndOperation\");\n var command = this.curOp.command;\n if (command.name && this.$blockScrolling > 0)\n this.$blockScrolling--;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n \n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n this.$historyTracker = function(e) {\n if (!this.$mergeUndoDeltas)\n return;\n\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (\n this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000\n ) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n this.setKeyboardHandler = function(keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n this.getKeyboardHandler = function() {\n return this.keyBinding.getKeyboardHandler();\n };\n this.setSession = function(session) {\n if (this.session == session)\n return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n \n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n \n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n \n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n \n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n \n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n \n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n \n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n \n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n \n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n \n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n \n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n \n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n \n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n \n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n \n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n \n this.onChangeMode();\n \n this.$blockScrolling += 1;\n this.onCursorChange();\n this.$blockScrolling -= 1;\n \n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n \n this.curOp = null;\n \n oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n session && session._signal(\"changeEditor\", {editor: this});\n };\n this.getSession = function() {\n return this.session;\n };\n this.setValue = function(val, cursorPos) {\n this.session.doc.setValue(val);\n\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n\n return val;\n };\n this.getValue = function() {\n return this.session.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.resize = function(force) {\n this.renderer.onResize(force);\n };\n this.setTheme = function(theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n this.getTheme = function() {\n return this.renderer.getTheme();\n };\n this.setStyle = function(style) {\n this.renderer.setStyle(style);\n };\n this.unsetStyle = function(style) {\n this.renderer.unsetStyle(style);\n };\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container, \"fontSize\");\n };\n this.setFontSize = function(size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function() {\n if (this.session.$bracketHighlight) {\n this.session.removeMarker(this.session.$bracketHighlight);\n this.session.$bracketHighlight = null;\n }\n\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function() {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = session.findMatchingBracket(self.getCursorPosition());\n if (pos) {\n var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n } else if (session.$mode.getMatching) {\n var range = session.$mode.getMatching(self.session);\n }\n if (range)\n session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.$highlightTags = function() {\n if (this.$highlightTagPending)\n return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function() {\n self.$highlightTagPending = false;\n \n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n \n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n \n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n if (token.type.indexOf(\"tag-open\") != -1) {\n token = iterator.stepForward();\n if (!token)\n return;\n }\n \n var tag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n \n if (prevToken.value == '<'){\n do {\n prevToken = token;\n token = iterator.stepForward();\n \n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<'){\n depth++;\n } else if (prevToken.value === '</'){\n depth--;\n }\n }\n \n } while (token && depth >= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n \n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '</') {\n depth--;\n }\n }\n } while (prevToken && depth <= 0);\n iterator.stepForward();\n }\n \n if (!token) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn();\n var range = new Range(row, column, row, column+token.value.length);\n var sbm = session.$backMarkers[session.$tagHighlight];\n if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n }\n \n if (range && !session.$tagHighlight)\n session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.focus = function() {\n var _self = this;\n setTimeout(function() {\n _self.textInput.focus();\n });\n this.textInput.focus();\n };\n this.isFocused = function() {\n return this.textInput.isFocused();\n };\n this.blur = function() {\n this.textInput.blur();\n };\n this.onFocus = function(e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n this.onBlur = function(e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n\n this.$cursorChange = function() {\n this.renderer.updateCursor();\n };\n this.onDocumentChange = function(delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n this._signal(\"change\", delta);\n this.$cursorChange();\n this.$updateHighlightActiveLine();\n };\n\n this.onTokenizerUpdate = function(e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n\n\n this.onScrollTopChange = function() {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n\n this.onScrollLeftChange = function() {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n this.onCursorChange = function() {\n this.$cursorChange();\n\n if (!this.$blockScrolling) {\n config.warn(\"Automatically scrolling cursor into view after selection change\",\n \"this will be disabled in the next version\",\n \"set editor.$blockScrolling = Infinity to disable this message\"\n );\n this.renderer.scrollCursorIntoView();\n }\n\n this.$highlightBrackets();\n this.$highlightTags();\n this.$updateHighlightActiveLine();\n this._signal(\"changeSelection\");\n };\n\n this.$updateHighlightActiveLine = function() {\n var session = this.getSession();\n\n var highlight;\n if (this.$highlightActiveLine) {\n if ((this.$selectionStyle != \"line\" || !this.selection.isMultiLine()))\n highlight = this.getCursorPosition();\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function(e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function() {\n var session = this.session;\n\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n\n var startOuter = selection.start.column - 1;\n var endOuter = selection.end.column + 1;\n var line = session.getLine(selection.start.row);\n var lineCols = line.length;\n var needle = line.substring(Math.max(startOuter, 0),\n Math.min(endOuter, lineCols));\n if ((startOuter >= 0 && /^[\\w\\d]/.test(needle)) ||\n (endOuter <= lineCols && /[\\w\\d]$/.test(needle)))\n return;\n\n needle = line.substring(selection.start.column, selection.end.column);\n if (!/^[\\w\\d]+$/.test(needle))\n return;\n\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n\n return re;\n };\n\n\n this.onChangeFrontMarker = function() {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function() {\n this.renderer.updateBackMarkers();\n };\n\n\n this.onChangeBreakpoint = function() {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function() {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n\n this.onChangeMode = function(e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n\n\n this.onChangeWrapLimit = function() {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function() {\n this.renderer.onResize(true);\n };\n\n\n this.onChangeFold = function() {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n this.getSelectedText = function() {\n return this.session.getTextRange(this.getSelectionRange());\n };\n this.getCopyText = function() {\n var text = this.getSelectedText();\n this._signal(\"copy\", text);\n return text;\n };\n this.onCopy = function() {\n this.commands.exec(\"copy\", this);\n };\n this.onCut = function() {\n this.commands.exec(\"cut\", this);\n };\n this.onPaste = function(text, event) {\n var e = {text: text, event: event};\n this.commands.exec(\"paste\", this, e);\n };\n \n this.$handlePaste = function(e) {\n if (typeof e == \"string\") \n e = {text: e};\n this._signal(\"paste\", e);\n var text = e.text;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n this.insert(text);\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n \n if (lines.length > ranges.length || lines.length < 2 || !lines[1])\n return this.commands.exec(\"insertstring\", this, text);\n \n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n this.session.remove(range);\n \n this.session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function(command, args) {\n return this.commands.exec(command, this, args);\n };\n this.insert = function(text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n this.session.mergeUndoDeltas = false;\n this.$mergeNextCommand = false;\n }\n text = transform.text;\n\n }\n }\n \n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite()) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n var end = session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(\n new Range(cursor.row, start + transform.selection[0],\n cursor.row, start + transform.selection[1]));\n } else { // Transform relative to the current row.\n this.selection.setSelectionRange(\n new Range(cursor.row + transform.selection[0],\n transform.selection[1],\n cursor.row + transform.selection[2],\n transform.selection[3]));\n }\n }\n\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n session.insert({row: cursor.row+1, column: 0}, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n };\n\n this.onTextInput = function(text) {\n this.keyBinding.onTextInput(text);\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n this.setOverwrite = function(overwrite) {\n this.session.setOverwrite(overwrite);\n };\n this.getOverwrite = function() {\n return this.session.getOverwrite();\n };\n this.toggleOverwrite = function() {\n this.session.toggleOverwrite();\n };\n this.setScrollSpeed = function(speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n this.getScrollSpeed = function() {\n return this.getOption(\"scrollSpeed\");\n };\n this.setDragDelay = function(dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n this.getDragDelay = function() {\n return this.getOption(\"dragDelay\");\n };\n this.setSelectionStyle = function(val) {\n this.setOption(\"selectionStyle\", val);\n };\n this.getSelectionStyle = function() {\n return this.getOption(\"selectionStyle\");\n };\n this.setHighlightActiveLine = function(shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n this.getHighlightActiveLine = function() {\n return this.getOption(\"highlightActiveLine\");\n };\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n this.setHighlightSelectedWord = function(shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n this.getHighlightSelectedWord = function() {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function(shouldAnimate){\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function(){\n return this.renderer.getAnimatedScroll();\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function() {\n return this.renderer.getDisplayIndentGuides();\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.renderer.getShowPrintMargin();\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.renderer.getPrintMarginColumn();\n };\n this.setReadOnly = function(readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n this.getReadOnly = function() {\n return this.getOption(\"readOnly\");\n };\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n this.setShowFoldWidgets = function(show) {\n this.setOption(\"showFoldWidgets\", show);\n\n };\n this.getShowFoldWidgets = function() {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function() {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.remove = function(dir) {\n if (this.selection.isEmpty()){\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.removeWordRight = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineStart = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineEnd = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.splitLine = function() {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n this.transposeLetters = function() {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column-1);\n range = new Range(cursor.row, column-1, cursor.row, column+1);\n }\n else {\n swap = line.charAt(column-1) + line.charAt(column-2);\n range = new Range(cursor.row, column-2, cursor.row, column);\n }\n this.session.replace(range, swap);\n };\n this.toLowerCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.toUpperCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.indent = function() {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n \n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n this.blockIndent = function() {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n this.blockOutdent = function() {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n this.sortLines = function() {\n var rows = this.$getSelectedRows();\n var session = this.session;\n\n var lines = [];\n for (i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n\n lines.sort(function(a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i-rows.first]);\n }\n };\n this.toggleCommentLines = function() {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function() {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n this.getNumberAt = function(row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if(m.index <= column && m.index+m[0].length >= column){\n var number = {\n value: m[0],\n start: m.index,\n end: m.index+m[0].length\n };\n return number;\n }\n }\n return null;\n };\n this.modifyNumber = function(amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column-1, row, column);\n\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n\n if(fp !== nr.end && column < fp){\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n }\n }\n };\n this.removeLines = function() {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function() {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n\n sel.setSelectionRange(range, reverse);\n }\n };\n this.moveLinesDown = function() {\n this.$moveLines(1, false);\n };\n this.moveLinesUp = function() {\n this.$moveLines(-1, false);\n };\n this.moveText = function(range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function() {\n this.$moveLines(-1, true);\n };\n this.copyLinesDown = function() {\n this.$moveLines(1, true);\n };\n this.$moveLines = function(dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n \n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n \n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n this.$getSelectedRows = function(range) {\n range = (range || this.getSelectionRange()).collapseRows();\n\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function(text) {\n this.renderer.showComposition(this.getCursorPosition());\n };\n\n this.onCompositionUpdate = function(text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function() {\n this.renderer.hideComposition();\n };\n this.getFirstVisibleRow = function() {\n return this.renderer.getFirstVisibleRow();\n };\n this.getLastVisibleRow = function() {\n return this.renderer.getLastVisibleRow();\n };\n this.isRowVisible = function(row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n this.isRowFullyVisible = function(row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n this.$getVisibleRowCount = function() {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function(dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n\n this.$blockScrolling++;\n if (select === true) {\n this.selection.$moveSelection(function(){\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n this.$blockScrolling--;\n\n var scrollTop = renderer.scrollTop;\n\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n\n renderer.animateScrolling(scrollTop);\n };\n this.selectPageDown = function() {\n this.$moveByPage(1, true);\n };\n this.selectPageUp = function() {\n this.$moveByPage(-1, true);\n };\n this.gotoPageDown = function() {\n this.$moveByPage(1, false);\n };\n this.gotoPageUp = function() {\n this.$moveByPage(-1, false);\n };\n this.scrollPageDown = function() {\n this.$moveByPage(1);\n };\n this.scrollPageUp = function() {\n this.$moveByPage(-1);\n };\n this.scrollToRow = function(row) {\n this.renderer.scrollToRow(row);\n };\n this.scrollToLine = function(line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n this.centerSelection = function() {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n this.getCursorPosition = function() {\n return this.selection.getCursor();\n };\n this.getCursorPositionScreen = function() {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n this.getSelectionRange = function() {\n return this.selection.getRange();\n };\n this.selectAll = function() {\n this.$blockScrolling += 1;\n this.selection.selectAll();\n this.$blockScrolling -= 1;\n };\n this.clearSelection = function() {\n this.selection.clearSelection();\n };\n this.moveCursorTo = function(row, column) {\n this.selection.moveCursorTo(row, column);\n };\n this.moveCursorToPosition = function(pos) {\n this.selection.moveCursorToPosition(pos);\n };\n this.jumpToMatching = function(select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var token = prevToken || iterator.stepForward();\n\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n \n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token && token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n \n if (prevToken.value === '<') {\n depth[token.value]++;\n }\n else if (prevToken.value === '</') {\n depth[token.value]--;\n }\n \n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n\n if (!found) {\n prevToken = token;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n if (!matchType)\n return;\n\n var range, pos;\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n if (!range) {\n range = new Range(\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() + i - 1,\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() + i - 1\n );\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)\n range = this.session.getBracketRange(pos);\n }\n }\n else if (matchType === 'tag') {\n if (token && token.type.indexOf('tag-name') !== -1) \n var tag = token.value;\n else\n return;\n\n range = new Range(\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() - 2,\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() - 2\n );\n if (range.compare(cursor.row, cursor.column) === 0) {\n found = false;\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n \n if (prevToken) {\n if (prevToken.type.indexOf('tag-close') !== -1) {\n range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n }\n\n if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth[tag]++;\n }\n else if (prevToken.value === '</') {\n depth[tag]--;\n }\n \n if (depth[tag] === 0)\n found = true;\n }\n }\n } while (prevToken && !found);\n }\n if (token && token.type.indexOf('tag-name')) {\n pos = range.start;\n if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)\n pos = range.end;\n }\n }\n\n pos = range && range.cursor || pos;\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n } else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n } else {\n this.selection.selectTo(pos.row, pos.column);\n }\n } else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n this.gotoLine = function(lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({row: lineNumber - 1, column: column || 0});\n\n this.$blockScrolling += 1;\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n this.$blockScrolling -= 1;\n\n if (!this.isRowFullyVisible(lineNumber - 1))\n this.scrollToLine(lineNumber - 1, true, animate);\n };\n this.navigateTo = function(row, column) {\n this.selection.moveTo(row, column);\n };\n this.navigateUp = function(times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n this.navigateDown = function(times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n this.navigateLeft = function(times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n this.clearSelection();\n };\n this.navigateRight = function(times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n this.clearSelection();\n };\n this.navigateLineStart = function() {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n this.navigateLineEnd = function() {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n this.navigateFileEnd = function() {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n this.navigateFileStart = function() {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n this.navigateWordRight = function() {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n this.navigateWordLeft = function() {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n this.replace = function(replacement, options) {\n if (options)\n this.$search.set(options);\n\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range)\n return replaced;\n\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n if (range !== null) {\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n }\n\n return replaced;\n };\n this.replaceAll = function(replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length)\n return replaced;\n\n this.$blockScrolling += 1;\n\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n\n for (var i = ranges.length - 1; i >= 0; --i) {\n if(this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n this.$blockScrolling -= 1;\n\n return replaced;\n };\n\n this.$tryReplace = function(range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n this.getLastSearchOptions = function() {\n return this.$search.getOptions();\n };\n this.find = function(needle, options, animate) {\n if (!options)\n options = {};\n\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({needle: needle});\n }\n\n this.$search.set(options);\n if (!options.start)\n this.$search.set({start: range});\n\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n this.findNext = function(options, animate) {\n this.find({skipCurrent: true, backwards: false}, options, animate);\n };\n this.findPrevious = function(options, animate) {\n this.find(options, {skipCurrent: true, backwards: true}, animate);\n };\n\n this.revealRange = function(range, animate) {\n this.$blockScrolling += 1;\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n this.$blockScrolling -= 1;\n\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n this.undo = function() {\n this.$blockScrolling++;\n this.session.getUndoManager().undo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.redo = function() {\n this.$blockScrolling++;\n this.session.getUndoManager().redo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.destroy = function() {\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session) {\n this.session.destroy();\n }\n };\n this.setAutoScrollEditorIntoView = function(enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function() {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function() {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())\n ) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function(enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n\n this.$resetCursorStyle = function() {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function(style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", {data: style});\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function() {this.$updateHighlightActiveLine();},\n initialValue: true\n },\n highlightSelectedWord: {\n set: function(shouldHighlight) {this.$onSelectionChange();},\n initialValue: true\n },\n readOnly: {\n set: function(readOnly) {\n this.$resetCursorStyle(); \n },\n initialValue: false\n },\n cursorStyle: {\n set: function(val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {initialValue: true},\n wrapBehavioursEnabled: {initialValue: true},\n autoScrollEditorIntoView: {\n set: function(val) {this.setAutoScrollEditorIntoView(val)}\n },\n keyboardHandler: {\n set: function(val) { this.setKeyboardHandler(val); },\n get: function() { return this.keybindingId; },\n handlesSet: true\n },\n\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n showLineNumbers: \"renderer\",\n showGutter: \"renderer\",\n displayIndentGuides: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\n\nexports.Editor = Editor;\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n this.reset();\n};\n\n(function() {\n this.execute = function(options) {\n var deltaSets = options.args[0];\n this.$doc = options.args[1];\n if (options.merge && this.hasUndo()){\n this.dirtyCounter--;\n deltaSets = this.$undoStack.pop().concat(deltaSets);\n }\n this.$undoStack.push(deltaSets);\n this.$redoStack = [];\n if (this.dirtyCounter < 0) {\n this.dirtyCounter = NaN;\n }\n this.dirtyCounter++;\n };\n this.undo = function(dontSelect) {\n var deltaSets = this.$undoStack.pop();\n var undoSelectionRange = null;\n if (deltaSets) {\n undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\n this.$redoStack.push(deltaSets);\n this.dirtyCounter--;\n }\n\n return undoSelectionRange;\n };\n this.redo = function(dontSelect) {\n var deltaSets = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSets) {\n redoSelectionRange =\n this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\n this.$undoStack.push(deltaSets);\n this.dirtyCounter++;\n }\n return redoSelectionRange;\n };\n this.reset = function() {\n this.$undoStack = [];\n this.$redoStack = [];\n this.dirtyCounter = 0;\n };\n this.hasUndo = function() {\n return this.$undoStack.length > 0;\n };\n this.hasRedo = function() {\n return this.$redoStack.length > 0;\n };\n this.markClean = function() {\n this.dirtyCounter = 0;\n };\n this.isClean = function() {\n return this.dirtyCounter === 0;\n };\n this.$serializeDeltas = function(deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $serializeDelta);\n };\n this.$deserializeDeltas = function(deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\n };\n \n function $serializeDelta(delta){\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines.length == 1 ? null : delta.lines,\n text: delta.lines.length == 1 ? delta.lines[0] : null\n };\n }\n \n function $deserializeDelta(delta) {\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines || [delta.text]\n };\n }\n \n function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\n var deltaSets_new = new Array(deltaSets_old.length);\n for (var i = 0; i < deltaSets_old.length; i++) {\n var deltaSet_old = deltaSets_old[i];\n var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)};\n \n for (var j = 0; j < deltaSet_old.deltas.length; j++) {\n var delta_old = deltaSet_old.deltas[j];\n deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\n }\n \n deltaSets_new[i] = deltaSet_new;\n }\n return deltaSets_new;\n }\n \n}).call(UndoManager.prototype);\n\nexports.UndoManager = UndoManager;\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar oop = acequire(\"../lib/oop\");\nvar lang = acequire(\"../lib/lang\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar Gutter = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n \n this.gutterWidth = 0;\n\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n\n this.$cells = [];\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.setSession = function(session) {\n if (this.session)\n this.session.removeEventListener(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n\n this.addGutterDecoration = function(row, className){\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n\n this.removeGutterDecoration = function(row, className){\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n\n this.setAnnotations = function(annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = {text: []};\n \n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n\n if (rowInfo.text.indexOf(annoText) === -1)\n rowInfo.text.push(annoText);\n\n var type = annotation.type;\n if (type == \"error\")\n rowInfo.className = \" ace_error\";\n else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (type == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\n }\n };\n\n this.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n } else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n } else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n\n this.update = function(config) {\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineNumber = 0;\n \n var gutterRenderer = session.gutterRenderer || this.$renderer;\n\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$cells.length > index + 1) {\n cell = this.$cells.pop();\n this.element.removeChild(cell.element);\n }\n break;\n }\n\n cell = this.$cells[++index];\n if (!cell) {\n cell = {element: null, textNode: null, foldWidget: null};\n cell.element = dom.createElement(\"div\");\n cell.textNode = document.createTextNode('');\n cell.element.appendChild(cell.textNode);\n this.element.appendChild(cell.element);\n this.$cells[index] = cell;\n }\n\n var className = \"ace_gutter-cell \";\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row])\n className += this.$annotations[row].className;\n if (cell.element.className != className)\n cell.element.className = className;\n\n var height = session.getRowLength(row) * config.lineHeight + \"px\";\n if (height != cell.element.style.height)\n cell.element.style.height = height;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n if (!cell.foldWidget) {\n cell.foldWidget = dom.createElement(\"span\");\n cell.element.appendChild(cell.foldWidget);\n }\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (cell.foldWidget.className != className)\n cell.foldWidget.className = className;\n\n var height = config.lineHeight + \"px\";\n if (cell.foldWidget.style.height != height)\n cell.foldWidget.style.height = height;\n } else {\n if (cell.foldWidget) {\n cell.element.removeChild(cell.foldWidget);\n cell.foldWidget = null;\n }\n }\n \n var text = lastLineNumber = gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber;\n if (text != cell.textNode.data)\n cell.textNode.data = text;\n\n row++;\n }\n\n this.element.style.height = config.minHeight + \"px\";\n\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineNumber = session.getLength() + firstLineNumber;\n\n var gutterWidth = gutterRenderer \n ? gutterRenderer.getWidth(session, lastLineNumber, config)\n : lastLineNumber.toString().length * config.characterWidth;\n \n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._emit(\"changeGutterWidth\", gutterWidth);\n }\n };\n\n this.$fixedWidth = false;\n \n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function(show) {\n this.$renderer = !show && {\n getWidth: function() {return \"\"},\n getText: function() {return \"\"}\n };\n };\n \n this.getShowLineNumbers = function() {\n return this.$showLineNumbers;\n };\n \n this.$showFoldWidgets = true;\n this.setShowFoldWidgets = function(show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n \n this.getShowFoldWidgets = function() {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function() {\n if (!this.element.firstChild)\n return {left: 0, right: 0};\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\n this.$padding.right = parseInt(style.paddingRight) || 0;\n return this.$padding;\n };\n\n this.getRegion = function(point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n\n}).call(Gutter.prototype);\n\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar dom = acequire(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n};\n\n(function() {\n\n this.$padding = 0;\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n this.setSession = function(session) {\n this.session = session;\n };\n \n this.setMarkers = function(markers) {\n this.markers = markers;\n };\n\n this.update = function(config) {\n var config = config || this.config;\n if (!config)\n return;\n\n this.config = config;\n\n\n var html = [];\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n this.element.innerHTML = html.join(\"\");\n };\n\n this.$getTop = function(row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0; \n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, \n clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\n layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n\n stringBuilder.push(\n \"<div class='\", clazz, \" ace_br1 ace_start' style='\",\n \"height:\", height, \"px;\",\n \"right:0;\",\n \"top:\", top, \"px;\",\n \"left:\", left, \"px;\", extraStyle, \"'></div>\"\n );\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n\n stringBuilder.push(\n \"<div class='\", clazz, \" ace_br12' style='\",\n \"height:\", height, \"px;\",\n \"width:\", width, \"px;\",\n \"top:\", top, \"px;\",\n \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\n );\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n \n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n stringBuilder.push(\n \"<div class='\", clazz, (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"' style='\",\n \"height:\", height, \"px;\",\n \"right:0;\",\n \"top:\", top, \"px;\",\n \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\n );\n };\n this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n\n stringBuilder.push(\n \"<div class='\", clazz, \"' style='\",\n \"height:\", height, \"px;\",\n \"width:\", width, \"px;\",\n \"top:\", top, \"px;\",\n \"left:\", left, \"px;\", extraStyle || \"\", \"'></div>\"\n );\n };\n\n this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n\n stringBuilder.push(\n \"<div class='\", clazz, \"' style='\",\n \"height:\", height, \"px;\",\n \"top:\", top, \"px;\",\n \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\n );\n };\n \n this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n\n stringBuilder.push(\n \"<div class='\", clazz, \"' style='\",\n \"height:\", height, \"px;\",\n \"top:\", top, \"px;\",\n \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\n );\n };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar useragent = acequire(\"../lib/useragent\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar Text = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n\n this.$updateEolChar = function() {\n var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\"\n ? this.EOL_CHAR_LF\n : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n }\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.element.style.padding = \"0 \" + padding + \"px\";\n };\n\n this.getLineHeight = function() {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n\n this.getCharacterWidth = function() {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n \n this.$setFontMetrics = function(measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n }\n\n this.checkForSizeChanges = function() {\n this.$fontMetrics.checkForSizeChanges();\n };\n this.$pollSizeChanges = function() {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n this.setSession = function(session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n\n this.showInvisibles = false;\n this.setShowInvisibles = function(showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n\n this.showInvisibles = showInvisibles;\n this.$computeTabString();\n return true;\n };\n\n this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function(display) {\n if (this.displayIndentGuides == display)\n return false;\n\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n\n this.$tabStrings = [];\n this.onChangeTabSize =\n this.$computeTabString = function() {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showInvisibles) {\n tabStr.push(\"<span class='ace_invisible ace_invisible_tab'>\"\n + lang.stringRepeat(this.TAB_CHAR, i)\n + \"</span>\");\n } else {\n tabStr.push(lang.stringRepeat(\" \", i));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = \"\";\n var tabClass = \"\";\n if (this.showInvisibles) {\n className += \" ace_invisible\";\n spaceClass = \" ace_invisible_space\";\n tabClass = \" ace_invisible_tab\";\n var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\n var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\n } else{\n var spaceContent = lang.stringRepeat(\" \", this.tabSize);\n var tabContent = spaceContent;\n }\n\n this.$tabStrings[\" \"] = \"<span class='\" + className + spaceClass + \"'>\" + spaceContent + \"</span>\";\n this.$tabStrings[\"\\t\"] = \"<span class='\" + className + tabClass + \"'>\" + tabContent + \"</span>\";\n }\n };\n\n this.updateLines = function(config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n this.scrollLines(config);\n }\n this.config = config;\n\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n } else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx ++;\n }\n\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > last)\n break;\n\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n var html = [];\n this.$renderLine(\n html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false\n );\n lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n lineElement.innerHTML = html.join(\"\");\n }\n row++;\n }\n };\n\n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n\n var el = this.element;\n if (oldConfig.firstRow < config.firstRow)\n for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n el.removeChild(el.firstChild);\n\n if (oldConfig.lastRow > config.lastRow)\n for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n el.removeChild(el.lastChild);\n\n if (config.firstRow < oldConfig.firstRow) {\n var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\n if (el.firstChild)\n el.insertBefore(fragment, el.firstChild);\n else\n el.appendChild(fragment);\n }\n\n if (config.lastRow > oldConfig.lastRow) {\n var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);\n el.appendChild(fragment);\n }\n };\n\n this.$renderLinesFragment = function(config, firstRow, lastRow) {\n var fragment = this.element.ownerDocument.createDocumentFragment();\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n\n var container = dom.createElement(\"div\");\n\n var html = [];\n this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n container.innerHTML = html.join(\"\");\n if (this.$useLineGroups()) {\n container.className = 'ace_line_group';\n fragment.appendChild(container);\n container.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n\n } else {\n while(container.firstChild)\n fragment.appendChild(container.firstChild);\n }\n\n row++;\n }\n return fragment;\n };\n\n this.update = function(config) {\n this.config = config;\n\n var html = [];\n var firstRow = config.firstRow, lastRow = config.lastRow;\n\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > lastRow)\n break;\n\n if (this.$useLineGroups())\n html.push(\"<div class='ace_line_group' style='height:\", config.lineHeight*this.session.getRowLength(row), \"px'>\")\n\n this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n\n if (this.$useLineGroups())\n html.push(\"</div>\"); // end the line group\n\n row++;\n }\n this.element.innerHTML = html.join(\"\");\n };\n\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n\n this.$renderToken = function(stringBuilder, screenColumn, token, value) {\n var self = this;\n var replaceReg = /\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]/g;\n var replaceFunc = function(c, a, b, tabIdx, idx4) {\n if (a) {\n return self.showInvisibles\n ? \"<span class='ace_invisible ace_invisible_space'>\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"</span>\"\n : c;\n } else if (c == \"&\") {\n return \"&\";\n } else if (c == \"<\") {\n return \"<\";\n } else if (c == \">\") {\n return \">\";\n } else if (c == \"\\t\") {\n var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);\n screenColumn += tabSize - 1;\n return self.$tabStrings[tabSize];\n } else if (c == \"\\u3000\") {\n var classToUse = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\n screenColumn += 1;\n return \"<span class='\" + classToUse + \"' style='width:\" +\n (self.config.characterWidth * 2) +\n \"px'>\" + space + \"</span>\";\n } else if (b) {\n return \"<span class='ace_invisible ace_invisible_space ace_invalid'>\" + self.SPACE_CHAR + \"</span>\";\n } else {\n screenColumn += 1;\n return \"<span class='ace_cjk' style='width:\" +\n (self.config.characterWidth * 2) +\n \"px'>\" + c + \"</span>\";\n }\n };\n\n var output = value.replace(replaceReg, replaceFunc);\n\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var style = \"\";\n if (token.type == \"fold\")\n style = \" style='width:\" + (token.value.length * this.config.characterWidth) + \"px;' \";\n stringBuilder.push(\"<span class='\", classes, \"'\", style, \">\", output, \"</span>\");\n }\n else {\n stringBuilder.push(output);\n }\n return screenColumn + value.length;\n };\n\n this.renderIndentGuide = function(stringBuilder, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"], cols/this.tabSize));\n return value.substr(cols);\n } else if (value[0] == \"\\t\") {\n stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"], cols));\n return value.substr(cols);\n }\n return value;\n };\n\n this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(stringBuilder, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n chars += value.length;\n } else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(\n stringBuilder, screenColumn,\n token, value.substring(0, splitChars - chars)\n );\n value = value.substring(splitChars - chars);\n chars = splitChars;\n\n if (!onlyContents) {\n stringBuilder.push(\"</div>\",\n \"<div class='ace_line' style='height:\",\n this.config.lineHeight, \"px'>\"\n );\n }\n\n stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\n\n split ++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(\n stringBuilder, screenColumn, token, value\n );\n }\n }\n }\n };\n\n this.$renderSimpleLine = function(stringBuilder, tokens) {\n var screenColumn = 0;\n var token = tokens[0];\n var value = token.value;\n if (this.displayIndentGuides)\n value = this.renderIndentGuide(stringBuilder, value);\n if (value)\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n for (var i = 1; i < tokens.length; i++) {\n token = tokens[i];\n value = token.value;\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n }\n };\n this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n\n\n if (!onlyContents) {\n stringBuilder.push(\n \"<div class='ace_line' style='height:\", \n this.config.lineHeight * (\n this.$useLineGroups() ? 1 :this.session.getRowLength(row)\n ), \"px'>\"\n );\n }\n\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length)\n this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);\n else\n this.$renderSimpleLine(stringBuilder, tokens);\n }\n\n if (this.showInvisibles) {\n if (foldLine)\n row = foldLine.end.row\n\n stringBuilder.push(\n \"<span class='ace_invisible ace_invisible_eol'>\",\n row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,\n \"</span>\"\n );\n }\n if (!onlyContents)\n stringBuilder.push(\"</div>\");\n };\n\n this.$getFoldLineTokens = function(row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n\n col = from + value.length;\n idx += 1;\n }\n\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n } else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n\n var tokens = session.getTokens(row);\n foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n } else {\n if (isNewRow)\n tokens = session.getTokens(row);\n\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n return renderTokens;\n };\n\n this.$useLineGroups = function() {\n return this.session.getUseWrapMode();\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$measureNode)\n this.$measureNode.parentNode.removeChild(this.$measureNode);\n delete this.$measureNode;\n };\n\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar isIE8;\n\nvar Cursor = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n \n if (isIE8 === undefined)\n isIE8 = !(\"opacity\" in this.element.style);\n\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = (isIE8\n ? this.$updateVisibility\n : this.$updateOpacity).bind(this);\n};\n\n(function() {\n \n this.$updateVisibility = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.visibility = val ? \"\" : \"hidden\";\n };\n this.$updateOpacity = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.opacity = val ? \"\" : \"0\";\n };\n \n\n this.$padding = 0;\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n\n this.setSession = function(session) {\n this.session = session;\n };\n\n this.setBlinking = function(blinking) {\n if (blinking != this.isBlinking){\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n\n this.setBlinkInterval = function(blinkInterval) {\n if (blinkInterval != this.blinkInterval){\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n\n this.setSmoothBlinking = function(smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking && !isIE8) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.$updateCursors = (this.$updateOpacity).bind(this);\n this.restartTimer();\n }\n };\n\n this.addCursor = function() {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n\n this.removeCursor = function() {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n\n this.hideCursor = function() {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.showCursor = function() {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.restartTimer = function() {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n if (this.smoothBlinking) {\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n \n update(true);\n\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible)\n return;\n\n if (this.smoothBlinking) {\n setTimeout(function(){\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }.bind(this));\n }\n \n var blink = function(){\n this.timeoutId = setTimeout(function() {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n\n this.intervalId = setInterval(function() {\n update(true);\n blink();\n }, this.blinkInterval);\n\n blink();\n };\n\n this.getPixelPosition = function(position, onScreen) {\n if (!this.config || !this.session)\n return {left : 0, top : 0};\n\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + pos.column * this.config.characterWidth;\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n\n return {left : cursorLeft, top : cursorTop};\n };\n\n this.update = function(config) {\n this.config = config;\n\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n\n if (selections === undefined || selections.length === 0){\n selections = [{cursor: null}];\n }\n\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n\n var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\n \n if (!this.drawCursor) {\n style.left = pixelPos.left + \"px\";\n style.top = pixelPos.top + \"px\";\n style.width = config.characterWidth + \"px\";\n style.height = config.lineHeight + \"px\";\n } else {\n this.drawCursor(style, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n \n this.drawCursor = null;\n\n this.$setOverwrite = function(overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n\n this.destroy = function() {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar event = acequire(\"./lib/event\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function(parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.element.appendChild(this.inner);\n\n parent.appendChild(this.element);\n\n this.setVisible(false);\n this.skipEvent = false;\n\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n\n this.setVisible = function(isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth = \n this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width =\n this.element.style.width = (this.width || 15) + 5 + \"px\";\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-v';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", {data: this.scrollTop});\n }\n this.skipEvent = false;\n };\n this.getWidth = function() {\n return this.isVisible ? this.width : 0;\n };\n this.setHeight = function(height) {\n this.element.style.height = height + \"px\";\n };\n this.setInnerHeight =\n this.setScrollHeight = function(height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n } else if (this.coeff != 1) {\n this.coeff = 1\n }\n this.inner.style.height = height + \"px\";\n };\n this.setScrollTop = function(scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height =\n this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-h';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", {data: this.scrollLeft});\n }\n this.skipEvent = false;\n };\n this.getHeight = function() {\n return this.isVisible ? this.height : 0;\n };\n this.setWidth = function(width) {\n this.element.style.width = width + \"px\";\n };\n this.setInnerWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollLeft = function(scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"./lib/event\");\n\n\nvar RenderLoop = function(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.window = win || window;\n};\n\n(function() {\n\n\n this.schedule = function(change) {\n this.changes = this.changes | change;\n if (!this.pending && this.changes) {\n this.pending = true;\n var _self = this;\n event.nextFrame(function() {\n _self.pending = false;\n var changes;\n while (changes = _self.changes) {\n _self.changes = 0;\n _self.onRender(changes);\n }\n }, this.window);\n }\n };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\nvar oop = acequire(\"../lib/oop\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar useragent = acequire(\"../lib/useragent\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 0;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n \n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n \n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n \n \n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n \n if (!CHAR_COUNT)\n this.$testFractionalRect();\n this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\n \n this.$characterSize = {width: 0, height: 0};\n this.checkForSizeChanges();\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n \n this.$characterSize = {width: 0, height: 0};\n \n this.$testFractionalRect = function() {\n var el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(el.style);\n el.style.width = \"0.2px\";\n document.documentElement.appendChild(el);\n var w = el.getBoundingClientRect().width;\n if (w > 0 && w < 1)\n CHAR_COUNT = 50;\n else\n CHAR_COUNT = 100;\n el.parentNode.removeChild(el);\n };\n \n this.$setMeasureNodeStyles = function(style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n\n this.checkForSizeChanges = function() {\n var size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", {data: size});\n }\n };\n\n this.$pollSizeChanges = function() {\n if (this.$pollSizeChangesTimer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = setInterval(function() {\n self.checkForSizeChanges();\n }, 500);\n };\n \n this.setPolling = function(val) {\n if (val) {\n this.$pollSizeChanges();\n } else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n\n this.$measureSizes = function() {\n if (CHAR_COUNT === 50) {\n var rect = null;\n try { \n rect = this.$measureNode.getBoundingClientRect();\n } catch(e) {\n rect = {width: 0, height:0 };\n }\n var size = {\n height: rect.height,\n width: rect.width / CHAR_COUNT\n };\n } else {\n var size = {\n height: this.$measureNode.clientHeight,\n width: this.$measureNode.clientWidth / CHAR_COUNT\n };\n }\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n\n this.$measureCharWidth = function(ch) {\n this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n \n this.getCharacterWidth = function(ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n\n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar config = acequire(\"./config\");\nvar useragent = acequire(\"./lib/useragent\");\nvar GutterLayer = acequire(\"./layer/gutter\").Gutter;\nvar MarkerLayer = acequire(\"./layer/marker\").Marker;\nvar TextLayer = acequire(\"./layer/text\").Text;\nvar CursorLayer = acequire(\"./layer/cursor\").Cursor;\nvar HScrollBar = acequire(\"./scrollbar\").HScrollBar;\nvar VScrollBar = acequire(\"./scrollbar\").VScrollBar;\nvar RenderLoop = acequire(\"./renderloop\").RenderLoop;\nvar FontMetrics = acequire(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = \".ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ntext-indent: -1em;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: inherit;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\ntext-indent: 0;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\n-webkit-transition: opacity 0.18s;\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_editor.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block; \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\n-webkit-transition: opacity 0.4s ease 0.05s;\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\n-webkit-transition: opacity 0.05s ease 0.05s;\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n.ace_br1 {border-top-left-radius : 3px;}\\\n.ace_br2 {border-top-right-radius : 3px;}\\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n\";\n\ndom.importCssString(editorCss, \"ace_editor.css\");\n\nvar VirtualRenderer = function(container, theme) {\n var _self = this;\n\n this.container = container || dom.createElement(\"div\");\n this.$keepTextAreaAtCursor = !useragent.isOldIE;\n\n dom.addCssClass(this.container, \"ace_editor\");\n\n this.setTheme(theme);\n\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n this.$markerBack = new MarkerLayer(this.content);\n\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n\n this.$markerFront = new MarkerLayer(this.content);\n\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n\n this.scrollBar = \n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n\n this.scrollTop = 0;\n this.scrollLeft = 0;\n\n this.cursorPos = {\n row : 0,\n column : 0\n };\n\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n\n this.layerConfig = {\n width : 1,\n padding : 0,\n firstRow : 0,\n firstRowScreen: 0,\n lastRow : 0,\n lineHeight : 0,\n characterWidth : 0,\n minHeight : 1,\n maxHeight : 1,\n offset : 0,\n height : 1,\n gutterOffset: 1\n };\n \n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n\n this.$loop = new RenderLoop(\n this.$renderChanges.bind(this),\n this.container.ownerDocument.defaultView\n );\n this.$loop.schedule(this.CHANGE_FULL);\n\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n config._emit(\"renderer\", this);\n};\n\n(function() {\n\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n\n oop.implement(this, EventEmitter);\n\n this.updateCharacterSize = function() {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n };\n this.setSession = function(session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n \n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n \n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n \n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode()\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n this.updateLines = function(firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n\n this.onChangeNewLineMode = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n };\n \n this.onChangeTabSize = function() {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n this.updateText = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n this.updateFull = function(force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function() {\n this.$textLayer.checkForSizeChanges();\n };\n\n this.$changes = 0;\n this.$updateSizeAsync = function() {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n this.onResize = function(force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n \n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n\n if (force)\n this.$gutterLayer.$padding = null;\n\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n };\n \n this.$updateCachedSize = function(force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n changes = changes | this.CHANGE_SCROLL;\n }\n\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n \n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n \n this.gutterWidth = gutterWidth;\n \n this.scrollBarH.element.style.left = \n this.scroller.style.left = gutterWidth + \"px\";\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); \n \n this.scrollBarH.element.style.right = \n this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\n this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\n changes |= this.CHANGE_FULL;\n }\n \n size.$dirty = !width || !height;\n\n if (changes)\n this._signal(\"resize\", oldSize);\n\n return changes;\n };\n\n this.onGutterResize = function() {\n var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else {\n this.$computeLayerConfig();\n this.$loop.schedule(this.CHANGE_MARKER);\n }\n };\n this.adjustWrapLimit = function() {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n this.setAnimatedScroll = function(shouldAnimate){\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n this.getAnimatedScroll = function() {\n return this.$animatedScroll;\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.getOption(\"showInvisibles\");\n };\n this.getDisplayIndentGuides = function() {\n return this.getOption(\"displayIndentGuides\");\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.getOption(\"showPrintMargin\");\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.getOption(\"printMarginColumn\");\n };\n this.getShowGutter = function(){\n return this.getOption(\"showGutter\");\n };\n this.setShowGutter = function(show){\n return this.setOption(\"showGutter\", show);\n };\n\n this.getFadeFoldWidgets = function(){\n return this.getOption(\"fadeFoldWidgets\")\n };\n\n this.setFadeFoldWidgets = function(show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.$updateGutterLineHighlight = function() {\n var pos = this.$cursorLayer.$pixelPos;\n var height = this.layerConfig.lineHeight;\n if (this.session.getUseWrapMode()) {\n var cursor = this.session.selection.getCursor();\n cursor.column = 0;\n pos = this.$cursorLayer.getPixelPosition(cursor, true);\n height *= this.session.getRowLength(cursor.row);\n }\n this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + \"px\";\n this.$gutterLineHighlight.style.height = height + \"px\";\n };\n\n this.$updatePrintMargin = function() {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n\n var style = this.$printMarginEl.style;\n style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n \n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n this.getContainerElement = function() {\n return this.container;\n };\n this.getMouseEventTarget = function() {\n return this.scroller;\n };\n this.getTextAreaContainer = function() {\n return this.container;\n };\n this.$moveTextAreaToCursor = function() {\n if (!this.$keepTextAreaAtCursor)\n return;\n var config = this.layerConfig;\n var posTop = this.$cursorLayer.$pixelPos.top;\n var posLeft = this.$cursorLayer.$pixelPos.left;\n posTop -= config.offset;\n\n var style = this.textarea.style;\n var h = this.lineHeight;\n if (posTop < 0 || posTop > config.height - h) {\n style.top = style.left = \"0\";\n return;\n }\n\n var w = this.characterWidth;\n if (this.$composition) {\n var val = this.textarea.value.replace(/^\\x01+/, \"\");\n w *= (this.session.$getStringScreenWidth(val)[0]+2);\n h += 2;\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n\n posLeft += this.gutterWidth;\n style.height = h + \"px\";\n style.width = w + \"px\";\n style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + \"px\";\n style.top = Math.min(posTop, this.$size.height - h) + \"px\";\n };\n this.getFirstVisibleRow = function() {\n return this.layerConfig.firstRow;\n };\n this.getFirstFullyVisibleRow = function() {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n this.getLastFullyVisibleRow = function() {\n var config = this.layerConfig;\n var lastRow = config.lastRow\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n this.getLastVisibleRow = function() {\n return this.layerConfig.lastRow;\n };\n\n this.$padding = null;\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n \n this.setScrollMargin = function(top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top|0;\n sm.bottom = bottom|0;\n sm.right = right|0;\n sm.left = left|0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n this.getHScrollBarAlwaysVisible = function() {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.getVScrollBarAlwaysVisible = function() {\n return this.$vScrollBarAlwaysVisible;\n };\n this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.$updateScrollBarV = function() {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n this.$updateScrollBarH = function() {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n \n this.$frozen = false;\n this.freeze = function() {\n this.$frozen = true;\n };\n \n this.unfreeze = function() {\n this.$frozen = false;\n };\n\n this.$renderChanges = function(changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return; \n } \n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n \n this._signal(\"beforeRender\");\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL\n ) {\n changes |= this.$computeLayerConfig();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n this.$gutterLayer.element.style.marginTop = (-config.offset) + \"px\";\n this.content.style.marginTop = (-config.offset) + \"px\";\n this.content.style.width = config.width + 2 * this.$padding + \"px\";\n this.content.style.height = config.minHeight + \"px\";\n }\n if (changes & this.CHANGE_H_SCROLL) {\n this.content.style.marginLeft = -this.scrollLeft + \"px\";\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n }\n if (changes & this.CHANGE_FULL) {\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this._signal(\"afterRender\");\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\");\n return;\n }\n\n if (changes & this.CHANGE_TEXT) {\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n\n this._signal(\"afterRender\");\n };\n\n \n this.$autosize = function() {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight,\n Math.max((this.$minLines || 1) * this.lineHeight, height)\n ) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var vScroll = height > maxHeight;\n \n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n \n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n \n this._signal(\"autosize\");\n }\n };\n \n this.$computeLayerConfig = function() {\n var session = this.session;\n var size = this.$size;\n \n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n\n var longestLine = this.$getLongestLine();\n \n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n\n var offset = this.scrollTop % this.lineHeight;\n var minHeight = size.scrollerHeight + this.lineHeight;\n \n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n \n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top,\n Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n \n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n\n offset = this.scrollTop - firstRowScreen * lineHeight;\n\n var changes = 0;\n if (this.layerConfig.width != longestLine) \n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n \n this.layerConfig = {\n width : longestLine,\n padding : this.$padding,\n firstRow : firstRow,\n firstRowScreen: firstRowScreen,\n lastRow : lastRow,\n lineHeight : lineHeight,\n characterWidth : this.characterWidth,\n minHeight : minHeight,\n maxHeight : maxHeight,\n offset : offset,\n gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height : this.$size.scrollerHeight\n };\n\n return changes;\n };\n\n this.$updateLines = function() {\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n\n var layerConfig = this.layerConfig;\n\n if (firstRow > layerConfig.lastRow + 1) { return; }\n if (lastRow < layerConfig.firstRow) { return; }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n\n this.$getLongestLine = function() {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n this.updateFrontMarkers = function() {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n this.updateBackMarkers = function() {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n this.addGutterDecoration = function(row, className){\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function(row, className){\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n this.updateBreakpoints = function(rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.setAnnotations = function(annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.updateCursor = function() {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n this.hideCursor = function() {\n this.$cursorLayer.hideCursor();\n };\n this.showCursor = function() {\n this.$cursorLayer.showCursor();\n };\n\n this.scrollSelectionIntoView = function(anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n var left = pos.left;\n var top = pos.top;\n \n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n \n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n \n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight)\n top -= offset * this.$size.scrollerHeight;\n if (top === 0)\n top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\n top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\n }\n\n var scrollLeft = this.scrollLeft;\n\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n this.getScrollTop = function() {\n return this.session.getScrollTop();\n };\n this.getScrollLeft = function() {\n return this.session.getScrollLeft();\n };\n this.getScrollTopRow = function() {\n return this.scrollTop / this.lineHeight;\n };\n this.getScrollBottomRow = function() {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n this.scrollToRow = function(row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n\n this.alignCursor = function(cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = {row: cursor, column: 0};\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n\n this.session.setScrollTop(offset);\n return offset;\n };\n\n this.STEPS = 8;\n this.$calcSteps = function(fromValue, toValue){\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n\n var func = function(t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n return steps;\n };\n this.scrollToLine = function(line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n\n this.animateScrolling = function(fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n \n if (fromValue == toValue)\n return;\n \n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n \n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n clearInterval(this.$timer);\n\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function() {\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n } else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n } else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n this.scrollToY = function(scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n this.scrollToX = function(scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n this.scrollTo = function(x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(y);\n };\n this.scrollBy = function(deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n this.isScrollableBy = function(deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n\n this.pixelToScreenCoordinates = function(x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\n\n var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = Math.round(offset);\n\n return {row: row, column: col, side: offset - col > 0 ? 1 : -1};\n };\n\n this.screenToTextCoordinates = function(x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\n\n var col = Math.round(\n (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth\n );\n\n var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\n\n return this.session.screenToDocumentPosition(row, Math.max(col, 0));\n };\n this.textToScreenCoordinates = function(row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n\n var x = this.$padding + Math.round(pos.column * this.characterWidth);\n var y = pos.row * this.lineHeight;\n\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n this.visualizeFocus = function() {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n this.visualizeBlur = function() {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n this.showComposition = function(position) {\n if (!this.$composition)\n this.$composition = {\n keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\n cssText: this.textarea.style.cssText\n };\n\n this.$keepTextAreaAtCursor = true;\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n };\n this.setCompositionText = function(text) {\n this.$moveTextAreaToCursor();\n };\n this.hideComposition = function() {\n if (!this.$composition)\n return;\n\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\n this.textarea.style.cssText = this.$composition.cssText;\n this.$composition = null;\n };\n this.setTheme = function(theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange',{theme:theme});\n\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n } else {\n afterLoad(theme);\n }\n\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n dom.importCssString(\n module.cssText,\n module.cssClass,\n _self.container.ownerDocument\n );\n\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n var padding = \"padding\" in module ? module.padding \n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n\n _self._dispatchEvent('themeLoaded', {theme:module});\n cb && cb();\n }\n };\n this.getTheme = function() {\n return this.$themeId;\n };\n this.setStyle = function(style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n this.unsetStyle = function(style) {\n dom.removeCssClass(this.container, style);\n };\n \n this.setCursorStyle = function(style) {\n if (this.scroller.style.cursor != style)\n this.scroller.style.cursor = style;\n };\n this.setMouseCursor = function(cursorStyle) {\n this.scroller.style.cursor = cursorStyle;\n };\n this.destroy = function() {\n this.$textLayer.destroy();\n this.$cursorLayer.destroy();\n };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: {initialValue: false},\n showInvisibles: {\n set: function(value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function(val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function() {\n return this.$showPrintMargin && this.$printMarginColumn; \n }\n },\n showGutter: {\n set: function(show){\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n fadeFoldWidgets: {\n set: function(show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)},\n initialValue: true\n },\n showLineNumbers: {\n set: function(show) {\n this.$gutterLayer.setShowLineNumbers(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function(show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function(shouldHighlight) {\n if (!this.$gutterLineHighlight) {\n this.$gutterLineHighlight = dom.createElement(\"div\");\n this.$gutterLineHighlight.className = \"ace_gutter-active-line\";\n this.$gutter.appendChild(this.$gutterLineHighlight);\n return;\n }\n\n this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\n if (this.$cursorLayer.$pixelPos)\n this.$updateGutterLineHighlight();\n },\n initialValue: false,\n value: true\n },\n hScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function(size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function(name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function(val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function(val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function(val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n theme: {\n set: function(val) { this.setTheme(val) },\n get: function() { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar net = acequire(\"../lib/net\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\nvar config = acequire(\"../config\");\n\nvar WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) {\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n if (acequire.nameToUrl && !acequire.toUrl)\n acequire.toUrl = acequire.nameToUrl;\n \n if (config.get(\"packaged\") || !acequire.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod.id, \"worker\")\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(acequire.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(acequire.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n try {\n var workerSrc = mod.src;\n var Blob = require('w3c-blob');\n var blob = new Blob([ workerSrc ], { type: 'application/javascript' });\n var blobUrl = (window.URL || window.webkitURL).createObjectURL(blob);\n\n this.$worker = new Worker(blobUrl);\n\n } catch(e) {\n if (e instanceof window.DOMException) {\n var blob = this.$workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n\n this.$worker = new Worker(blobURL);\n URL.revokeObjectURL(blobURL);\n } else {\n throw e;\n }\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod.id,\n classname : classname\n });\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch(msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if(this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n this.$workerBlob = function(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.callbackId = 1;\n this.callbacks = {};\n this.messageBuffer = [];\n\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n var _self = this;\n\n this.$worker = {};\n this.$worker.terminate = function() {};\n this.$worker.postMessage = function(e) {\n _self.messageBuffer.push(e);\n if (main) {\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n };\n this.setEmitSync = function(val) { emitSync = val };\n\n var processNext = function() {\n var msg = _self.messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n _self.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (_self.messageBuffer.length)\n processNext();\n });\n};\n\nUIWorkerClient.prototype = WorkerClient.prototype;\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"./range\").Range;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar oop = acequire(\"./lib/oop\");\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate);\n this.$others = others;\n \n this.$onCursorChange = function() {\n setTimeout(function() {\n _self.onCursorChange();\n });\n };\n \n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n this.$undoStackDepth = undoStack.length;\n this.setup();\n\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setup = function() {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n \n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function(other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n this.showOtherMarkers = function() {\n if (this.othersActive) return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function(anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n });\n };\n this.hideOtherMarkers = function() {\n if (!this.othersActive) return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n this.onUpdate = function(delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n \n var range = delta;\n if (range.start.row !== range.end.row) return;\n if (range.start.row !== this.pos.row) return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n \n this.updateAnchors(delta);\n \n if (inMainRange)\n this.length += lengthDiff;\n\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n } else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n \n this.$updating = false;\n this.updateMarkers();\n };\n \n this.updateAnchors = function(delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n \n this.updateMarkers = function() {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function(pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n\n this.onCursorChange = function(event) {\n if (this.$updating || !this.session) return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n } else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n }; \n this.detach = function() {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.removeEventListener(\"change\", this.$onUpdate);\n this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n this.cancel = function() {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n \n if (ctrl && useragent.isMac)\n button = ev.button;\n\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n \n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n \n if (button !== 0)\n return;\n\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function(e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n \n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n \n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n \n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n \n \n editor.$blockScrolling++;\n editor.inVirtualSelectionMode = true;\n \n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function() {\n var tmpSel = selection.toOrientedRange();\n\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n } else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.$blockScrolling--;\n editor.inVirtualSelectionMode = false;\n });\n\n } else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true; \n var initialRange;\n var rectSel = [];\n var blockSelect = function() {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);\n\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n \n editor.$blockScrolling++;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n editor.$blockScrolling--;\n };\n editor.$blockScrolling++;\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n } else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n \n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead); \n else\n selection.moveToPosition(pos);\n editor.$blockScrolling--;\n \n screenCursor = {row: -1, column: -1};\n\n var onMouseSelectionEnd = function(e) {\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n editor.$blockScrolling++;\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n editor.$blockScrolling--;\n };\n\n var onSelectionInterval = blockSelect;\n\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n return e.preventDefault();\n }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(acequire, exports, module) {\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n exec: function(editor) { editor.selectMoreLines(-1); },\n bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelow\",\n exec: function(editor) { editor.selectMoreLines(1); },\n bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorAboveSkipCurrent\",\n exec: function(editor) { editor.selectMoreLines(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelowSkipCurrent\",\n exec: function(editor) { editor.selectMoreLines(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreBefore\",\n exec: function(editor) { editor.selectMore(-1); },\n bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreAfter\",\n exec: function(editor) { editor.selectMore(1); },\n bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextBefore\",\n exec: function(editor) { editor.selectMore(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextAfter\",\n exec: function(editor) { editor.selectMore(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"splitIntoLines\",\n exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n readOnly: true\n}, {\n name: \"alignCursors\",\n exec: function(editor) { editor.alignCursors(); },\n bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n scrollIntoView: \"cursor\"\n}, {\n name: \"findAll\",\n exec: function(editor) { editor.findAll(); },\n bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n bindKey: \"esc\",\n exec: function(editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function(editor) {return editor && editor.inMultiSelectMode}\n}];\n\nvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(acequire, exports, module) {\n\nvar RangeList = acequire(\"./range_list\").RangeList;\nvar Range = acequire(\"./range\").Range;\nvar Selection = acequire(\"./selection\").Selection;\nvar onMouseDown = acequire(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = acequire(\"./lib/event\");\nvar lang = acequire(\"./lib/lang\");\nvar commands = acequire(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = acequire(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = acequire(\"./edit_session\").EditSession;\n(function() {\n this.getSelectionMarkers = function() {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function() {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function(range, $blockChangeEvents) {\n if (!range)\n return;\n\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n\n if (!range.cursor)\n range.cursor = range.end;\n\n var removed = this.rangeList.add(range);\n\n this.$onAddRange(range);\n\n if (removed.length)\n this.$onRemoveRange(removed);\n\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n\n this.toSingleRange = function(range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function(pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function() {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n else if(this.ranges[0])\n this.fromOrientedRange(this.ranges[0]);\n };\n\n this.$onAddRange = function(range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", {range: range});\n };\n\n this.$onRemoveRange = function(removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n\n for (var i = removed.length; i--; ) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n\n this._signal(\"removeRange\", {ranges: removed});\n\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function() {\n if (this.rangeList)\n return;\n\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function() {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n\n this.splitIntoLines = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var range = this.getRange();\n var isBackwards = this.isBackwards();\n var startRow = range.start.row;\n var endRow = range.end.row;\n if (startRow == endRow) {\n if (isBackwards)\n var start = range.end, end = range.start;\n else\n var start = range.start, end = range.end;\n \n this.addRange(Range.fromPoints(end, end));\n this.addRange(Range.fromPoints(start, start));\n return;\n }\n\n var rectSel = [];\n var r = this.getLineRange(startRow, true);\n r.start.column = range.start.column;\n rectSel.push(r);\n\n for (var i = startRow + 1; i < endRow; i++)\n rectSel.push(this.getLineRange(i, true));\n\n r = this.getLineRange(endRow, true);\n r.end.column = range.end.column;\n rectSel.push(r);\n\n rectSel.forEach(this.addRange, this);\n }\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var cursor = this.session.documentToScreenPosition(this.selectionLead);\n var anchor = this.session.documentToScreenPosition(this.selectionAnchor);\n\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n } else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n }\n\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n } else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n\n if (startRow == endRow)\n includeEmptyLines = true;\n\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(\n this.session.screenToDocumentPosition(row, startColumn),\n this.session.screenToDocumentPosition(row, endColumn)\n );\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n var docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n\n if (yBackwards)\n rectSel.reverse();\n\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = acequire(\"./editor\").Editor;\n(function() {\n this.updateSelectionMarkers = function() {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function(orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function(range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n\n this.removeSelectionMarkers = function(ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--; ) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n\n this.$onAddRange = function(e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onRemoveRange = function(e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onMultiSelect = function(e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onSingleSelect = function(e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n\n this.$onMultiSelectExec = function(e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n } else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n } else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n } else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n } else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n }; \n this.forEachSelection = function(cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n \n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n \n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n \n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n \n return result;\n };\n this.exitMultiSelectMode = function() {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n\n this.getSelectedText = function() {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n \n this.$checkMultiselectChange = function(e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row \n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n }\n };\n this.findAll = function(needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n } \n this.$search.set(options);\n \n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n\n this.$blockScrolling += 1;\n var selection = this.multiSelect;\n\n if (!additive)\n selection.toSingleRange(ranges[0]);\n\n for (var i = ranges.length; i--; )\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n \n this.$blockScrolling -= 1;\n\n return ranges.length;\n };\n this.selectMoreLines = function(dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n } else {\n var anchor = lead;\n }\n\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n } else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip)\n var toRemove = range.cursor;\n }\n\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function(dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n\n var words = [];\n for (var i = all.length; i--; ) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n };\n this.selectMore = function(dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.$blockScrolling += 1;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.$blockScrolling -= 1;\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function() {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function(r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n \n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n \n if (fr < 0) fr = 0;\n if (lr >= max) lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n } else {\n sameRowRanges.forEach(function(r) {\n sel.substractPoint(r.cursor);\n });\n\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function(r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function(r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n\n this.$reAlignText = function(lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n\n return lines.map(function(line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW, \" \")\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function(e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n\n addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function(e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n } else if (altCursor) {\n reset();\n }\n });\n\n event.addListener(el, \"keyup\", reset);\n event.addListener(el, \"blur\", reset);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\n\nexports.MultiSelect = MultiSelect;\n\n\nacequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function(val) {\n MultiSelect(this);\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n } else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function(val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n return null;\n };\n\n this.indentationBlock = function(session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n\n if (level == -1)\n continue;\n\n if (level <= startLevel)\n break;\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n\n this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n var start = {row: row, column: column + 1};\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n\n if (fw == \"start\" && end.row > start.row) {\n end.row --;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n\n this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n var end = {row: row, column: column};\n var start = session.$findOpeningBracket(bracket, end);\n\n if (!start)\n return;\n\n start.column++;\n end.column--;\n\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = acequire(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar Range = acequire(\"./range\").Range;\n\n\nfunction LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n \n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n this.getRowLength = function(row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.$getWidgetScreenLength = function() {\n var screenRows = 0;\n this.lineWidgets.forEach(function(w){\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n }; \n \n this.$onChangeEditor = function(e) {\n this.attach(e.editor);\n };\n \n this.attach = function(editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n\n if (this.editor == editor)\n return;\n\n this.detach();\n this.editor = editor;\n \n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n this.detach = function(e) {\n var editor = this.editor;\n if (!editor)\n return;\n \n this.editor = null;\n editor.widgetManager = null;\n \n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function(w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n\n this.updateOnFold = function(e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n } else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n \n this.updateOnChange = function(delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n \n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n } else if (delta.action == 'remove') {\n var removed = lineWidgets.splice(startRow + 1, len);\n removed.forEach(function(w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n } else {\n var args = new Array(len);\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n \n this.$updateRows = function() {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var noWidgets = true;\n lineWidgets.forEach(function(w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n\n this.addLineWidget = function(w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n \n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n \n this.session.lineWidgets[w.row] = w;\n \n w.session = this.session;\n \n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n }\n \n if (!w.coverGutter) {\n w.el.style.zIndex = 3;\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n \n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n \n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n \n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n \n this.removeLineWidget = function(w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy) try {\n w.editor.destroy();\n } catch(e){}\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row]\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n } else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n this.$updateRows();\n };\n \n this.getWidgetsAtRow = function(row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n \n this.onWidgetChanged = function(w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n \n this.measureWidgets = function(e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n \n if (!changedWidgets || !changedWidgets.length) return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el) continue;\n if (w.session != this.session) continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n \n w.h = w.el.offsetHeight;\n \n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n \n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n \n this.renderWidgets = function(e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n \n while (first > 0 && !lineWidgets[first])\n first--;\n \n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el) continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n \n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n \n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n \n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n } else {\n w.el.style.right = \"\";\n }\n }\n };\n \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\nvar LineWidgets = acequire(\"../line_widgets\").LineWidgets;\nvar dom = acequire(\"../lib/dom\");\nvar Range = acequire(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n \n var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n \n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n \n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n \n \n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n \n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n } else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n } else if (oldWidget) {\n return;\n } else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n \n var w = {\n row: pos.row, \n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n \n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n \n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"<br>\");\n \n el.appendChild(dom.createElement(\"div\"));\n \n var kb = function(_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {command: \"null\"};\n }\n };\n \n w.destroy = function() {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n \n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n \n editor.session.widgetManager.addLineWidget(w);\n \n w.el.onmousedown = editor.focus.bind(editor);\n \n editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n .error_widget_wrapper {\\\n background: inherit;\\\n color: inherit;\\\n border:none\\\n }\\\n .error_widget {\\\n border-top: solid 2px;\\\n border-bottom: solid 2px;\\\n margin: 5px 0;\\\n padding: 10px 40px;\\\n white-space: pre-wrap;\\\n }\\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n border-color: #ff5a5a\\\n }\\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n border-color: #F1D817\\\n }\\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n border-color: #5a5a5a\\\n }\\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n border-color: #5aaa5a\\\n }\\\n .error_widget_arrow {\\\n position: absolute;\\\n border: solid 5px;\\\n border-top-color: transparent!important;\\\n border-right-color: transparent!important;\\\n border-left-color: transparent!important;\\\n top: -5px;\\\n }\\\n\", \"\");\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./lib/fixoldbrowsers\");\n\nvar dom = acequire(\"./lib/dom\");\nvar event = acequire(\"./lib/event\");\n\nvar Editor = acequire(\"./editor\").Editor;\nvar EditSession = acequire(\"./edit_session\").EditSession;\nvar UndoManager = acequire(\"./undomanager\").UndoManager;\nvar Renderer = acequire(\"./virtual_renderer\").VirtualRenderer;\nacequire(\"./worker/worker_client\");\nacequire(\"./keyboard/hash_handler\");\nacequire(\"./placeholder\");\nacequire(\"./multi_select\");\nacequire(\"./mode/folding/fold_mode\");\nacequire(\"./theme/textmate\");\nacequire(\"./ext/error_marker\");\n\nexports.config = acequire(\"./config\");\nexports.acequire = acequire;\n\nif (typeof define === \"function\")\n exports.define = define;\nexports.edit = function(el) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n } else if (el) {\n value = dom.getInnerText(el);\n el.innerHTML = \"\";\n }\n\n var doc = exports.createEditSession(value);\n\n var editor = new Editor(new Renderer(el));\n editor.setSession(doc);\n\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode) env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function() {\n event.removeListener(window, \"resize\", env.onResize);\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function(text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n}\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.version = \"1.2.6\";\n});\n (function() {\n ace.acequire([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n });\n })();\n \nmodule.exports = window.ace.acequire(\"ace/ace\");","module.exports = get_blob()\n\nfunction get_blob() {\n if(global.Blob) {\n try {\n new Blob(['asdf'], {type: 'text/plain'})\n return Blob\n } catch(err) {}\n }\n\n var Builder = global.WebKitBlobBuilder ||\n global.MozBlobBuilder ||\n global.MSBlobBuilder\n\n return function(parts, bag) {\n var builder = new Builder\n , endings = bag.endings\n , type = bag.type\n\n if(endings) for(var i = 0, len = parts.length; i < len; ++i) {\n builder.append(parts[i], endings)\n } else for(var i = 0, len = parts.length; i < len; ++i) {\n builder.append(parts[i])\n }\n\n return type ? builder.getBlob(type) : builder.getBlob()\n }\n}\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\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 the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\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 arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\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\nvar 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/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\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/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\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 */\nfunction 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 * 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/**\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 */\nfunction 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 * 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 */\nfunction 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 `_.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 */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\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 */\nfunction cacheHas(cache, key) {\n return cache.has(key);\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 */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\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 */\nfunction 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 */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\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 */\nfunction 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/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar 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 */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar 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. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\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 */\nfunction 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 */\nfunction 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 */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\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 */\nfunction 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 * 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 */\nfunction 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 * 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 */\nfunction 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 */\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\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 */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\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 */\nfunction 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 */\nfunction 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 `_.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 */\nfunction 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 `_.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 */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(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 */\nfunction 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 * 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 */\nfunction 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 // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\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 */\nfunction 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 */\nfunction 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 // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\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 * 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 */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\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 */\nfunction 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 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 */\nfunction 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 */\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\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 */\nvar 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 * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((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 * 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 */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\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 */\nfunction 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 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 */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\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 */\nfunction 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 * 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\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 */\nfunction 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 * 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 */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== 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 */\nvar 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 */\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 * 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 */\nvar isBuffer = nativeIsBuffer || stubFalse;\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 */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\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 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 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 != 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 */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\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 */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\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 */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\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 */\nfunction 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 */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsonHighlightRules = function() {\n this.$rules = {\n \"start\" : [\n {\n token : \"variable\", // single line\n regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n }, {\n token : \"string\", // single line\n regex : '\"',\n next : \"string\"\n }, {\n token : \"constant.numeric\", // hex\n regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n }, {\n token : \"constant.numeric\", // float\n regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token : \"constant.language.boolean\",\n regex : \"(?:true|false)\\\\b\"\n }, {\n token : \"invalid.illegal\", // single quoted strings are not allowed\n regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n }, {\n token : \"invalid.illegal\", // comments are not allowed\n regex : \"\\\\/\\\\/.*$\"\n }, {\n token : \"paren.lparen\",\n regex : \"[[({]\"\n }, {\n token : \"paren.rparen\",\n regex : \"[\\\\])}]\"\n }, {\n token : \"text\",\n regex : \"\\\\s+\"\n }\n ],\n \"string\" : [\n {\n token : \"constant.language.escape\",\n regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n }, {\n token : \"string\",\n regex : '[^\"\\\\\\\\]+'\n }, {\n token : \"string\",\n regex : '\"',\n next : \"start\"\n }, {\n token : \"string\",\n regex : \"\",\n next : \"start\"\n }\n ]\n };\n \n};\n\noop.inherits(JsonHighlightRules, TextHighlightRules);\n\nexports.JsonHighlightRules = JsonHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n this.checkOutdent = function(line, input) {\n if (! /^\\s+$/.test(line))\n return false;\n\n return /^\\s*\\}/.test(input);\n };\n\n this.autoOutdent = function(doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n\n if (!match) return 0;\n\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n if (!openBracePos || openBracePos.row == row) return 0;\n\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column-1), indent);\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar Range = acequire(\"../../range\").Range;\nvar BaseFoldMode = acequire(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(\n this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n );\n this.foldingStopMarker = new RegExp(\n this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n );\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n \n this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n \n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n \n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n \n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n \n return fw;\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n \n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n \n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n \n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n \n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n } else if (foldStyle != \"all\")\n range = null;\n }\n \n return range;\n }\n\n if (foldStyle === \"markbegin\")\n return;\n\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n \n this.getSectionRange = function(session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n \n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n } else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n } else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n \n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function(session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n \n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m) continue;\n if (m[1]) depth--;\n else depth++;\n\n if (!depth) break;\n }\n\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextMode = acequire(\"./text\").Mode;\nvar HighlightRules = acequire(\"./json_highlight_rules\").JsonHighlightRules;\nvar MatchingBraceOutdent = acequire(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = acequire(\"./folding/cstyle\").FoldMode;\nvar WorkerClient = acequire(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n this.HighlightRules = HighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n\n if (state == \"start\") {\n var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n if (match) {\n indent += tab;\n }\n }\n\n return indent;\n };\n\n this.checkOutdent = function(state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function(state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n this.createWorker = function(session) {\n var worker = new WorkerClient([\"ace\"], require(\"../worker/json\"), \"JsonWorker\");\n worker.attachToDocument(session.getDocument());\n\n worker.on(\"annotate\", function(e) {\n session.setAnnotations(e.data);\n });\n\n worker.on(\"terminate\", function() {\n session.clearAnnotations();\n });\n\n return worker;\n };\n\n\n this.$id = \"ace/mode/json\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n","module.exports.id = 'ace/mode/json_worker';\nmodule.exports.src = \"\\\"no use strict\\\";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\\\"\\\";testPath;){var alias=paths[testPath];if(\\\"string\\\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\\\/*$/,\\\"/\\\")+(tail||alias.main||alias.name);if(alias===!1)return\\\"\\\";var i=testPath.lastIndexOf(\\\"/\\\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\\\"log\\\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\\\"error\\\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\\\"!\\\")){var chunks=moduleName.split(\\\"!\\\");return window.normalizeModule(parentId,chunks[0])+\\\"!\\\"+window.normalizeModule(parentId,chunks[1])}if(\\\".\\\"==moduleName.charAt(0)){var base=parentId.split(\\\"/\\\").slice(0,-1).join(\\\"/\\\");for(moduleName=(base?base+\\\"/\\\":\\\"\\\")+moduleName;-1!==moduleName.indexOf(\\\".\\\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\\\.\\\\//,\\\"\\\").replace(/\\\\/\\\\.\\\\//,\\\"/\\\").replace(/[^\\\\/]+\\\\/\\\\.\\\\.\\\\//,\\\"\\\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\\\"worker.js acequire() accepts only (parentId, id) as arguments\\\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\\\"unable to load \\\"+id);var path=resolveModuleId(id,window.acequire.tlns);return\\\".js\\\"!=path.slice(-3)&&(path+=\\\".js\\\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\\\"string\\\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\\\"function\\\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\\\"require\\\",\\\"exports\\\",\\\"module\\\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\\\"require\\\":return req;case\\\"exports\\\":return module.exports;case\\\"module\\\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\\\"ace/lib/event_emitter\\\").EventEmitter,oop=window.acequire(\\\"ace/lib/oop\\\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\\\"call\\\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\\\"event\\\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\\\"Unknown command:\\\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\\\"ace/lib/es5-shim\\\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define(\\\"ace/lib/oop\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\\\"ace/range\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return\\\"Range: [\\\"+this.start.row+\\\"/\\\"+this.start.column+\\\"] -> [\\\"+this.end.row+\\\"/\\\"+this.end.column+\\\"]\\\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\\\"object\\\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\\\"object\\\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\\\"ace/apply_delta\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\\\"\\\";switch(delta.action){case\\\"insert\\\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\\\"remove\\\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\\\"ace/lib/event_emitter\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\\\"object\\\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\\\"unshift\\\":\\\"push\\\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\\\"ace/anchor\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/lib/event_emitter\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.column<point2.column;return point1.row<point2.row||point1.row==point2.row&&bColIsAfter}function $getTransformedPoint(delta,point,moveIfEqual){var deltaIsInsert=\\\"insert\\\"==delta.action,deltaRowShift=(deltaIsInsert?1:-1)*(delta.end.row-delta.start.row),deltaColShift=(deltaIsInsert?1:-1)*(delta.end.column-delta.start.column),deltaStart=delta.start,deltaEnd=deltaIsInsert?deltaStart:delta.end;return $pointsInOrder(point,deltaStart,moveIfEqual)?{row:point.row,column:point.column}:$pointsInOrder(deltaEnd,point,!moveIfEqual)?{row:point.row+deltaRowShift,column:point.column+(point.row==deltaEnd.row?deltaColShift:0)}:{row:deltaStart.row,column:deltaStart.column}}oop.implement(this,EventEmitter),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(delta){if(!(delta.start.row==delta.end.row&&delta.start.row!=this.row||delta.start.row>this.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\\\"change\\\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\\\"change\\\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\\\"change\\\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\\\"ace/document\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/apply_delta\\\",\\\"ace/lib/event_emitter\\\",\\\"ace/range\\\",\\\"ace/anchor\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),applyDelta=acequire(\\\"./apply_delta\\\").applyDelta,EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Range=acequire(\\\"./range\\\").Range,Anchor=acequire(\\\"./anchor\\\").Anchor,Document=function(textOrLines){this.$lines=[\\\"\\\"],0===textOrLines.length?this.$lines=[\\\"\\\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\\\"aaa\\\".split(/a/).length?function(text){return text.replace(/\\\\r\\\\n|\\\\r/g,\\\"\\\\n\\\").split(\\\"\\\\n\\\")}:function(text){return text.split(/\\\\r\\\\n|\\\\r|\\\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\\\r\\\\n|\\\\r|\\\\n)/m);this.$autoNewLine=match?match[1]:\\\"\\\\n\\\",this._signal(\\\"changeNewLineMode\\\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\\\"windows\\\":return\\\"\\\\r\\\\n\\\";case\\\"unix\\\":return\\\"\\\\n\\\";default:return this.$autoNewLine||\\\"\\\\n\\\"}},this.$autoNewLine=\\\"\\\",this.$newLineMode=\\\"auto\\\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\\\"changeNewLineMode\\\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\\\"\\\\r\\\\n\\\"==text||\\\"\\\\r\\\"==text||\\\"\\\\n\\\"==text},this.getLine=function(row){return this.$lines[row]||\\\"\\\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\\\"\\\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\\\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\\\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\\\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\\\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\\\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\\\"),this.insertMergedLines(position,[\\\"\\\",\\\"\\\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\\\"\\\"]),column=0):(lines=[\\\"\\\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\\\"remove\\\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\\\"remove\\\",lines:[\\\"\\\",\\\"\\\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\\\"insert\\\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\\\"change\\\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\\\"\\\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\\\"insert\\\"==delta.action?\\\"remove\\\":\\\"insert\\\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\\\"ace/lib/lang\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\\\"\\\").reverse().join(\\\"\\\")},exports.stringRepeat=function(string,count){for(var result=\\\"\\\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\\\s\\\\s*/,trimEndRegexp=/\\\\s\\\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\\\"\\\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\\\"\\\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\\\"object\\\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\\\"object\\\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}if(\\\"[object Object]\\\"!==Object.prototype.toString.call(obj))return obj;copy={};for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\\\]\\\\/\\\\\\\\])/g,\\\"\\\\\\\\$1\\\")},exports.escapeHTML=function(str){return str.replace(/&/g,\\\"&\\\").replace(/\\\"/g,\\\""\\\").replace(/'/g,\\\"'\\\").replace(/</g,\\\"<\\\")},exports.getMatchOffsets=function(string,regExp){var matches=[];return string.replace(regExp,function(str){matches.push({offset:arguments[arguments.length-2],length:str.length})}),matches},exports.deferredCall=function(fcn){var timer=null,callback=function(){timer=null,fcn()},deferred=function(timeout){return deferred.cancel(),timer=setTimeout(callback,timeout||0),deferred};return deferred.schedule=deferred,deferred.call=function(){return this.cancel(),fcn(),deferred},deferred.cancel=function(){return clearTimeout(timer),timer=null,deferred},deferred.isPending=function(){return timer},deferred},exports.delayedCall=function(fcn,defaultTimeout){var timer=null,callback=function(){timer=null,fcn()},_self=function(timeout){null==timer&&(timer=setTimeout(callback,timeout||defaultTimeout))};return _self.delay=function(timeout){timer&&clearTimeout(timer),timer=setTimeout(callback,timeout||defaultTimeout)},_self.schedule=_self,_self.call=function(){this.cancel(),fcn()},_self.cancel=function(){timer&&clearTimeout(timer),timer=null},_self.isPending=function(){return timer},_self}}),ace.define(\\\"ace/worker/mirror\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/range\\\",\\\"ace/document\\\",\\\"ace/lib/lang\\\"],function(acequire,exports){\\\"use strict\\\";acequire(\\\"../range\\\").Range;var Document=acequire(\\\"../document\\\").Document,lang=acequire(\\\"../lib/lang\\\"),Mirror=exports.Mirror=function(sender){this.sender=sender;var doc=this.doc=new Document(\\\"\\\"),deferredUpdate=this.deferredUpdate=lang.delayedCall(this.onUpdate.bind(this)),_self=this;sender.on(\\\"change\\\",function(e){var data=e.data;if(data[0].start)doc.applyDeltas(data);else for(var i=0;data.length>i;i+=2){if(Array.isArray(data[i+1]))var d={action:\\\"insert\\\",start:data[i],lines:data[i+1]};else var d={action:\\\"remove\\\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\\\"ace/mode/json/json_parse\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){\\\"use strict\\\";var at,ch,text,value,escapee={'\\\"':'\\\"',\\\"\\\\\\\\\\\":\\\"\\\\\\\\\\\",\\\"/\\\":\\\"/\\\",b:\\\"\\\\b\\\",f:\\\"\\\\f\\\",n:\\\"\\\\n\\\",r:\\\"\\\\r\\\",t:\\\"\\t\\\"},error=function(m){throw{name:\\\"SyntaxError\\\",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error(\\\"Expected '\\\"+c+\\\"' instead of '\\\"+ch+\\\"'\\\"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string=\\\"\\\";for(\\\"-\\\"===ch&&(string=\\\"-\\\",next(\\\"-\\\"));ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();if(\\\".\\\"===ch)for(string+=\\\".\\\";next()&&ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch;if(\\\"e\\\"===ch||\\\"E\\\"===ch)for(string+=ch,next(),(\\\"-\\\"===ch||\\\"+\\\"===ch)&&(string+=ch,next());ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error(\\\"Bad number\\\"),void 0):number},string=function(){var hex,i,uffff,string=\\\"\\\";if('\\\"'===ch)for(;next();){if('\\\"'===ch)return next(),string;if(\\\"\\\\\\\\\\\"===ch)if(next(),\\\"u\\\"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if(\\\"string\\\"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error(\\\"Bad string\\\")},white=function(){for(;ch&&\\\" \\\">=ch;)next()},word=function(){switch(ch){case\\\"t\\\":return next(\\\"t\\\"),next(\\\"r\\\"),next(\\\"u\\\"),next(\\\"e\\\"),!0;case\\\"f\\\":return next(\\\"f\\\"),next(\\\"a\\\"),next(\\\"l\\\"),next(\\\"s\\\"),next(\\\"e\\\"),!1;case\\\"n\\\":return next(\\\"n\\\"),next(\\\"u\\\"),next(\\\"l\\\"),next(\\\"l\\\"),null}error(\\\"Unexpected '\\\"+ch+\\\"'\\\")},array=function(){var array=[];if(\\\"[\\\"===ch){if(next(\\\"[\\\"),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;for(;ch;){if(array.push(value()),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;next(\\\",\\\"),white()}}error(\\\"Bad array\\\")},object=function(){var key,object={};if(\\\"{\\\"===ch){if(next(\\\"{\\\"),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;for(;ch;){if(key=string(),white(),next(\\\":\\\"),Object.hasOwnProperty.call(object,key)&&error('Duplicate key \\\"'+key+'\\\"'),object[key]=value(),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;next(\\\",\\\"),white()}}error(\\\"Bad object\\\")};return value=function(){switch(white(),ch){case\\\"{\\\":return object();case\\\"[\\\":return array();case'\\\"':return string();case\\\"-\\\":return number();default:return ch>=\\\"0\\\"&&\\\"9\\\">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=\\\" \\\",result=value(),white(),ch&&error(\\\"Syntax error\\\"),\\\"function\\\"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&\\\"object\\\"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({\\\"\\\":result},\\\"\\\"):result}}),ace.define(\\\"ace/mode/json_worker\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/worker/mirror\\\",\\\"ace/mode/json/json_parse\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"../lib/oop\\\"),Mirror=acequire(\\\"../worker/mirror\\\").Mirror,parse=acequire(\\\"./json/json_parse\\\"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:\\\"error\\\"})}this.sender.emit(\\\"annotate\\\",errors)}}.call(JsonWorker.prototype)}),ace.define(\\\"ace/lib/es5-shim\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\\\"sentinel\\\",{}),\\\"sentinel\\\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\\\"function\\\"!=typeof target)throw new TypeError(\\\"Function.prototype.bind called on incompatible \\\"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\\\"__defineGetter__\\\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\\\"XXX\\\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\\\"[object Array]\\\"==_toString(obj)});var boxedString=Object(\\\"a\\\"),splitString=\\\"a\\\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduce of empty array with no initial value\\\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\\\"reduce of empty array with no initial value\\\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\\\"Object.getOwnPropertyDescriptor called on a non-object: \\\";Object.getOwnPropertyDescriptor=function(object,property){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\\\"object\\\"!=typeof prototype)throw new TypeError(\\\"typeof prototype[\\\"+typeof prototype+\\\"] != 'object'\\\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\\\"undefined\\\"==typeof document||doesDefinePropertyWork(document.createElement(\\\"div\\\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\\\"Property description must be an object: \\\",ERR_NON_OBJECT_TARGET=\\\"Object.defineProperty called on non-object: \\\",ERR_ACCESSORS_NOT_SUPPORTED=\\\"getters & setters can not be defined on this javascript engine\\\";Object.defineProperty=function(object,property,descriptor){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\\\"object\\\"!=typeof descriptor&&\\\"function\\\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\\\"value\\\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\\\"get\\\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\\\"set\\\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\\\"function\\\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\\\"\\\";owns(object,name);)name+=\\\"?\\\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\\\"toString\\\",\\\"toLocaleString\\\",\\\"valueOf\\\",\\\"hasOwnProperty\\\",\\\"isPrototypeOf\\\",\\\"propertyIsEnumerable\\\",\\\"constructor\\\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(\\\"Object.keys called on a non-object\\\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\\\"\\t\\\\n\\u000b\\\\f\\\\r   ᠎              \\\\u2028\\\\u2029\\\";if(!String.prototype.trim||ws.trim()){ws=\\\"[\\\"+ws+\\\"]\\\";var trimBeginRegexp=RegExp(\\\"^\\\"+ws+ws+\\\"*\\\"),trimEndRegexp=RegExp(ws+ws+\\\"*$\\\");String.prototype.trim=function(){return(this+\\\"\\\").replace(trimBeginRegexp,\\\"\\\").replace(trimEndRegexp,\\\"\\\")}}var toObject=function(o){if(null==o)throw new TypeError(\\\"can't convert \\\"+o+\\\" to object\\\");return Object(o)}});\";","ace.define(\"ace/mode/yaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\n\nvar YamlHighlightRules = function() {\n this.$rules = {\n \"start\" : [\n {\n token : \"comment\",\n regex : \"#.*$\"\n }, {\n token : \"list.markup\",\n regex : /^(?:-{3}|\\.{3})\\s*(?=#|$)/ \n }, {\n token : \"list.markup\",\n regex : /^\\s*[\\-?](?:$|\\s)/ \n }, {\n token: \"constant\",\n regex: \"!![\\\\w//]+\"\n }, {\n token: \"constant.language\",\n regex: \"[&\\\\*][a-zA-Z0-9-_]+\"\n }, {\n token: [\"meta.tag\", \"keyword\"],\n regex: /^(\\s*\\w.*?)(:(?:\\s+|$))/\n },{\n token: [\"meta.tag\", \"keyword\"],\n regex: /(\\w+?)(\\s*:(?:\\s+|$))/\n }, {\n token : \"keyword.operator\",\n regex : \"<<\\\\w*:\\\\w*\"\n }, {\n token : \"keyword.operator\",\n regex : \"-\\\\s*(?=[{])\"\n }, {\n token : \"string\", // single line\n regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n }, {\n token : \"string\", // multi line string start\n regex : '[|>][-+\\\\d\\\\s]*$',\n next : \"qqstring\"\n }, {\n token : \"string\", // single quoted string\n regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n }, {\n token : \"constant.numeric\", // float\n regex : /(\\b|[+\\-\\.])[\\d_]+(?:(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)/\n }, {\n token : \"constant.numeric\", // other number\n regex : /[+\\-]?\\.inf\\b|NaN\\b|0x[\\dA-Fa-f_]+|0b[10_]+/\n }, {\n token : \"constant.language.boolean\",\n regex : \"\\\\b(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"\n }, {\n token : \"paren.lparen\",\n regex : \"[[({]\"\n }, {\n token : \"paren.rparen\",\n regex : \"[\\\\])}]\"\n }\n ],\n \"qqstring\" : [\n {\n token : \"string\",\n regex : '(?=(?:(?:\\\\\\\\.)|(?:[^:]))*?:)',\n next : \"start\"\n }, {\n token : \"string\",\n regex : '.+'\n }\n ]};\n\n};\n\noop.inherits(YamlHighlightRules, TextHighlightRules);\n\nexports.YamlHighlightRules = YamlHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n this.checkOutdent = function(line, input) {\n if (! /^\\s+$/.test(line))\n return false;\n\n return /^\\s*\\}/.test(input);\n };\n\n this.autoOutdent = function(doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n\n if (!match) return 0;\n\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n if (!openBracePos || openBracePos.row == row) return 0;\n\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column-1), indent);\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar BaseFoldMode = acequire(\"./fold_mode\").FoldMode;\nvar Range = acequire(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n var range = this.indentationBlock(session, row);\n if (range)\n return range;\n\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1 || line[startLevel] != \"#\")\n return;\n\n var startColumn = line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n line = session.getLine(row);\n var level = line.search(re);\n\n if (level == -1)\n continue;\n\n if (line[level] != \"#\")\n break;\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n var indent = line.search(/\\S/);\n var next = session.getLine(row + 1);\n var prev = session.getLine(row - 1);\n var prevIndent = prev.search(/\\S/);\n var nextIndent = next.search(/\\S/);\n\n if (indent == -1) {\n session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n return \"\";\n }\n if (prevIndent == -1) {\n if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n session.foldWidgets[row - 1] = \"\";\n session.foldWidgets[row + 1] = \"\";\n return \"start\";\n }\n } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n if (session.getLine(row - 2).search(/\\S/) == -1) {\n session.foldWidgets[row - 1] = \"start\";\n session.foldWidgets[row + 1] = \"\";\n return \"\";\n }\n }\n\n if (prevIndent!= -1 && prevIndent < indent)\n session.foldWidgets[row - 1] = \"start\";\n else\n session.foldWidgets[row - 1] = \"\";\n\n if (indent < nextIndent)\n return \"start\";\n else\n return \"\";\n };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/yaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/yaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextMode = acequire(\"./text\").Mode;\nvar YamlHighlightRules = acequire(\"./yaml_highlight_rules\").YamlHighlightRules;\nvar MatchingBraceOutdent = acequire(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = acequire(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n this.HighlightRules = YamlHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.foldingRules = new FoldMode();\n this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n this.lineCommentStart = \"#\";\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n\n if (state == \"start\") {\n var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n if (match) {\n indent += tab;\n }\n }\n\n return indent;\n };\n\n this.checkOutdent = function(state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function(state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n\n this.$id = \"ace/mode/yaml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n","ace.define(\"ace/theme/monokai\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-monokai\";\nexports.cssText = \".ace-monokai .ace_gutter {\\\nbackground: #2F3129;\\\ncolor: #8F908A\\\n}\\\n.ace-monokai .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-monokai {\\\nbackground-color: #272822;\\\ncolor: #F8F8F2\\\n}\\\n.ace-monokai .ace_cursor {\\\ncolor: #F8F8F0\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selection {\\\nbackground: #49483E\\\n}\\\n.ace-monokai.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #272822;\\\n}\\\n.ace-monokai .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-monokai .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_marker-layer .ace_active-line {\\\nbackground: #202020\\\n}\\\n.ace-monokai .ace_gutter-active-line {\\\nbackground-color: #272727\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_invisible {\\\ncolor: #52524d\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_tag,\\\n.ace-monokai .ace_keyword,\\\n.ace-monokai .ace_meta.ace_tag,\\\n.ace-monokai .ace_storage {\\\ncolor: #F92672\\\n}\\\n.ace-monokai .ace_punctuation,\\\n.ace-monokai .ace_punctuation.ace_tag {\\\ncolor: #fff\\\n}\\\n.ace-monokai .ace_constant.ace_character,\\\n.ace-monokai .ace_constant.ace_language,\\\n.ace-monokai .ace_constant.ace_numeric,\\\n.ace-monokai .ace_constant.ace_other {\\\ncolor: #AE81FF\\\n}\\\n.ace-monokai .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #F92672\\\n}\\\n.ace-monokai .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #AE81FF\\\n}\\\n.ace-monokai .ace_support.ace_constant,\\\n.ace-monokai .ace_support.ace_function {\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_fold {\\\nbackground-color: #A6E22E;\\\nborder-color: #F8F8F2\\\n}\\\n.ace-monokai .ace_storage.ace_type,\\\n.ace-monokai .ace_support.ace_class,\\\n.ace-monokai .ace_support.ace_type {\\\nfont-style: italic;\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_function,\\\n.ace-monokai .ace_entity.ace_other,\\\n.ace-monokai .ace_entity.ace_other.ace_attribute-name,\\\n.ace-monokai .ace_variable {\\\ncolor: #A6E22E\\\n}\\\n.ace-monokai .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #FD971F\\\n}\\\n.ace-monokai .ace_string {\\\ncolor: #E6DB74\\\n}\\\n.ace-monokai .ace_comment {\\\ncolor: #75715E\\\n}\\\n.ace-monokai .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = acequire(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n unorderedListRE = /[*+-]\\s/;\n\n CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n var ranges = cm.listSelections(), replacements = [];\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].head;\n\n // If we're not in Markdown mode, fall back to normal newlineAndIndent\n var eolState = cm.getStateAfter(pos.line);\n var inner = CodeMirror.innerMode(cm.getMode(), eolState);\n if (inner.mode.name !== \"markdown\") {\n cm.execCommand(\"newlineAndIndent\");\n return;\n } else {\n eolState = inner.state;\n }\n\n var inList = eolState.list !== false;\n var inQuote = eolState.quote !== 0;\n\n var line = cm.getLine(pos.line), match = listRE.exec(line);\n var cursorBeforeBullet = /^\\s*$/.test(line.slice(0, pos.ch));\n if (!ranges[i].empty() || (!inList && !inQuote) || !match || cursorBeforeBullet) {\n cm.execCommand(\"newlineAndIndent\");\n return;\n }\n if (emptyListRE.test(line)) {\n if (!/>\\s*$/.test(line)) cm.replaceRange(\"\", {\n line: pos.line, ch: 0\n }, {\n line: pos.line, ch: pos.ch + 1\n });\n replacements[i] = \"\\n\";\n } else {\n var indent = match[1], after = match[5];\n var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(\">\") >= 0);\n var bullet = numbered ? (parseInt(match[3], 10) + 1) + match[4] : match[2].replace(\"x\", \" \");\n replacements[i] = \"\\n\" + indent + bullet + after;\n\n if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);\n }\n }\n\n cm.replaceSelections(replacements);\n };\n\n // Auto-updating Markdown list numbers when a new item is added to the\n // middle of a list\n function incrementRemainingMarkdownListNumbers(cm, pos) {\n var startLine = pos.line, lookAhead = 0, skipCount = 0;\n var startItem = listRE.exec(cm.getLine(startLine)), startIndent = startItem[1];\n\n do {\n lookAhead += 1;\n var nextLineNumber = startLine + lookAhead;\n var nextLine = cm.getLine(nextLineNumber), nextItem = listRE.exec(nextLine);\n\n if (nextItem) {\n var nextIndent = nextItem[1];\n var newNumber = (parseInt(startItem[3], 10) + lookAhead - skipCount);\n var nextNumber = (parseInt(nextItem[3], 10)), itemNumber = nextNumber;\n\n if (startIndent === nextIndent && !isNaN(nextNumber)) {\n if (newNumber === nextNumber) itemNumber = nextNumber + 1;\n if (newNumber > nextNumber) itemNumber = newNumber + 1;\n cm.replaceRange(\n nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),\n {\n line: nextLineNumber, ch: 0\n }, {\n line: nextLineNumber, ch: nextLine.length\n });\n } else {\n if (startIndent.length > nextIndent.length) return;\n // This doesn't run if the next line immediatley indents, as it is\n // not clear of the users intention (new indented item or same level)\n if ((startIndent.length < nextIndent.length) && (lookAhead === 1)) return;\n skipCount += 1;\n }\n }\n } while (nextItem);\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\nvar CodeMirror = require(\"codemirror\");\n\nCodeMirror.commands.tabAndIndentMarkdownList = function (cm) {\n\tvar ranges = cm.listSelections();\n\tvar pos = ranges[0].head;\n\tvar eolState = cm.getStateAfter(pos.line);\n\tvar inList = eolState.list !== false;\n\n\tif (inList) {\n\t\tcm.execCommand(\"indentMore\");\n\t\treturn;\n\t}\n\n\tif (cm.options.indentWithTabs) {\n\t\tcm.execCommand(\"insertTab\");\n\t}\n\telse {\n\t\tvar spaces = Array(cm.options.tabSize + 1).join(\" \");\n\t\tcm.replaceSelection(spaces);\n\t}\n};\n\nCodeMirror.commands.shiftTabAndUnindentMarkdownList = function (cm) {\n\tvar ranges = cm.listSelections();\n\tvar pos = ranges[0].head;\n\tvar eolState = cm.getStateAfter(pos.line);\n\tvar inList = eolState.list !== false;\n\n\tif (inList) {\n\t\tcm.execCommand(\"indentLess\");\n\t\treturn;\n\t}\n\n\tif (cm.options.indentWithTabs) {\n\t\tcm.execCommand(\"insertTab\");\n\t}\n\telse {\n\t\tvar spaces = Array(cm.options.tabSize + 1).join(\" \");\n\t\tcm.replaceSelection(spaces);\n\t}\n};\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"fullScreen\", false, function(cm, val, old) {\n if (old == CodeMirror.Init) old = false;\n if (!old == !val) return;\n if (val) setFullscreen(cm);\n else setNormal(cm);\n });\n\n function setFullscreen(cm) {\n var wrap = cm.getWrapperElement();\n cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset,\n width: wrap.style.width, height: wrap.style.height};\n wrap.style.width = \"\";\n wrap.style.height = \"auto\";\n wrap.className += \" CodeMirror-fullscreen\";\n document.documentElement.style.overflow = \"hidden\";\n cm.refresh();\n }\n\n function setNormal(cm) {\n var wrap = cm.getWrapperElement();\n wrap.className = wrap.className.replace(/\\s*CodeMirror-fullscreen\\b/, \"\");\n document.documentElement.style.overflow = \"\";\n var info = cm.state.fullScreenRestore;\n wrap.style.width = info.width; wrap.style.height = info.height;\n window.scrollTo(info.scrollLeft, info.scrollTop);\n cm.refresh();\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.modeInfo = [\n {name: \"APL\", mime: \"text/apl\", mode: \"apl\", ext: [\"dyalog\", \"apl\"]},\n {name: \"PGP\", mimes: [\"application/pgp\", \"application/pgp-encrypted\", \"application/pgp-keys\", \"application/pgp-signature\"], mode: \"asciiarmor\", ext: [\"asc\", \"pgp\", \"sig\"]},\n {name: \"ASN.1\", mime: \"text/x-ttcn-asn\", mode: \"asn.1\", ext: [\"asn\", \"asn1\"]},\n {name: \"Asterisk\", mime: \"text/x-asterisk\", mode: \"asterisk\", file: /^extensions\\.conf$/i},\n {name: \"Brainfuck\", mime: \"text/x-brainfuck\", mode: \"brainfuck\", ext: [\"b\", \"bf\"]},\n {name: \"C\", mime: \"text/x-csrc\", mode: \"clike\", ext: [\"c\", \"h\", \"ino\"]},\n {name: \"C++\", mime: \"text/x-c++src\", mode: \"clike\", ext: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"], alias: [\"cpp\"]},\n {name: \"Cobol\", mime: \"text/x-cobol\", mode: \"cobol\", ext: [\"cob\", \"cpy\"]},\n {name: \"C#\", mime: \"text/x-csharp\", mode: \"clike\", ext: [\"cs\"], alias: [\"csharp\", \"cs\"]},\n {name: \"Clojure\", mime: \"text/x-clojure\", mode: \"clojure\", ext: [\"clj\", \"cljc\", \"cljx\"]},\n {name: \"ClojureScript\", mime: \"text/x-clojurescript\", mode: \"clojure\", ext: [\"cljs\"]},\n {name: \"Closure Stylesheets (GSS)\", mime: \"text/x-gss\", mode: \"css\", ext: [\"gss\"]},\n {name: \"CMake\", mime: \"text/x-cmake\", mode: \"cmake\", ext: [\"cmake\", \"cmake.in\"], file: /^CMakeLists.txt$/},\n {name: \"CoffeeScript\", mimes: [\"application/vnd.coffeescript\", \"text/coffeescript\", \"text/x-coffeescript\"], mode: \"coffeescript\", ext: [\"coffee\"], alias: [\"coffee\", \"coffee-script\"]},\n {name: \"Common Lisp\", mime: \"text/x-common-lisp\", mode: \"commonlisp\", ext: [\"cl\", \"lisp\", \"el\"], alias: [\"lisp\"]},\n {name: \"Cypher\", mime: \"application/x-cypher-query\", mode: \"cypher\", ext: [\"cyp\", \"cypher\"]},\n {name: \"Cython\", mime: \"text/x-cython\", mode: \"python\", ext: [\"pyx\", \"pxd\", \"pxi\"]},\n {name: \"Crystal\", mime: \"text/x-crystal\", mode: \"crystal\", ext: [\"cr\"]},\n {name: \"CSS\", mime: \"text/css\", mode: \"css\", ext: [\"css\"]},\n {name: \"CQL\", mime: \"text/x-cassandra\", mode: \"sql\", ext: [\"cql\"]},\n {name: \"D\", mime: \"text/x-d\", mode: \"d\", ext: [\"d\"]},\n {name: \"Dart\", mimes: [\"application/dart\", \"text/x-dart\"], mode: \"dart\", ext: [\"dart\"]},\n {name: \"diff\", mime: \"text/x-diff\", mode: \"diff\", ext: [\"diff\", \"patch\"]},\n {name: \"Django\", mime: \"text/x-django\", mode: \"django\"},\n {name: \"Dockerfile\", mime: \"text/x-dockerfile\", mode: \"dockerfile\", file: /^Dockerfile$/},\n {name: \"DTD\", mime: \"application/xml-dtd\", mode: \"dtd\", ext: [\"dtd\"]},\n {name: \"Dylan\", mime: \"text/x-dylan\", mode: \"dylan\", ext: [\"dylan\", \"dyl\", \"intr\"]},\n {name: \"EBNF\", mime: \"text/x-ebnf\", mode: \"ebnf\"},\n {name: \"ECL\", mime: \"text/x-ecl\", mode: \"ecl\", ext: [\"ecl\"]},\n {name: \"edn\", mime: \"application/edn\", mode: \"clojure\", ext: [\"edn\"]},\n {name: \"Eiffel\", mime: \"text/x-eiffel\", mode: \"eiffel\", ext: [\"e\"]},\n {name: \"Elm\", mime: \"text/x-elm\", mode: \"elm\", ext: [\"elm\"]},\n {name: \"Embedded Javascript\", mime: \"application/x-ejs\", mode: \"htmlembedded\", ext: [\"ejs\"]},\n {name: \"Embedded Ruby\", mime: \"application/x-erb\", mode: \"htmlembedded\", ext: [\"erb\"]},\n {name: \"Erlang\", mime: \"text/x-erlang\", mode: \"erlang\", ext: [\"erl\"]},\n {name: \"Esper\", mime: \"text/x-esper\", mode: \"sql\"},\n {name: \"Factor\", mime: \"text/x-factor\", mode: \"factor\", ext: [\"factor\"]},\n {name: \"FCL\", mime: \"text/x-fcl\", mode: \"fcl\"},\n {name: \"Forth\", mime: \"text/x-forth\", mode: \"forth\", ext: [\"forth\", \"fth\", \"4th\"]},\n {name: \"Fortran\", mime: \"text/x-fortran\", mode: \"fortran\", ext: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"]},\n {name: \"F#\", mime: \"text/x-fsharp\", mode: \"mllike\", ext: [\"fs\"], alias: [\"fsharp\"]},\n {name: \"Gas\", mime: \"text/x-gas\", mode: \"gas\", ext: [\"s\"]},\n {name: \"Gherkin\", mime: \"text/x-feature\", mode: \"gherkin\", ext: [\"feature\"]},\n {name: \"GitHub Flavored Markdown\", mime: \"text/x-gfm\", mode: \"gfm\", file: /^(readme|contributing|history).md$/i},\n {name: \"Go\", mime: \"text/x-go\", mode: \"go\", ext: [\"go\"]},\n {name: \"Groovy\", mime: \"text/x-groovy\", mode: \"groovy\", ext: [\"groovy\", \"gradle\"], file: /^Jenkinsfile$/},\n {name: \"HAML\", mime: \"text/x-haml\", mode: \"haml\", ext: [\"haml\"]},\n {name: \"Haskell\", mime: \"text/x-haskell\", mode: \"haskell\", ext: [\"hs\"]},\n {name: \"Haskell (Literate)\", mime: \"text/x-literate-haskell\", mode: \"haskell-literate\", ext: [\"lhs\"]},\n {name: \"Haxe\", mime: \"text/x-haxe\", mode: \"haxe\", ext: [\"hx\"]},\n {name: \"HXML\", mime: \"text/x-hxml\", mode: \"haxe\", ext: [\"hxml\"]},\n {name: \"ASP.NET\", mime: \"application/x-aspx\", mode: \"htmlembedded\", ext: [\"aspx\"], alias: [\"asp\", \"aspx\"]},\n {name: \"HTML\", mime: \"text/html\", mode: \"htmlmixed\", ext: [\"html\", \"htm\", \"handlebars\", \"hbs\"], alias: [\"xhtml\"]},\n {name: \"HTTP\", mime: \"message/http\", mode: \"http\"},\n {name: \"IDL\", mime: \"text/x-idl\", mode: \"idl\", ext: [\"pro\"]},\n {name: \"Pug\", mime: \"text/x-pug\", mode: \"pug\", ext: [\"jade\", \"pug\"], alias: [\"jade\"]},\n {name: \"Java\", mime: \"text/x-java\", mode: \"clike\", ext: [\"java\"]},\n {name: \"Java Server Pages\", mime: \"application/x-jsp\", mode: \"htmlembedded\", ext: [\"jsp\"], alias: [\"jsp\"]},\n {name: \"JavaScript\", mimes: [\"text/javascript\", \"text/ecmascript\", \"application/javascript\", \"application/x-javascript\", \"application/ecmascript\"],\n mode: \"javascript\", ext: [\"js\"], alias: [\"ecmascript\", \"js\", \"node\"]},\n {name: \"JSON\", mimes: [\"application/json\", \"application/x-json\"], mode: \"javascript\", ext: [\"json\", \"map\"], alias: [\"json5\"]},\n {name: \"JSON-LD\", mime: \"application/ld+json\", mode: \"javascript\", ext: [\"jsonld\"], alias: [\"jsonld\"]},\n {name: \"JSX\", mime: \"text/jsx\", mode: \"jsx\", ext: [\"jsx\"]},\n {name: \"Jinja2\", mime: \"text/jinja2\", mode: \"jinja2\", ext: [\"j2\", \"jinja\", \"jinja2\"]},\n {name: \"Julia\", mime: \"text/x-julia\", mode: \"julia\", ext: [\"jl\"]},\n {name: \"Kotlin\", mime: \"text/x-kotlin\", mode: \"clike\", ext: [\"kt\"]},\n {name: \"LESS\", mime: \"text/x-less\", mode: \"css\", ext: [\"less\"]},\n {name: \"LiveScript\", mime: \"text/x-livescript\", mode: \"livescript\", ext: [\"ls\"], alias: [\"ls\"]},\n {name: \"Lua\", mime: \"text/x-lua\", mode: \"lua\", ext: [\"lua\"]},\n {name: \"Markdown\", mime: \"text/x-markdown\", mode: \"markdown\", ext: [\"markdown\", \"md\", \"mkd\"]},\n {name: \"mIRC\", mime: \"text/mirc\", mode: \"mirc\"},\n {name: \"MariaDB SQL\", mime: \"text/x-mariadb\", mode: \"sql\"},\n {name: \"Mathematica\", mime: \"text/x-mathematica\", mode: \"mathematica\", ext: [\"m\", \"nb\", \"wl\", \"wls\"]},\n {name: \"Modelica\", mime: \"text/x-modelica\", mode: \"modelica\", ext: [\"mo\"]},\n {name: \"MUMPS\", mime: \"text/x-mumps\", mode: \"mumps\", ext: [\"mps\"]},\n {name: \"MS SQL\", mime: \"text/x-mssql\", mode: \"sql\"},\n {name: \"mbox\", mime: \"application/mbox\", mode: \"mbox\", ext: [\"mbox\"]},\n {name: \"MySQL\", mime: \"text/x-mysql\", mode: \"sql\"},\n {name: \"Nginx\", mime: \"text/x-nginx-conf\", mode: \"nginx\", file: /nginx.*\\.conf$/i},\n {name: \"NSIS\", mime: \"text/x-nsis\", mode: \"nsis\", ext: [\"nsh\", \"nsi\"]},\n {name: \"NTriples\", mimes: [\"application/n-triples\", \"application/n-quads\", \"text/n-triples\"],\n mode: \"ntriples\", ext: [\"nt\", \"nq\"]},\n {name: \"Objective-C\", mime: \"text/x-objectivec\", mode: \"clike\", ext: [\"m\", \"mm\"], alias: [\"objective-c\", \"objc\"]},\n {name: \"OCaml\", mime: \"text/x-ocaml\", mode: \"mllike\", ext: [\"ml\", \"mli\", \"mll\", \"mly\"]},\n {name: \"Octave\", mime: \"text/x-octave\", mode: \"octave\", ext: [\"m\"]},\n {name: \"Oz\", mime: \"text/x-oz\", mode: \"oz\", ext: [\"oz\"]},\n {name: \"Pascal\", mime: \"text/x-pascal\", mode: \"pascal\", ext: [\"p\", \"pas\"]},\n {name: \"PEG.js\", mime: \"null\", mode: \"pegjs\", ext: [\"jsonld\"]},\n {name: \"Perl\", mime: \"text/x-perl\", mode: \"perl\", ext: [\"pl\", \"pm\"]},\n {name: \"PHP\", mimes: [\"text/x-php\", \"application/x-httpd-php\", \"application/x-httpd-php-open\"], mode: \"php\", ext: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"]},\n {name: \"Pig\", mime: \"text/x-pig\", mode: \"pig\", ext: [\"pig\"]},\n {name: \"Plain Text\", mime: \"text/plain\", mode: \"null\", ext: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\"]},\n {name: \"PLSQL\", mime: \"text/x-plsql\", mode: \"sql\", ext: [\"pls\"]},\n {name: \"PostgreSQL\", mime: \"text/x-pgsql\", mode: \"sql\"},\n {name: \"PowerShell\", mime: \"application/x-powershell\", mode: \"powershell\", ext: [\"ps1\", \"psd1\", \"psm1\"]},\n {name: \"Properties files\", mime: \"text/x-properties\", mode: \"properties\", ext: [\"properties\", \"ini\", \"in\"], alias: [\"ini\", \"properties\"]},\n {name: \"ProtoBuf\", mime: \"text/x-protobuf\", mode: \"protobuf\", ext: [\"proto\"]},\n {name: \"Python\", mime: \"text/x-python\", mode: \"python\", ext: [\"BUILD\", \"bzl\", \"py\", \"pyw\"], file: /^(BUCK|BUILD)$/},\n {name: \"Puppet\", mime: \"text/x-puppet\", mode: \"puppet\", ext: [\"pp\"]},\n {name: \"Q\", mime: \"text/x-q\", mode: \"q\", ext: [\"q\"]},\n {name: \"R\", mime: \"text/x-rsrc\", mode: \"r\", ext: [\"r\", \"R\"], alias: [\"rscript\"]},\n {name: \"reStructuredText\", mime: \"text/x-rst\", mode: \"rst\", ext: [\"rst\"], alias: [\"rst\"]},\n {name: \"RPM Changes\", mime: \"text/x-rpm-changes\", mode: \"rpm\"},\n {name: \"RPM Spec\", mime: \"text/x-rpm-spec\", mode: \"rpm\", ext: [\"spec\"]},\n {name: \"Ruby\", mime: \"text/x-ruby\", mode: \"ruby\", ext: [\"rb\"], alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"]},\n {name: \"Rust\", mime: \"text/x-rustsrc\", mode: \"rust\", ext: [\"rs\"]},\n {name: \"SAS\", mime: \"text/x-sas\", mode: \"sas\", ext: [\"sas\"]},\n {name: \"Sass\", mime: \"text/x-sass\", mode: \"sass\", ext: [\"sass\"]},\n {name: \"Scala\", mime: \"text/x-scala\", mode: \"clike\", ext: [\"scala\"]},\n {name: \"Scheme\", mime: \"text/x-scheme\", mode: \"scheme\", ext: [\"scm\", \"ss\"]},\n {name: \"SCSS\", mime: \"text/x-scss\", mode: \"css\", ext: [\"scss\"]},\n {name: \"Shell\", mimes: [\"text/x-sh\", \"application/x-sh\"], mode: \"shell\", ext: [\"sh\", \"ksh\", \"bash\"], alias: [\"bash\", \"sh\", \"zsh\"], file: /^PKGBUILD$/},\n {name: \"Sieve\", mime: \"application/sieve\", mode: \"sieve\", ext: [\"siv\", \"sieve\"]},\n {name: \"Slim\", mimes: [\"text/x-slim\", \"application/x-slim\"], mode: \"slim\", ext: [\"slim\"]},\n {name: \"Smalltalk\", mime: \"text/x-stsrc\", mode: \"smalltalk\", ext: [\"st\"]},\n {name: \"Smarty\", mime: \"text/x-smarty\", mode: \"smarty\", ext: [\"tpl\"]},\n {name: \"Solr\", mime: \"text/x-solr\", mode: \"solr\"},\n {name: \"SML\", mime: \"text/x-sml\", mode: \"mllike\", ext: [\"sml\", \"sig\", \"fun\", \"smackspec\"]},\n {name: \"Soy\", mime: \"text/x-soy\", mode: \"soy\", ext: [\"soy\"], alias: [\"closure template\"]},\n {name: \"SPARQL\", mime: \"application/sparql-query\", mode: \"sparql\", ext: [\"rq\", \"sparql\"], alias: [\"sparul\"]},\n {name: \"Spreadsheet\", mime: \"text/x-spreadsheet\", mode: \"spreadsheet\", alias: [\"excel\", \"formula\"]},\n {name: \"SQL\", mime: \"text/x-sql\", mode: \"sql\", ext: [\"sql\"]},\n {name: \"SQLite\", mime: \"text/x-sqlite\", mode: \"sql\"},\n {name: \"Squirrel\", mime: \"text/x-squirrel\", mode: \"clike\", ext: [\"nut\"]},\n {name: \"Stylus\", mime: \"text/x-styl\", mode: \"stylus\", ext: [\"styl\"]},\n {name: \"Swift\", mime: \"text/x-swift\", mode: \"swift\", ext: [\"swift\"]},\n {name: \"sTeX\", mime: \"text/x-stex\", mode: \"stex\"},\n {name: \"LaTeX\", mime: \"text/x-latex\", mode: \"stex\", ext: [\"text\", \"ltx\", \"tex\"], alias: [\"tex\"]},\n {name: \"SystemVerilog\", mime: \"text/x-systemverilog\", mode: \"verilog\", ext: [\"v\", \"sv\", \"svh\"]},\n {name: \"Tcl\", mime: \"text/x-tcl\", mode: \"tcl\", ext: [\"tcl\"]},\n {name: \"Textile\", mime: \"text/x-textile\", mode: \"textile\", ext: [\"textile\"]},\n {name: \"TiddlyWiki \", mime: \"text/x-tiddlywiki\", mode: \"tiddlywiki\"},\n {name: \"Tiki wiki\", mime: \"text/tiki\", mode: \"tiki\"},\n {name: \"TOML\", mime: \"text/x-toml\", mode: \"toml\", ext: [\"toml\"]},\n {name: \"Tornado\", mime: \"text/x-tornado\", mode: \"tornado\"},\n {name: \"troff\", mime: \"text/troff\", mode: \"troff\", ext: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]},\n {name: \"TTCN\", mime: \"text/x-ttcn\", mode: \"ttcn\", ext: [\"ttcn\", \"ttcn3\", \"ttcnpp\"]},\n {name: \"TTCN_CFG\", mime: \"text/x-ttcn-cfg\", mode: \"ttcn-cfg\", ext: [\"cfg\"]},\n {name: \"Turtle\", mime: \"text/turtle\", mode: \"turtle\", ext: [\"ttl\"]},\n {name: \"TypeScript\", mime: \"application/typescript\", mode: \"javascript\", ext: [\"ts\"], alias: [\"ts\"]},\n {name: \"TypeScript-JSX\", mime: \"text/typescript-jsx\", mode: \"jsx\", ext: [\"tsx\"], alias: [\"tsx\"]},\n {name: \"Twig\", mime: \"text/x-twig\", mode: \"twig\"},\n {name: \"Web IDL\", mime: \"text/x-webidl\", mode: \"webidl\", ext: [\"webidl\"]},\n {name: \"VB.NET\", mime: \"text/x-vb\", mode: \"vb\", ext: [\"vb\"]},\n {name: \"VBScript\", mime: \"text/vbscript\", mode: \"vbscript\", ext: [\"vbs\"]},\n {name: \"Velocity\", mime: \"text/velocity\", mode: \"velocity\", ext: [\"vtl\"]},\n {name: \"Verilog\", mime: \"text/x-verilog\", mode: \"verilog\", ext: [\"v\"]},\n {name: \"VHDL\", mime: \"text/x-vhdl\", mode: \"vhdl\", ext: [\"vhd\", \"vhdl\"]},\n {name: \"Vue.js Component\", mimes: [\"script/x-vue\", \"text/x-vue\"], mode: \"vue\", ext: [\"vue\"]},\n {name: \"XML\", mimes: [\"application/xml\", \"text/xml\"], mode: \"xml\", ext: [\"xml\", \"xsl\", \"xsd\", \"svg\"], alias: [\"rss\", \"wsdl\", \"xsd\"]},\n {name: \"XQuery\", mime: \"application/xquery\", mode: \"xquery\", ext: [\"xy\", \"xquery\"]},\n {name: \"Yacas\", mime: \"text/x-yacas\", mode: \"yacas\", ext: [\"ys\"]},\n {name: \"YAML\", mimes: [\"text/x-yaml\", \"text/yaml\"], mode: \"yaml\", ext: [\"yaml\", \"yml\"], alias: [\"yml\"]},\n {name: \"Z80\", mime: \"text/x-z80\", mode: \"z80\", ext: [\"z80\"]},\n {name: \"mscgen\", mime: \"text/x-mscgen\", mode: \"mscgen\", ext: [\"mscgen\", \"mscin\", \"msc\"]},\n {name: \"xu\", mime: \"text/x-xu\", mode: \"mscgen\", ext: [\"xu\"]},\n {name: \"msgenny\", mime: \"text/x-msgenny\", mode: \"mscgen\", ext: [\"msgenny\"]}\n ];\n // Ensure all modes have a mime property for backwards compatibility\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mimes) info.mime = info.mimes[0];\n }\n\n CodeMirror.findModeByMIME = function(mime) {\n mime = mime.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mime == mime) return info;\n if (info.mimes) for (var j = 0; j < info.mimes.length; j++)\n if (info.mimes[j] == mime) return info;\n }\n if (/\\+xml$/.test(mime)) return CodeMirror.findModeByMIME(\"application/xml\")\n if (/\\+json$/.test(mime)) return CodeMirror.findModeByMIME(\"application/json\")\n };\n\n CodeMirror.findModeByExtension = function(ext) {\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.ext) for (var j = 0; j < info.ext.length; j++)\n if (info.ext[j] == ext) return info;\n }\n };\n\n CodeMirror.findModeByFileName = function(filename) {\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.file && info.file.test(filename)) return info;\n }\n var dot = filename.lastIndexOf(\".\");\n var ext = dot > -1 && filename.substring(dot + 1, filename.length);\n if (ext) return CodeMirror.findModeByExtension(ext);\n };\n\n CodeMirror.findModeByName = function(name) {\n name = name.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.name.toLowerCase() == name) return info;\n if (info.alias) for (var j = 0; j < info.alias.length; j++)\n if (info.alias[j].toLowerCase() == name) return info;\n }\n };\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n CodeMirror.defineOption(\"placeholder\", \"\", function(cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n if (val && !prev) {\n cm.on(\"blur\", onBlur);\n cm.on(\"change\", onChange);\n cm.on(\"swapDoc\", onChange);\n onChange(cm);\n } else if (!val && prev) {\n cm.off(\"blur\", onBlur);\n cm.off(\"change\", onChange);\n cm.off(\"swapDoc\", onChange);\n clearPlaceholder(cm);\n var wrapper = cm.getWrapperElement();\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\");\n }\n\n if (val && !cm.hasFocus()) onBlur(cm);\n });\n\n function clearPlaceholder(cm) {\n if (cm.state.placeholder) {\n cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);\n cm.state.placeholder = null;\n }\n }\n function setPlaceholder(cm) {\n clearPlaceholder(cm);\n var elt = cm.state.placeholder = document.createElement(\"pre\");\n elt.style.cssText = \"height: 0; overflow: visible\";\n elt.style.direction = cm.getOption(\"direction\");\n elt.className = \"CodeMirror-placeholder CodeMirror-line-like\";\n var placeHolder = cm.getOption(\"placeholder\")\n if (typeof placeHolder == \"string\") placeHolder = document.createTextNode(placeHolder)\n elt.appendChild(placeHolder)\n cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);\n }\n\n function onBlur(cm) {\n if (isEmpty(cm)) setPlaceholder(cm);\n }\n function onChange(cm) {\n var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\") + (empty ? \" CodeMirror-empty\" : \"\");\n\n if (empty) setPlaceholder(cm);\n else clearPlaceholder(cm);\n }\n\n function isEmpty(cm) {\n return (cm.lineCount() === 1) && (cm.getLine(0) === \"\");\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Because sometimes you need to mark the selected *text*.\n//\n// Adds an option 'styleSelectedText' which, when enabled, gives\n// selected text the CSS class given as option value, or\n// \"CodeMirror-selectedtext\" when the value is not a string.\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"styleSelectedText\", false, function(cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n if (val && !prev) {\n cm.state.markedSelection = [];\n cm.state.markedSelectionStyle = typeof val == \"string\" ? val : \"CodeMirror-selectedtext\";\n reset(cm);\n cm.on(\"cursorActivity\", onCursorActivity);\n cm.on(\"change\", onChange);\n } else if (!val && prev) {\n cm.off(\"cursorActivity\", onCursorActivity);\n cm.off(\"change\", onChange);\n clear(cm);\n cm.state.markedSelection = cm.state.markedSelectionStyle = null;\n }\n });\n\n function onCursorActivity(cm) {\n if (cm.state.markedSelection)\n cm.operation(function() { update(cm); });\n }\n\n function onChange(cm) {\n if (cm.state.markedSelection && cm.state.markedSelection.length)\n cm.operation(function() { clear(cm); });\n }\n\n var CHUNK_SIZE = 8;\n var Pos = CodeMirror.Pos;\n var cmp = CodeMirror.cmpPos;\n\n function coverRange(cm, from, to, addAt) {\n if (cmp(from, to) == 0) return;\n var array = cm.state.markedSelection;\n var cls = cm.state.markedSelectionStyle;\n for (var line = from.line;;) {\n var start = line == from.line ? from : Pos(line, 0);\n var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;\n var end = atEnd ? to : Pos(endLine, 0);\n var mark = cm.markText(start, end, {className: cls});\n if (addAt == null) array.push(mark);\n else array.splice(addAt++, 0, mark);\n if (atEnd) break;\n line = endLine;\n }\n }\n\n function clear(cm) {\n var array = cm.state.markedSelection;\n for (var i = 0; i < array.length; ++i) array[i].clear();\n array.length = 0;\n }\n\n function reset(cm) {\n clear(cm);\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++)\n coverRange(cm, ranges[i].from(), ranges[i].to());\n }\n\n function update(cm) {\n if (!cm.somethingSelected()) return clear(cm);\n if (cm.listSelections().length > 1) return reset(cm);\n\n var from = cm.getCursor(\"start\"), to = cm.getCursor(\"end\");\n\n var array = cm.state.markedSelection;\n if (!array.length) return coverRange(cm, from, to);\n\n var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();\n if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE ||\n cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)\n return reset(cm);\n\n while (cmp(from, coverStart.from) > 0) {\n array.shift().clear();\n coverStart = array[0].find();\n }\n if (cmp(from, coverStart.from) < 0) {\n if (coverStart.to.line - from.line < CHUNK_SIZE) {\n array.shift().clear();\n coverRange(cm, from, coverStart.to, 0);\n } else {\n coverRange(cm, from, coverStart.from, 0);\n }\n }\n\n while (cmp(to, coverEnd.to) < 0) {\n array.pop().clear();\n coverEnd = array[array.length - 1].find();\n }\n if (cmp(to, coverEnd.to) > 0) {\n if (to.line - coverEnd.from.line < CHUNK_SIZE) {\n array.pop().clear();\n coverRange(cm, coverEnd.from, to);\n } else {\n coverRange(cm, coverEnd.to, to);\n }\n }\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../markdown/markdown\"), require(\"../../addon/mode/overlay\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../markdown/markdown\", \"../../addon/mode/overlay\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\\.beep|\\.lwz|\\.xpc|\\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\\.beeps?|xmpp|xri|ymsgr|z39\\.50[rs]?):(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\([^\\s()<>]*\\))+(?:\\([^\\s()<>]*\\)|[^\\s`*!()\\[\\]{};:'\".,<>?«»“”‘’]))/i\n\nCodeMirror.defineMode(\"gfm\", function(config, modeConfig) {\n var codeDepth = 0;\n function blankLine(state) {\n state.code = false;\n return null;\n }\n var gfmOverlay = {\n startState: function() {\n return {\n code: false,\n codeBlock: false,\n ateSpace: false\n };\n },\n copyState: function(s) {\n return {\n code: s.code,\n codeBlock: s.codeBlock,\n ateSpace: s.ateSpace\n };\n },\n token: function(stream, state) {\n state.combineTokens = null;\n\n // Hack to prevent formatting override inside code blocks (block and inline)\n if (state.codeBlock) {\n if (stream.match(/^```+/)) {\n state.codeBlock = false;\n return null;\n }\n stream.skipToEnd();\n return null;\n }\n if (stream.sol()) {\n state.code = false;\n }\n if (stream.sol() && stream.match(/^```+/)) {\n stream.skipToEnd();\n state.codeBlock = true;\n return null;\n }\n // If this block is changed, it may need to be updated in Markdown mode\n if (stream.peek() === '`') {\n stream.next();\n var before = stream.pos;\n stream.eatWhile('`');\n var difference = 1 + stream.pos - before;\n if (!state.code) {\n codeDepth = difference;\n state.code = true;\n } else {\n if (difference === codeDepth) { // Must be exact\n state.code = false;\n }\n }\n return null;\n } else if (state.code) {\n stream.next();\n return null;\n }\n // Check if space. If so, links can be formatted later on\n if (stream.eatSpace()) {\n state.ateSpace = true;\n return null;\n }\n if (stream.sol() || state.ateSpace) {\n state.ateSpace = false;\n if (modeConfig.gitHubSpice !== false) {\n if(stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+@)?(?=.{0,6}\\d)(?:[a-f0-9]{7,40}\\b)/)) {\n // User/Project@SHA\n // User@SHA\n // SHA\n state.combineTokens = true;\n return \"link\";\n } else if (stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+)?#[0-9]+\\b/)) {\n // User/Project#Num\n // User#Num\n // #Num\n state.combineTokens = true;\n return \"link\";\n }\n }\n }\n if (stream.match(urlRE) &&\n stream.string.slice(stream.start - 2, stream.start) != \"](\" &&\n (stream.start == 0 || /\\W/.test(stream.string.charAt(stream.start - 1)))) {\n // URLs\n // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls\n // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine\n // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL\n state.combineTokens = true;\n return \"link\";\n }\n stream.next();\n return null;\n },\n blankLine: blankLine\n };\n\n var markdownConfig = {\n taskLists: true,\n strikethrough: true,\n emoji: true\n };\n for (var attr in modeConfig) {\n markdownConfig[attr] = modeConfig[attr];\n }\n markdownConfig.name = \"markdown\";\n return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay);\n\n}, \"markdown\");\n\n CodeMirror.defineMIME(\"text/x-gfm\", \"gfm\");\n});\n","// Use strict mode (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)\n\"use strict\";\n\n\n// Requires\nvar Typo = require(\"typo-js\");\n\n\n// Create function\nfunction CodeMirrorSpellChecker(options) {\n\t// Initialize\n\toptions = options || {};\n\n\n\t// Verify\n\tif(typeof options.codeMirrorInstance !== \"function\" || typeof options.codeMirrorInstance.defineMode !== \"function\") {\n\t\tconsole.log(\"CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`\");\n\t\treturn;\n\t}\n\n\n\t// Because some browsers don't support this functionality yet\n\tif(!String.prototype.includes) {\n\t\tString.prototype.includes = function() {\n\t\t\t\"use strict\";\n\t\t\treturn String.prototype.indexOf.apply(this, arguments) !== -1;\n\t\t};\n\t}\n\n\n\t// Define the new mode\n\toptions.codeMirrorInstance.defineMode(\"spell-checker\", function(config) {\n\t\t// Load AFF/DIC data\n\t\tif(!CodeMirrorSpellChecker.aff_loading) {\n\t\t\tCodeMirrorSpellChecker.aff_loading = true;\n\t\t\tvar xhr_aff = new XMLHttpRequest();\n\t\t\txhr_aff.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff\", true);\n\t\t\txhr_aff.onload = function() {\n\t\t\t\tif(xhr_aff.readyState === 4 && xhr_aff.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.aff_data = xhr_aff.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr_aff.send(null);\n\t\t}\n\n\t\tif(!CodeMirrorSpellChecker.dic_loading) {\n\t\t\tCodeMirrorSpellChecker.dic_loading = true;\n\t\t\tvar xhr_dic = new XMLHttpRequest();\n\t\t\txhr_dic.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic\", true);\n\t\t\txhr_dic.onload = function() {\n\t\t\t\tif(xhr_dic.readyState === 4 && xhr_dic.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.dic_data = xhr_dic.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr_dic.send(null);\n\t\t}\n\n\n\t\t// Define what separates a word\n\t\tvar rx_word = \"!\\\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~ \";\n\n\n\t\t// Create the overlay and such\n\t\tvar overlay = {\n\t\t\ttoken: function(stream) {\n\t\t\t\tvar ch = stream.peek();\n\t\t\t\tvar word = \"\";\n\n\t\t\t\tif(rx_word.includes(ch)) {\n\t\t\t\t\tstream.next();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\twhile((ch = stream.peek()) != null && !rx_word.includes(ch)) {\n\t\t\t\t\tword += ch;\n\t\t\t\t\tstream.next();\n\t\t\t\t}\n\n\t\t\t\tif(CodeMirrorSpellChecker.typo && !CodeMirrorSpellChecker.typo.check(word))\n\t\t\t\t\treturn \"spell-error\"; // CSS class: cm-spell-error\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tvar mode = options.codeMirrorInstance.getMode(\n\t\t\tconfig, config.backdrop || \"text/plain\"\n\t\t);\n\n\t\treturn options.codeMirrorInstance.overlayMode(mode, overlay, true);\n\t});\n}\n\n\n// Initialize data globally to reduce memory consumption\nCodeMirrorSpellChecker.num_loaded = 0;\nCodeMirrorSpellChecker.aff_loading = false;\nCodeMirrorSpellChecker.dic_loading = false;\nCodeMirrorSpellChecker.aff_data = \"\";\nCodeMirrorSpellChecker.dic_data = \"\";\nCodeMirrorSpellChecker.typo;\n\n\n// Export\nmodule.exports = CodeMirrorSpellChecker;","/* globals chrome: false */\n/* globals __dirname: false */\n/* globals require: false */\n/* globals Buffer: false */\n/* globals module: false */\n\n/**\n * Typo is a JavaScript implementation of a spellchecker using hunspell-style \n * dictionaries.\n */\n\nvar Typo;\n\n(function () {\n\"use strict\";\n\n/**\n * Typo constructor.\n *\n * @param {String} [dictionary] The locale code of the dictionary being used. e.g.,\n * \"en_US\". This is only used to auto-load dictionaries.\n * @param {String} [affData] The data from the dictionary's .aff file. If omitted\n * and Typo.js is being used in a Chrome extension, the .aff\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].aff\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].aff\n * @param {String} [wordsData] The data from the dictionary's .dic file. If omitted\n * and Typo.js is being used in a Chrome extension, the .dic\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].dic\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].dic\n * @param {Object} [settings] Constructor settings. Available properties are:\n * {String} [dictionaryPath]: path to load dictionary from in non-chrome\n * environment.\n * {Object} [flags]: flag information.\n * {Boolean} [asyncLoad]: If true, affData and wordsData will be loaded\n * asynchronously.\n * {Function} [loadedCallback]: Called when both affData and wordsData\n * have been loaded. Only used if asyncLoad is set to true. The parameter\n * is the instantiated Typo object.\n *\n * @returns {Typo} A Typo object.\n */\n\nTypo = function (dictionary, affData, wordsData, settings) {\n\tsettings = settings || {};\n\n\tthis.dictionary = null;\n\t\n\tthis.rules = {};\n\tthis.dictionaryTable = {};\n\t\n\tthis.compoundRules = [];\n\tthis.compoundRuleCodes = {};\n\t\n\tthis.replacementTable = [];\n\t\n\tthis.flags = settings.flags || {}; \n\t\n\tthis.memoized = {};\n\n\tthis.loaded = false;\n\t\n\tvar self = this;\n\t\n\tvar path;\n\t\n\t// Loop-control variables.\n\tvar i, j, _len, _jlen;\n\t\n\tif (dictionary) {\n\t\tself.dictionary = dictionary;\n\t\t\n\t\t// If the data is preloaded, just setup the Typo object.\n\t\tif (affData && wordsData) {\n\t\t\tsetup();\n\t\t}\n\t\t// Loading data for Chrome extentions.\n\t\telse if (typeof window !== 'undefined' && 'chrome' in window && 'extension' in window.chrome && 'getURL' in window.chrome.extension) {\n\t\t\tif (settings.dictionaryPath) {\n\t\t\t\tpath = settings.dictionaryPath;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpath = \"typo/dictionaries\";\n\t\t\t}\n\t\t\t\n\t\t\tif (!affData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\"), setAffData);\n\t\t\tif (!wordsData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\"), setWordsData);\n\t\t}\n\t\telse {\n\t\t\tif (settings.dictionaryPath) {\n\t\t\t\tpath = settings.dictionaryPath;\n\t\t\t}\n\t\t\telse if (typeof __dirname !== 'undefined') {\n\t\t\t\tpath = __dirname + '/dictionaries';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpath = './dictionaries';\n\t\t\t}\n\t\t\t\n\t\t\tif (!affData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\", setAffData);\n\t\t\tif (!wordsData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\", setWordsData);\n\t\t}\n\t}\n\t\n\tfunction readDataFile(url, setFunc) {\n\t\tvar response = self._readFile(url, null, settings.asyncLoad);\n\t\t\n\t\tif (settings.asyncLoad) {\n\t\t\tresponse.then(function(data) {\n\t\t\t\tsetFunc(data);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tsetFunc(response);\n\t\t}\n\t}\n\n\tfunction setAffData(data) {\n\t\taffData = data;\n\n\t\tif (wordsData) {\n\t\t\tsetup();\n\t\t}\n\t}\n\n\tfunction setWordsData(data) {\n\t\twordsData = data;\n\n\t\tif (affData) {\n\t\t\tsetup();\n\t\t}\n\t}\n\n\tfunction setup() {\n\t\tself.rules = self._parseAFF(affData);\n\t\t\n\t\t// Save the rule codes that are used in compound rules.\n\t\tself.compoundRuleCodes = {};\n\t\t\n\t\tfor (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n\t\t\tvar rule = self.compoundRules[i];\n\t\t\t\n\t\t\tfor (j = 0, _jlen = rule.length; j < _jlen; j++) {\n\t\t\t\tself.compoundRuleCodes[rule[j]] = [];\n\t\t\t}\n\t\t}\n\t\t\n\t\t// If we add this ONLYINCOMPOUND flag to self.compoundRuleCodes, then _parseDIC\n\t\t// will do the work of saving the list of words that are compound-only.\n\t\tif (\"ONLYINCOMPOUND\" in self.flags) {\n\t\t\tself.compoundRuleCodes[self.flags.ONLYINCOMPOUND] = [];\n\t\t}\n\t\t\n\t\tself.dictionaryTable = self._parseDIC(wordsData);\n\t\t\n\t\t// Get rid of any codes from the compound rule codes that are never used \n\t\t// (or that were special regex characters). Not especially necessary... \n\t\tfor (i in self.compoundRuleCodes) {\n\t\t\tif (self.compoundRuleCodes[i].length === 0) {\n\t\t\t\tdelete self.compoundRuleCodes[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Build the full regular expressions for each compound rule.\n\t\t// I have a feeling (but no confirmation yet) that this method of \n\t\t// testing for compound words is probably slow.\n\t\tfor (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n\t\t\tvar ruleText = self.compoundRules[i];\n\t\t\t\n\t\t\tvar expressionText = \"\";\n\t\t\t\n\t\t\tfor (j = 0, _jlen = ruleText.length; j < _jlen; j++) {\n\t\t\t\tvar character = ruleText[j];\n\t\t\t\t\n\t\t\t\tif (character in self.compoundRuleCodes) {\n\t\t\t\t\texpressionText += \"(\" + self.compoundRuleCodes[character].join(\"|\") + \")\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\texpressionText += character;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tself.compoundRules[i] = new RegExp(expressionText, \"i\");\n\t\t}\n\t\t\n\t\tself.loaded = true;\n\t\t\n\t\tif (settings.asyncLoad && settings.loadedCallback) {\n\t\t\tsettings.loadedCallback(self);\n\t\t}\n\t}\n\t\n\treturn this;\n};\n\nTypo.prototype = {\n\t/**\n\t * Loads a Typo instance from a hash of all of the Typo properties.\n\t *\n\t * @param object obj A hash of Typo properties, probably gotten from a JSON.parse(JSON.stringify(typo_instance)).\n\t */\n\t\n\tload : function (obj) {\n\t\tfor (var i in obj) {\n\t\t\tif (obj.hasOwnProperty(i)) {\n\t\t\t\tthis[i] = obj[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Read the contents of a file.\n\t * \n\t * @param {String} path The path (relative) to the file.\n\t * @param {String} [charset=\"ISO8859-1\"] The expected charset of the file\n\t * @param {Boolean} async If true, the file will be read asynchronously. For node.js this does nothing, all\n\t * files are read synchronously.\n\t * @returns {String} The file data if async is false, otherwise a promise object. If running node.js, the data is\n\t * always returned.\n\t */\n\t\n\t_readFile : function (path, charset, async) {\n\t\tcharset = charset || \"utf8\";\n\t\t\n\t\tif (typeof XMLHttpRequest !== 'undefined') {\n\t\t\tvar promise;\n\t\t\tvar req = new XMLHttpRequest();\n\t\t\treq.open(\"GET\", path, async);\n\t\t\t\n\t\t\tif (async) {\n\t\t\t\tpromise = new Promise(function(resolve, reject) {\n\t\t\t\t\treq.onload = function() {\n\t\t\t\t\t\tif (req.status === 200) {\n\t\t\t\t\t\t\tresolve(req.responseText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(req.statusText);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\treq.onerror = function() {\n\t\t\t\t\t\treject(req.statusText);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\n\t\t\tif (req.overrideMimeType)\n\t\t\t\treq.overrideMimeType(\"text/plain; charset=\" + charset);\n\t\t\n\t\t\treq.send(null);\n\t\t\t\n\t\t\treturn async ? promise : req.responseText;\n\t\t}\n\t\telse if (typeof require !== 'undefined') {\n\t\t\t// Node.js\n\t\t\tvar fs = require(\"fs\");\n\t\t\t\n\t\t\ttry {\n\t\t\t\tif (fs.existsSync(path)) {\n\t\t\t\t\tvar stats = fs.statSync(path);\n\t\t\t\t\t\n\t\t\t\t\tvar fileDescriptor = fs.openSync(path, 'r');\n\t\t\t\t\t\n\t\t\t\t\tvar buffer = new Buffer(stats.size);\n\t\t\t\t\t\n\t\t\t\t\tfs.readSync(fileDescriptor, buffer, 0, buffer.length, null);\n\t\t\t\t\t\n\t\t\t\t\treturn buffer.toString(charset, 0, buffer.length);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log(\"Path \" + path + \" does not exist.\");\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Parse the rules out from a .aff file.\n\t *\n\t * @param {String} data The contents of the affix file.\n\t * @returns object The rules from the file.\n\t */\n\t\n\t_parseAFF : function (data) {\n\t\tvar rules = {};\n\t\t\n\t\tvar line, subline, numEntries, lineParts;\n\t\tvar i, j, _len, _jlen;\n\t\t\n\t\t// Remove comment lines\n\t\tdata = this._removeAffixComments(data);\n\t\t\n\t\tvar lines = data.split(\"\\n\");\n\t\t\n\t\tfor (i = 0, _len = lines.length; i < _len; i++) {\n\t\t\tline = lines[i];\n\t\t\t\n\t\t\tvar definitionParts = line.split(/\\s+/);\n\t\t\t\n\t\t\tvar ruleType = definitionParts[0];\n\t\t\t\n\t\t\tif (ruleType == \"PFX\" || ruleType == \"SFX\") {\n\t\t\t\tvar ruleCode = definitionParts[1];\n\t\t\t\tvar combineable = definitionParts[2];\n\t\t\t\tnumEntries = parseInt(definitionParts[3], 10);\n\t\t\t\t\n\t\t\t\tvar entries = [];\n\t\t\t\t\n\t\t\t\tfor (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n\t\t\t\t\tsubline = lines[j];\n\t\t\t\t\t\n\t\t\t\t\tlineParts = subline.split(/\\s+/);\n\t\t\t\t\tvar charactersToRemove = lineParts[2];\n\t\t\t\t\t\n\t\t\t\t\tvar additionParts = lineParts[3].split(\"/\");\n\t\t\t\t\t\n\t\t\t\t\tvar charactersToAdd = additionParts[0];\n\t\t\t\t\tif (charactersToAdd === \"0\") charactersToAdd = \"\";\n\t\t\t\t\t\n\t\t\t\t\tvar continuationClasses = this.parseRuleCodes(additionParts[1]);\n\t\t\t\t\t\n\t\t\t\t\tvar regexToMatch = lineParts[4];\n\t\t\t\t\t\n\t\t\t\t\tvar entry = {};\n\t\t\t\t\tentry.add = charactersToAdd;\n\t\t\t\t\t\n\t\t\t\t\tif (continuationClasses.length > 0) entry.continuationClasses = continuationClasses;\n\t\t\t\t\t\n\t\t\t\t\tif (regexToMatch !== \".\") {\n\t\t\t\t\t\tif (ruleType === \"SFX\") {\n\t\t\t\t\t\t\tentry.match = new RegExp(regexToMatch + \"$\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tentry.match = new RegExp(\"^\" + regexToMatch);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (charactersToRemove != \"0\") {\n\t\t\t\t\t\tif (ruleType === \"SFX\") {\n\t\t\t\t\t\t\tentry.remove = new RegExp(charactersToRemove + \"$\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tentry.remove = charactersToRemove;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tentries.push(entry);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trules[ruleCode] = { \"type\" : ruleType, \"combineable\" : (combineable == \"Y\"), \"entries\" : entries };\n\t\t\t\t\n\t\t\t\ti += numEntries;\n\t\t\t}\n\t\t\telse if (ruleType === \"COMPOUNDRULE\") {\n\t\t\t\tnumEntries = parseInt(definitionParts[1], 10);\n\t\t\t\t\n\t\t\t\tfor (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n\t\t\t\t\tline = lines[j];\n\t\t\t\t\t\n\t\t\t\t\tlineParts = line.split(/\\s+/);\n\t\t\t\t\tthis.compoundRules.push(lineParts[1]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ti += numEntries;\n\t\t\t}\n\t\t\telse if (ruleType === \"REP\") {\n\t\t\t\tlineParts = line.split(/\\s+/);\n\t\t\t\t\n\t\t\t\tif (lineParts.length === 3) {\n\t\t\t\t\tthis.replacementTable.push([ lineParts[1], lineParts[2] ]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// ONLYINCOMPOUND\n\t\t\t\t// COMPOUNDMIN\n\t\t\t\t// FLAG\n\t\t\t\t// KEEPCASE\n\t\t\t\t// NEEDAFFIX\n\t\t\t\t\n\t\t\t\tthis.flags[ruleType] = definitionParts[1];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\t/**\n\t * Removes comment lines and then cleans up blank lines and trailing whitespace.\n\t *\n\t * @param {String} data The data from an affix file.\n\t * @return {String} The cleaned-up data.\n\t */\n\t\n\t_removeAffixComments : function (data) {\n\t\t// Remove comments\n\t\t// This used to remove any string starting with '#' up to the end of the line,\n\t\t// but some COMPOUNDRULE definitions include '#' as part of the rule.\n\t\t// I haven't seen any affix files that use comments on the same line as real data,\n\t\t// so I don't think this will break anything.\n\t\tdata = data.replace(/^\\s*#.*$/mg, \"\");\n\t\t\n\t\t// Trim each line\n\t\tdata = data.replace(/^\\s\\s*/m, '').replace(/\\s\\s*$/m, '');\n\t\t\n\t\t// Remove blank lines.\n\t\tdata = data.replace(/\\n{2,}/g, \"\\n\");\n\t\t\n\t\t// Trim the entire string\n\t\tdata = data.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t\t\n\t\treturn data;\n\t},\n\t\n\t/**\n\t * Parses the words out from the .dic file.\n\t *\n\t * @param {String} data The data from the dictionary file.\n\t * @returns object The lookup table containing all of the words and\n\t * word forms from the dictionary.\n\t */\n\t\n\t_parseDIC : function (data) {\n\t\tdata = this._removeDicComments(data);\n\t\t\n\t\tvar lines = data.split(\"\\n\");\n\t\tvar dictionaryTable = {};\n\t\t\n\t\tfunction addWord(word, rules) {\n\t\t\t// Some dictionaries will list the same word multiple times with different rule sets.\n\t\t\tif (!dictionaryTable.hasOwnProperty(word)) {\n\t\t\t\tdictionaryTable[word] = null;\n\t\t\t}\n\t\t\t\n\t\t\tif (rules.length > 0) {\n\t\t\t\tif (dictionaryTable[word] === null) {\n\t\t\t\t\tdictionaryTable[word] = [];\n\t\t\t\t}\n\n\t\t\t\tdictionaryTable[word].push(rules);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// The first line is the number of words in the dictionary.\n\t\tfor (var i = 1, _len = lines.length; i < _len; i++) {\n\t\t\tvar line = lines[i];\n\t\t\t\n\t\t\tvar parts = line.split(\"/\", 2);\n\t\t\t\n\t\t\tvar word = parts[0];\n\n\t\t\t// Now for each affix rule, generate that form of the word.\n\t\t\tif (parts.length > 1) {\n\t\t\t\tvar ruleCodesArray = this.parseRuleCodes(parts[1]);\n\t\t\t\t\n\t\t\t\t// Save the ruleCodes for compound word situations.\n\t\t\t\tif (!(\"NEEDAFFIX\" in this.flags) || ruleCodesArray.indexOf(this.flags.NEEDAFFIX) == -1) {\n\t\t\t\t\taddWord(word, ruleCodesArray);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (var j = 0, _jlen = ruleCodesArray.length; j < _jlen; j++) {\n\t\t\t\t\tvar code = ruleCodesArray[j];\n\t\t\t\t\t\n\t\t\t\t\tvar rule = this.rules[code];\n\t\t\t\t\t\n\t\t\t\t\tif (rule) {\n\t\t\t\t\t\tvar newWords = this._applyRule(word, rule);\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var ii = 0, _iilen = newWords.length; ii < _iilen; ii++) {\n\t\t\t\t\t\t\tvar newWord = newWords[ii];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\taddWord(newWord, []);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (rule.combineable) {\n\t\t\t\t\t\t\t\tfor (var k = j + 1; k < _jlen; k++) {\n\t\t\t\t\t\t\t\t\tvar combineCode = ruleCodesArray[k];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tvar combineRule = this.rules[combineCode];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (combineRule) {\n\t\t\t\t\t\t\t\t\t\tif (combineRule.combineable && (rule.type != combineRule.type)) {\n\t\t\t\t\t\t\t\t\t\t\tvar otherNewWords = this._applyRule(newWord, combineRule);\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tfor (var iii = 0, _iiilen = otherNewWords.length; iii < _iiilen; iii++) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar otherNewWord = otherNewWords[iii];\n\t\t\t\t\t\t\t\t\t\t\t\taddWord(otherNewWord, []);\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\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (code in this.compoundRuleCodes) {\n\t\t\t\t\t\tthis.compoundRuleCodes[code].push(word);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\taddWord(word.trim(), []);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn dictionaryTable;\n\t},\n\t\n\t\n\t/**\n\t * Removes comment lines and then cleans up blank lines and trailing whitespace.\n\t *\n\t * @param {String} data The data from a .dic file.\n\t * @return {String} The cleaned-up data.\n\t */\n\t\n\t_removeDicComments : function (data) {\n\t\t// I can't find any official documentation on it, but at least the de_DE\n\t\t// dictionary uses tab-indented lines as comments.\n\t\t\n\t\t// Remove comments\n\t\tdata = data.replace(/^\\t.*$/mg, \"\");\n\t\t\n\t\treturn data;\n\t},\n\t\n\tparseRuleCodes : function (textCodes) {\n\t\tif (!textCodes) {\n\t\t\treturn [];\n\t\t}\n\t\telse if (!(\"FLAG\" in this.flags)) {\n\t\t\treturn textCodes.split(\"\");\n\t\t}\n\t\telse if (this.flags.FLAG === \"long\") {\n\t\t\tvar flags = [];\n\t\t\t\n\t\t\tfor (var i = 0, _len = textCodes.length; i < _len; i += 2) {\n\t\t\t\tflags.push(textCodes.substr(i, 2));\n\t\t\t}\n\t\t\t\n\t\t\treturn flags;\n\t\t}\n\t\telse if (this.flags.FLAG === \"num\") {\n\t\t\treturn textCodes.split(\",\");\n\t\t}\n\t},\n\t\n\t/**\n\t * Applies an affix rule to a word.\n\t *\n\t * @param {String} word The base word.\n\t * @param {Object} rule The affix rule.\n\t * @returns {String[]} The new words generated by the rule.\n\t */\n\t\n\t_applyRule : function (word, rule) {\n\t\tvar entries = rule.entries;\n\t\tvar newWords = [];\n\t\t\n\t\tfor (var i = 0, _len = entries.length; i < _len; i++) {\n\t\t\tvar entry = entries[i];\n\t\t\t\n\t\t\tif (!entry.match || word.match(entry.match)) {\n\t\t\t\tvar newWord = word;\n\t\t\t\t\n\t\t\t\tif (entry.remove) {\n\t\t\t\t\tnewWord = newWord.replace(entry.remove, \"\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (rule.type === \"SFX\") {\n\t\t\t\t\tnewWord = newWord + entry.add;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnewWord = entry.add + newWord;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tnewWords.push(newWord);\n\t\t\t\t\n\t\t\t\tif (\"continuationClasses\" in entry) {\n\t\t\t\t\tfor (var j = 0, _jlen = entry.continuationClasses.length; j < _jlen; j++) {\n\t\t\t\t\t\tvar continuationRule = this.rules[entry.continuationClasses[j]];\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (continuationRule) {\n\t\t\t\t\t\t\tnewWords = newWords.concat(this._applyRule(newWord, continuationRule));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/*\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// This shouldn't happen, but it does, at least in the de_DE dictionary.\n\t\t\t\t\t\t\t// I think the author mistakenly supplied lower-case rule codes instead \n\t\t\t\t\t\t\t// of upper-case.\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn newWords;\n\t},\n\t\n\t/**\n\t * Checks whether a word or a capitalization variant exists in the current dictionary.\n\t * The word is trimmed and several variations of capitalizations are checked.\n\t * If you want to check a word without any changes made to it, call checkExact()\n\t *\n\t * @see http://blog.stevenlevithan.com/archives/faster-trim-javascript re:trimming function\n\t *\n\t * @param {String} aWord The word to check.\n\t * @returns {Boolean}\n\t */\n\t\n\tcheck : function (aWord) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\t\t\n\t\t// Remove leading and trailing whitespace\n\t\tvar trimmedWord = aWord.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t\t\n\t\tif (this.checkExact(trimmedWord)) {\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\t// The exact word is not in the dictionary.\n\t\tif (trimmedWord.toUpperCase() === trimmedWord) {\n\t\t\t// The word was supplied in all uppercase.\n\t\t\t// Check for a capitalized form of the word.\n\t\t\tvar capitalizedWord = trimmedWord[0] + trimmedWord.substring(1).toLowerCase();\n\t\t\t\n\t\t\tif (this.hasFlag(capitalizedWord, \"KEEPCASE\")) {\n\t\t\t\t// Capitalization variants are not allowed for this word.\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tif (this.checkExact(capitalizedWord)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar lowercaseWord = trimmedWord.toLowerCase();\n\t\t\n\t\tif (lowercaseWord !== trimmedWord) {\n\t\t\tif (this.hasFlag(lowercaseWord, \"KEEPCASE\")) {\n\t\t\t\t// Capitalization variants are not allowed for this word.\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\t// Check for a lowercase form\n\t\t\tif (this.checkExact(lowercaseWord)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Checks whether a word exists in the current dictionary.\n\t *\n\t * @param {String} word The word to check.\n\t * @returns {Boolean}\n\t */\n\t\n\tcheckExact : function (word) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tvar ruleCodes = this.dictionaryTable[word];\n\t\t\n\t\tvar i, _len;\n\t\t\n\t\tif (typeof ruleCodes === 'undefined') {\n\t\t\t// Check if this might be a compound word.\n\t\t\tif (\"COMPOUNDMIN\" in this.flags && word.length >= this.flags.COMPOUNDMIN) {\n\t\t\t\tfor (i = 0, _len = this.compoundRules.length; i < _len; i++) {\n\t\t\t\t\tif (word.match(this.compoundRules[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (ruleCodes === null) {\n\t\t\t// a null (but not undefined) value for an entry in the dictionary table\n\t\t\t// means that the word is in the dictionary but has no flags.\n\t\t\treturn true;\n\t\t}\n\t\telse if (typeof ruleCodes === 'object') { // this.dictionary['hasOwnProperty'] will be a function.\n\t\t\tfor (i = 0, _len = ruleCodes.length; i < _len; i++) {\n\t\t\t\tif (!this.hasFlag(word, \"ONLYINCOMPOUND\", ruleCodes[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Looks up whether a given word is flagged with a given flag.\n\t *\n\t * @param {String} word The word in question.\n\t * @param {String} flag The flag in question.\n\t * @return {Boolean}\n\t */\n\t \n\thasFlag : function (word, flag, wordFlags) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tif (flag in this.flags) {\n\t\t\tif (typeof wordFlags === 'undefined') {\n\t\t\t\twordFlags = Array.prototype.concat.apply([], this.dictionaryTable[word]);\n\t\t\t}\n\t\t\t\n\t\t\tif (wordFlags && wordFlags.indexOf(this.flags[flag]) !== -1) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Returns a list of suggestions for a misspelled word.\n\t *\n\t * @see http://www.norvig.com/spell-correct.html for the basis of this suggestor.\n\t * This suggestor is primitive, but it works.\n\t *\n\t * @param {String} word The misspelling.\n\t * @param {Number} [limit=5] The maximum number of suggestions to return.\n\t * @returns {String[]} The array of suggestions.\n\t */\n\t\n\talphabet : \"\",\n\t\n\tsuggest : function (word, limit) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tlimit = limit || 5;\n\n\t\tif (this.memoized.hasOwnProperty(word)) {\n\t\t\tvar memoizedLimit = this.memoized[word]['limit'];\n\n\t\t\t// Only return the cached list if it's big enough or if there weren't enough suggestions\n\t\t\t// to fill a smaller limit.\n\t\t\tif (limit <= memoizedLimit || this.memoized[word]['suggestions'].length < memoizedLimit) {\n\t\t\t\treturn this.memoized[word]['suggestions'].slice(0, limit);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (this.check(word)) return [];\n\t\t\n\t\t// Check the replacement table.\n\t\tfor (var i = 0, _len = this.replacementTable.length; i < _len; i++) {\n\t\t\tvar replacementEntry = this.replacementTable[i];\n\t\t\t\n\t\t\tif (word.indexOf(replacementEntry[0]) !== -1) {\n\t\t\t\tvar correctedWord = word.replace(replacementEntry[0], replacementEntry[1]);\n\t\t\t\t\n\t\t\t\tif (this.check(correctedWord)) {\n\t\t\t\t\treturn [ correctedWord ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar self = this;\n\t\tself.alphabet = \"abcdefghijklmnopqrstuvwxyz\";\n\t\t\n\t\t/*\n\t\tif (!self.alphabet) {\n\t\t\t// Use the alphabet as implicitly defined by the words in the dictionary.\n\t\t\tvar alphaHash = {};\n\t\t\t\n\t\t\tfor (var i in self.dictionaryTable) {\n\t\t\t\tfor (var j = 0, _len = i.length; j < _len; j++) {\n\t\t\t\t\talphaHash[i[j]] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tfor (var i in alphaHash) {\n\t\t\t\tself.alphabet += i;\n\t\t\t}\n\t\t\t\n\t\t\tvar alphaArray = self.alphabet.split(\"\");\n\t\t\talphaArray.sort();\n\t\t\tself.alphabet = alphaArray.join(\"\");\n\t\t}\n\t\t*/\n\t\t\n\t\tfunction edits1(words) {\n\t\t\tvar rv = [];\n\t\t\t\n\t\t\tvar ii, i, j, _iilen, _len, _jlen;\n\t\t\t\n\t\t\tfor (ii = 0, _iilen = words.length; ii < _iilen; ii++) {\n\t\t\t\tvar word = words[ii];\n\t\t\t\t\n\t\t\t\tfor (i = 0, _len = word.length + 1; i < _len; i++) {\n\t\t\t\t\tvar s = [ word.substring(0, i), word.substring(i) ];\n\t\t\t\t\n\t\t\t\t\tif (s[1]) {\n\t\t\t\t\t\trv.push(s[0] + s[1].substring(1));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Eliminate transpositions of identical letters\n\t\t\t\t\tif (s[1].length > 1 && s[1][1] !== s[1][0]) {\n\t\t\t\t\t\trv.push(s[0] + s[1][1] + s[1][0] + s[1].substring(2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (s[1]) {\n\t\t\t\t\t\tfor (j = 0, _jlen = self.alphabet.length; j < _jlen; j++) {\n\t\t\t\t\t\t\t// Eliminate replacement of a letter by itself\n\t\t\t\t\t\t\tif (self.alphabet[j] != s[1].substring(0,1)){\n\t\t\t\t\t\t\t\trv.push(s[0] + self.alphabet[j] + s[1].substring(1));\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\tif (s[1]) {\n\t\t\t\t\t\tfor (j = 0, _jlen = self.alphabet.length; j < _jlen; j++) {\n\t\t\t\t\t\t\trv.push(s[0] + self.alphabet[j] + s[1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn rv;\n\t\t}\n\t\t\n\t\tfunction known(words) {\n\t\t\tvar rv = [];\n\t\t\t\n\t\t\tfor (var i = 0, _len = words.length; i < _len; i++) {\n\t\t\t\tif (self.check(words[i])) {\n\t\t\t\t\trv.push(words[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn rv;\n\t\t}\n\t\t\n\t\tfunction correct(word) {\n\t\t\t// Get the edit-distance-1 and edit-distance-2 forms of this word.\n\t\t\tvar ed1 = edits1([word]);\n\t\t\tvar ed2 = edits1(ed1);\n\t\t\t\n\t\t\tvar corrections = known(ed1.concat(ed2));\n\t\t\t\n\t\t\tvar i, _len;\n\t\t\t\n\t\t\t// Sort the edits based on how many different ways they were created.\n\t\t\tvar weighted_corrections = {};\n\t\t\t\n\t\t\tfor (i = 0, _len = corrections.length; i < _len; i++) {\n\t\t\t\tif (!(corrections[i] in weighted_corrections)) {\n\t\t\t\t\tweighted_corrections[corrections[i]] = 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tweighted_corrections[corrections[i]] += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar sorted_corrections = [];\n\t\t\t\n\t\t\tfor (i in weighted_corrections) {\n\t\t\t\tif (weighted_corrections.hasOwnProperty(i)) {\n\t\t\t\t\tsorted_corrections.push([ i, weighted_corrections[i] ]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tfunction sorter(a, b) {\n\t\t\t\tif (a[1] < b[1]) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\t\n\t\t\tsorted_corrections.sort(sorter).reverse();\n\t\t\t\n\t\t\tvar rv = [];\n\n\t\t\tvar capitalization_scheme = \"lowercase\";\n\t\t\t\n\t\t\tif (word.toUpperCase() === word) {\n\t\t\t\tcapitalization_scheme = \"uppercase\";\n\t\t\t}\n\t\t\telse if (word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase() === word) {\n\t\t\t\tcapitalization_scheme = \"capitalized\";\n\t\t\t}\n\t\t\t\n\t\t\tfor (i = 0, _len = Math.min(limit, sorted_corrections.length); i < _len; i++) {\n\t\t\t\tif (\"uppercase\" === capitalization_scheme) {\n\t\t\t\t\tsorted_corrections[i][0] = sorted_corrections[i][0].toUpperCase();\n\t\t\t\t}\n\t\t\t\telse if (\"capitalized\" === capitalization_scheme) {\n\t\t\t\t\tsorted_corrections[i][0] = sorted_corrections[i][0].substr(0, 1).toUpperCase() + sorted_corrections[i][0].substr(1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!self.hasFlag(sorted_corrections[i][0], \"NOSUGGEST\")) {\n\t\t\t\t\trv.push(sorted_corrections[i][0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn rv;\n\t\t}\n\t\t\n\t\tthis.memoized[word] = {\n\t\t\t'suggestions': correct(word),\n\t\t\t'limit': limit\n\t\t};\n\n\t\treturn this.memoized[word]['suggestions'];\n\t}\n};\n})();\n\n// Support for use as a node.js module.\nif (typeof module !== 'undefined') {\n\tmodule.exports = Typo;\n}","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n;(function(root) {\n'use strict';\n\n/**\n * Block-Level Grammar\n */\n\nvar block = {\n newline: /^\\n+/,\n code: /^( {4}[^\\n]+\\n*)+/,\n fences: /^ {0,3}(`{3,}|~{3,})([^`~\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6}) +([^\\n]*?)(?: +#+)? *(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?\\\\?>\\\\n*' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?>\\\\n*' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\\\\n*' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noop,\n table: noop,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}\\.)/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?!\\1bull ?)[^\\n]*)*/;\nblock.item = edit(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.list = edit(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?-->/;\nblock.html = edit(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} +')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}|~{3,})[^`\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge({}, block.normal, {\n nptable: /^ *([^|\\n ].*\\|.*)\\n *([-:]+ *\\|[-| :]*)(?:\\n((?:.*[^>\\n ].*(?:\\n|$))*)\\n*|$)/,\n table: /^ *\\|(.+)\\n *\\|?( *[-:]+[-| :]*)(?:\\n((?: *[^>\\n ].*(?:\\n|$))*)\\n*|$)/\n});\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge({}, block.normal, {\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^ *(#{1,6}) *([^\\n]+?) *(?:#+ *)?(?:\\n+|$)/,\n fences: noop, // fences not supported\n paragraph: edit(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Block Lexer\n */\n\nfunction Lexer(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || marked.defaults;\n this.rules = block.normal;\n\n if (this.options.pedantic) {\n this.rules = block.pedantic;\n } else if (this.options.gfm) {\n this.rules = block.gfm;\n }\n}\n\n/**\n * Expose Block Rules\n */\n\nLexer.rules = block;\n\n/**\n * Static Lex Method\n */\n\nLexer.lex = function(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n};\n\n/**\n * Preprocessing\n */\n\nLexer.prototype.lex = function(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ')\n .replace(/\\u00a0/g, ' ')\n .replace(/\\u2424/g, '\\n');\n\n return this.token(src, true);\n};\n\n/**\n * Lexing\n */\n\nLexer.prototype.token = function(src, top) {\n src = src.replace(/^ +$/gm, '');\n var next,\n loose,\n cap,\n bull,\n b,\n item,\n listStart,\n listItems,\n t,\n space,\n i,\n tag,\n l,\n isordered,\n istask,\n ischecked;\n\n while (src) {\n // newline\n if (cap = this.rules.newline.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[0].length > 1) {\n this.tokens.push({\n type: 'space'\n });\n }\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n var lastToken = this.tokens[this.tokens.length - 1];\n src = src.substring(cap[0].length);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.text += '\\n' + cap[0].trimRight();\n } else {\n cap = cap[0].replace(/^ {4}/gm, '');\n this.tokens.push({\n type: 'code',\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(cap, '\\n')\n : cap\n });\n }\n continue;\n }\n\n // fences\n if (cap = this.rules.fences.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'code',\n lang: cap[2] ? cap[2].trim() : cap[2],\n text: cap[3] || ''\n });\n continue;\n }\n\n // heading\n if (cap = this.rules.heading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[1].length,\n text: cap[2]\n });\n continue;\n }\n\n // table no leading pipe (gfm)\n if (cap = this.rules.nptable.exec(src)) {\n item = {\n type: 'table',\n header: splitCells(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n src = src.substring(cap[0].length);\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = splitCells(item.cells[i], item.header.length);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n }\n\n // hr\n if (cap = this.rules.hr.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'hr'\n });\n continue;\n }\n\n // blockquote\n if (cap = this.rules.blockquote.exec(src)) {\n src = src.substring(cap[0].length);\n\n this.tokens.push({\n type: 'blockquote_start'\n });\n\n cap = cap[0].replace(/^ *> ?/gm, '');\n\n // Pass `top` to keep the current\n // \"toplevel\" state. This is exactly\n // how markdown.pl works.\n this.token(cap, top);\n\n this.tokens.push({\n type: 'blockquote_end'\n });\n\n continue;\n }\n\n // list\n if (cap = this.rules.list.exec(src)) {\n src = src.substring(cap[0].length);\n bull = cap[2];\n isordered = bull.length > 1;\n\n listStart = {\n type: 'list_start',\n ordered: isordered,\n start: isordered ? +bull : '',\n loose: false\n };\n\n this.tokens.push(listStart);\n\n // Get each top-level item.\n cap = cap[0].match(this.rules.item);\n\n listItems = [];\n next = false;\n l = cap.length;\n i = 0;\n\n for (; i < l; i++) {\n item = cap[i];\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+\\.) */, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n b = block.bullet.exec(cap[i + 1])[0];\n if (bull.length > 1 ? b.length === 1\n : (b.length > 1 || (this.options.smartLists && b !== bull))) {\n src = cap.slice(i + 1).join('\\n') + src;\n i = l - 1;\n }\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n listStart.loose = true;\n }\n\n // Check for task list items\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n\n t = {\n type: 'list_item_start',\n task: istask,\n checked: ischecked,\n loose: loose\n };\n\n listItems.push(t);\n this.tokens.push(t);\n\n // Recurse.\n this.token(item, false);\n\n this.tokens.push({\n type: 'list_item_end'\n });\n }\n\n if (listStart.loose) {\n l = listItems.length;\n i = 0;\n for (; i < l; i++) {\n listItems[i].loose = true;\n }\n }\n\n this.tokens.push({\n type: 'list_end'\n });\n\n continue;\n }\n\n // html\n if (cap = this.rules.html.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]\n });\n continue;\n }\n\n // def\n if (top && (cap = this.rules.def.exec(src))) {\n src = src.substring(cap[0].length);\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n if (!this.tokens.links[tag]) {\n this.tokens.links[tag] = {\n href: cap[2],\n title: cap[3]\n };\n }\n continue;\n }\n\n // table (gfm)\n if (cap = this.rules.table.exec(src)) {\n item = {\n type: 'table',\n header: splitCells(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n src = src.substring(cap[0].length);\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = splitCells(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n }\n\n // lheading\n if (cap = this.rules.lheading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n });\n continue;\n }\n\n // top-level paragraph\n if (top && (cap = this.rules.paragraph.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'paragraph',\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n });\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n // Top-level should never reach here.\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'text',\n text: cap[0]\n });\n continue;\n }\n\n if (src) {\n throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return this.tokens;\n};\n\n/**\n * Inline-Level Grammar\n */\n\nvar inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noop,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n strong: /^__([^\\s_])__(?!_)|^\\*\\*([^\\s*])\\*\\*(?!\\*)|^__([^\\s][\\s\\S]*?[^\\s])__(?!_)|^\\*\\*([^\\s][\\s\\S]*?[^\\s])\\*\\*(?!\\*)/,\n em: /^_([^\\s_])_(?!_)|^\\*([^\\s*<\\[])\\*(?!\\*)|^_([^\\s<][\\s\\S]*?[^\\s_])_(?!_|[^\\spunctuation])|^_([^\\s_<][\\s\\S]*?[^\\s])_(?!_|[^\\spunctuation])|^\\*([^\\s<\"][\\s\\S]*?[^\\s\\*])\\*(?!\\*|[^\\spunctuation])|^\\*([^\\s*\"<\\[][\\s\\S]*?[^\\s])\\*(?!\\*)/,\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noop,\n text: /^(`+|[^`])(?:[\\s\\S]*?(?:(?=[\\\\<!\\[`*]|\\b_|$)|[^ ](?= {2,}\\n))|(?= {2,}\\n))/\n};\n\n// list of punctuation marks from common mark spec\n// without ` and ] to workaround Rule 17 (inline code blocks/links)\ninline._punctuation = '!\"#$%&\\'()*+,\\\\-./:;<=>?@\\\\[^_{|}~';\ninline.em = edit(inline.em).replace(/punctuation/g, inline._punctuation).getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit(inline.tag)\n .replace('comment', block._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[[^\\[\\]]*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\[<>]?|[^\\s<>\\\\])*>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge({}, inline.normal, {\n strong: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n em: /^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge({}, inline.normal, {\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^~+(?=\\S)([\\s\\S]*?\\S)~+/,\n text: /^(`+|[^`])(?:[\\s\\S]*?(?:(?=[\\\\<!\\[`*~]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?= {2,}\\n|[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge({}, inline.gfm, {\n br: edit(inline.br).replace('{2,}', '*').getRegex(),\n text: edit(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\n/**\n * Inline Lexer & Compiler\n */\n\nfunction InlineLexer(links, options) {\n this.options = options || marked.defaults;\n this.links = links;\n this.rules = inline.normal;\n this.renderer = this.options.renderer || new Renderer();\n this.renderer.options = this.options;\n\n if (!this.links) {\n throw new Error('Tokens array requires a `links` property.');\n }\n\n if (this.options.pedantic) {\n this.rules = inline.pedantic;\n } else if (this.options.gfm) {\n if (this.options.breaks) {\n this.rules = inline.breaks;\n } else {\n this.rules = inline.gfm;\n }\n }\n}\n\n/**\n * Expose Inline Rules\n */\n\nInlineLexer.rules = inline;\n\n/**\n * Static Lexing/Compiling Method\n */\n\nInlineLexer.output = function(src, links, options) {\n var inline = new InlineLexer(links, options);\n return inline.output(src);\n};\n\n/**\n * Lexing/Compiling\n */\n\nInlineLexer.prototype.output = function(src) {\n var out = '',\n link,\n text,\n href,\n title,\n cap,\n prevCapZero;\n\n while (src) {\n // escape\n if (cap = this.rules.escape.exec(src)) {\n src = src.substring(cap[0].length);\n out += escape(cap[1]);\n continue;\n }\n\n // tag\n if (cap = this.rules.tag.exec(src)) {\n if (!this.inLink && /^<a /i.test(cap[0])) {\n this.inLink = true;\n } else if (this.inLink && /^<\\/a>/i.test(cap[0])) {\n this.inLink = false;\n }\n if (!this.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.inRawBlock = true;\n } else if (this.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.inRawBlock = false;\n }\n\n src = src.substring(cap[0].length);\n out += this.options.sanitize\n ? this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape(cap[0])\n : cap[0];\n continue;\n }\n\n // link\n if (cap = this.rules.link.exec(src)) {\n var lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n var linkLen = 4 + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n src = src.substring(cap[0].length);\n this.inLink = true;\n href = cap[2];\n if (this.options.pedantic) {\n link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n } else {\n title = '';\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim().replace(/^<([\\s\\S]*)>$/, '$1');\n out += this.outputLink(cap, {\n href: InlineLexer.escapes(href),\n title: InlineLexer.escapes(title)\n });\n this.inLink = false;\n continue;\n }\n\n // reflink, nolink\n if ((cap = this.rules.reflink.exec(src))\n || (cap = this.rules.nolink.exec(src))) {\n src = src.substring(cap[0].length);\n link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = this.links[link.toLowerCase()];\n if (!link || !link.href) {\n out += cap[0].charAt(0);\n src = cap[0].substring(1) + src;\n continue;\n }\n this.inLink = true;\n out += this.outputLink(cap, link);\n this.inLink = false;\n continue;\n }\n\n // strong\n if (cap = this.rules.strong.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));\n continue;\n }\n\n // em\n if (cap = this.rules.em.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));\n continue;\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.codespan(escape(cap[2].trim(), true));\n continue;\n }\n\n // br\n if (cap = this.rules.br.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.br();\n continue;\n }\n\n // del (gfm)\n if (cap = this.rules.del.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.del(this.output(cap[1]));\n continue;\n }\n\n // autolink\n if (cap = this.rules.autolink.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[2] === '@') {\n text = escape(this.mangle(cap[1]));\n href = 'mailto:' + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // url (gfm)\n if (!this.inLink && (cap = this.rules.url.exec(src))) {\n if (cap[2] === '@') {\n text = escape(cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n src = src.substring(cap[0].length);\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n src = src.substring(cap[0].length);\n if (this.inRawBlock) {\n out += this.renderer.text(this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]);\n } else {\n out += this.renderer.text(escape(this.smartypants(cap[0])));\n }\n continue;\n }\n\n if (src) {\n throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return out;\n};\n\nInlineLexer.escapes = function(text) {\n return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;\n};\n\n/**\n * Compile Link\n */\n\nInlineLexer.prototype.outputLink = function(cap, link) {\n var href = link.href,\n title = link.title ? escape(link.title) : null;\n\n return cap[0].charAt(0) !== '!'\n ? this.renderer.link(href, title, this.output(cap[1]))\n : this.renderer.image(href, title, escape(cap[1]));\n};\n\n/**\n * Smartypants Transformations\n */\n\nInlineLexer.prototype.smartypants = function(text) {\n if (!this.options.smartypants) return text;\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n};\n\n/**\n * Mangle Links\n */\n\nInlineLexer.prototype.mangle = function(text) {\n if (!this.options.mangle) return text;\n var out = '',\n l = text.length,\n i = 0,\n ch;\n\n for (; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n};\n\n/**\n * Renderer\n */\n\nfunction Renderer(options) {\n this.options = options || marked.defaults;\n}\n\nRenderer.prototype.code = function(code, infostring, escaped) {\n var lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n var out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '</code></pre>';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape(lang, true)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n';\n};\n\nRenderer.prototype.blockquote = function(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n};\n\nRenderer.prototype.html = function(html) {\n return html;\n};\n\nRenderer.prototype.heading = function(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n};\n\nRenderer.prototype.hr = function() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n};\n\nRenderer.prototype.list = function(body, ordered, start) {\n var type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n};\n\nRenderer.prototype.listitem = function(text) {\n return '<li>' + text + '</li>\\n';\n};\n\nRenderer.prototype.checkbox = function(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n};\n\nRenderer.prototype.paragraph = function(text) {\n return '<p>' + text + '</p>\\n';\n};\n\nRenderer.prototype.table = function(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n};\n\nRenderer.prototype.tablerow = function(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n};\n\nRenderer.prototype.tablecell = function(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n};\n\n// span level renderer\nRenderer.prototype.strong = function(text) {\n return '<strong>' + text + '</strong>';\n};\n\nRenderer.prototype.em = function(text) {\n return '<em>' + text + '</em>';\n};\n\nRenderer.prototype.codespan = function(text) {\n return '<code>' + text + '</code>';\n};\n\nRenderer.prototype.br = function() {\n return this.options.xhtml ? '<br/>' : '<br>';\n};\n\nRenderer.prototype.del = function(text) {\n return '<del>' + text + '</del>';\n};\n\nRenderer.prototype.link = function(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n var out = '<a href=\"' + escape(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n};\n\nRenderer.prototype.image = function(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n var out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n};\n\nRenderer.prototype.text = function(text) {\n return text;\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\n\nfunction TextRenderer() {}\n\n// no need for block level renderers\n\nTextRenderer.prototype.strong =\nTextRenderer.prototype.em =\nTextRenderer.prototype.codespan =\nTextRenderer.prototype.del =\nTextRenderer.prototype.text = function(text) {\n return text;\n};\n\nTextRenderer.prototype.link =\nTextRenderer.prototype.image = function(href, title, text) {\n return '' + text;\n};\n\nTextRenderer.prototype.br = function() {\n return '';\n};\n\n/**\n * Parsing & Compiling\n */\n\nfunction Parser(options) {\n this.tokens = [];\n this.token = null;\n this.options = options || marked.defaults;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.slugger = new Slugger();\n}\n\n/**\n * Static Parse Method\n */\n\nParser.parse = function(src, options) {\n var parser = new Parser(options);\n return parser.parse(src);\n};\n\n/**\n * Parse Loop\n */\n\nParser.prototype.parse = function(src) {\n this.inline = new InlineLexer(src.links, this.options);\n // use an InlineLexer with a TextRenderer to extract pure text\n this.inlineText = new InlineLexer(\n src.links,\n merge({}, this.options, { renderer: new TextRenderer() })\n );\n this.tokens = src.reverse();\n\n var out = '';\n while (this.next()) {\n out += this.tok();\n }\n\n return out;\n};\n\n/**\n * Next Token\n */\n\nParser.prototype.next = function() {\n this.token = this.tokens.pop();\n return this.token;\n};\n\n/**\n * Preview Next Token\n */\n\nParser.prototype.peek = function() {\n return this.tokens[this.tokens.length - 1] || 0;\n};\n\n/**\n * Parse Text Tokens\n */\n\nParser.prototype.parseText = function() {\n var body = this.token.text;\n\n while (this.peek().type === 'text') {\n body += '\\n' + this.next().text;\n }\n\n return this.inline.output(body);\n};\n\n/**\n * Parse Current Token\n */\n\nParser.prototype.tok = function() {\n switch (this.token.type) {\n case 'space': {\n return '';\n }\n case 'hr': {\n return this.renderer.hr();\n }\n case 'heading': {\n return this.renderer.heading(\n this.inline.output(this.token.text),\n this.token.depth,\n unescape(this.inlineText.output(this.token.text)),\n this.slugger);\n }\n case 'code': {\n return this.renderer.code(this.token.text,\n this.token.lang,\n this.token.escaped);\n }\n case 'table': {\n var header = '',\n body = '',\n i,\n row,\n cell,\n j;\n\n // header\n cell = '';\n for (i = 0; i < this.token.header.length; i++) {\n cell += this.renderer.tablecell(\n this.inline.output(this.token.header[i]),\n { header: true, align: this.token.align[i] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n for (i = 0; i < this.token.cells.length; i++) {\n row = this.token.cells[i];\n\n cell = '';\n for (j = 0; j < row.length; j++) {\n cell += this.renderer.tablecell(\n this.inline.output(row[j]),\n { header: false, align: this.token.align[j] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n return this.renderer.table(header, body);\n }\n case 'blockquote_start': {\n body = '';\n\n while (this.next().type !== 'blockquote_end') {\n body += this.tok();\n }\n\n return this.renderer.blockquote(body);\n }\n case 'list_start': {\n body = '';\n var ordered = this.token.ordered,\n start = this.token.start;\n\n while (this.next().type !== 'list_end') {\n body += this.tok();\n }\n\n return this.renderer.list(body, ordered, start);\n }\n case 'list_item_start': {\n body = '';\n var loose = this.token.loose;\n var checked = this.token.checked;\n var task = this.token.task;\n\n if (this.token.task) {\n body += this.renderer.checkbox(checked);\n }\n\n while (this.next().type !== 'list_item_end') {\n body += !loose && this.token.type === 'text'\n ? this.parseText()\n : this.tok();\n }\n return this.renderer.listitem(body, task, checked);\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n return this.renderer.html(this.token.text);\n }\n case 'paragraph': {\n return this.renderer.paragraph(this.inline.output(this.token.text));\n }\n case 'text': {\n return this.renderer.paragraph(this.parseText());\n }\n default: {\n var errMsg = 'Token with \"' + this.token.type + '\" type was not found.';\n if (this.options.silent) {\n console.log(errMsg);\n } else {\n throw new Error(errMsg);\n }\n }\n }\n};\n\n/**\n * Slugger generates header id\n */\n\nfunction Slugger() {\n this.seen = {};\n}\n\n/**\n * Convert string to unique id\n */\n\nSlugger.prototype.slug = function(value) {\n var slug = value\n .toLowerCase()\n .trim()\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n\n if (this.seen.hasOwnProperty(slug)) {\n var originalSlug = slug;\n do {\n this.seen[originalSlug]++;\n slug = originalSlug + '-' + this.seen[originalSlug];\n } while (this.seen.hasOwnProperty(slug));\n }\n this.seen[slug] = 0;\n\n return slug;\n};\n\n/**\n * Helpers\n */\n\nfunction escape(html, encode) {\n if (encode) {\n if (escape.escapeTest.test(html)) {\n return html.replace(escape.escapeReplace, function(ch) { return escape.replacements[ch]; });\n }\n } else {\n if (escape.escapeTestNoEncode.test(html)) {\n return html.replace(escape.escapeReplaceNoEncode, function(ch) { return escape.replacements[ch]; });\n }\n }\n\n return html;\n}\n\nescape.escapeTest = /[&<>\"']/;\nescape.escapeReplace = /[&<>\"']/g;\nescape.replacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\n\nescape.escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nescape.escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig, function(_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n return {\n replace: function(name, val) {\n val = val.source || val;\n val = val.replace(/(^|[^\\[])\\^/g, '$1');\n regex = regex.replace(name, val);\n return this;\n },\n getRegex: function() {\n return new RegExp(regex, opt);\n }\n };\n}\n\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n try {\n var prot = decodeURIComponent(unescape(href))\n .replace(/[^\\w:]/g, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (/^[^:]+:\\/*[^/]*$/.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n\n if (href.slice(0, 2) === '//') {\n return base.replace(/:[\\s\\S]*/, ':') + href;\n } else if (href.charAt(0) === '/') {\n return base.replace(/(:\\/*[^/]*)[\\s\\S]*/, '$1') + href;\n } else {\n return base + href;\n }\n}\nvar baseUrls = {};\nvar originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\nfunction noop() {}\nnoop.exec = noop;\n\nfunction merge(obj) {\n var i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n var row = tableRow.replace(/\\|/g, function(match, offset, str) {\n var escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/),\n i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n if (str.length === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n var suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < str.length) {\n var currChar = str.charAt(str.length - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, str.length - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n var level = 0;\n for (var i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n/**\n * Marked\n */\n\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (callback || typeof opt === 'function') {\n if (!callback) {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n checkSanitizeDeprecation(opt);\n\n var highlight = opt.highlight,\n tokens,\n pending,\n i = 0;\n\n try {\n tokens = Lexer.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n pending = tokens.length;\n\n var done = function(err) {\n if (err) {\n opt.highlight = highlight;\n return callback(err);\n }\n\n var out;\n\n try {\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!pending) return done();\n\n for (; i < tokens.length; i++) {\n (function(token) {\n if (token.type !== 'code') {\n return --pending || done();\n }\n return highlight(token.text, token.lang, function(err, code) {\n if (err) return done(err);\n if (code == null || code === token.text) {\n return --pending || done();\n }\n token.text = code;\n token.escaped = true;\n --pending || done();\n });\n })(tokens[i]);\n }\n\n return;\n }\n try {\n if (opt) opt = merge({}, marked.defaults, opt);\n checkSanitizeDeprecation(opt);\n return Parser.parse(Lexer.lex(src, opt), opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if ((opt || marked.defaults).silent) {\n return '<p>An error occurred:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge(marked.defaults, opt);\n return marked;\n};\n\nmarked.getDefaults = function() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: new Renderer(),\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n xhtml: false\n };\n};\n\nmarked.defaults = marked.getDefaults();\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\n\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\n\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\n\nmarked.InlineLexer = InlineLexer;\nmarked.inlineLexer = InlineLexer.output;\n\nmarked.Slugger = Slugger;\n\nmarked.parse = marked;\n\nif (typeof module !== 'undefined' && typeof exports === 'object') {\n module.exports = marked;\n} else if (typeof define === 'function' && define.amd) {\n define(function() { return marked; });\n} else {\n root.marked = marked;\n}\n})(this || (typeof window !== 'undefined' ? window : global));\n","module.exports = function(hljs) {\n var IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*';\n var IDENT_FUNC_RETURN_TYPE_RE = '([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)';\n\n var AS3_REST_ARG_MODE = {\n className: 'rest_arg',\n begin: '[.]{3}', end: IDENT_RE,\n relevance: 10\n };\n\n return {\n aliases: ['as'],\n keywords: {\n keyword: 'as break case catch class const continue default delete do dynamic each ' +\n 'else extends final finally for function get if implements import in include ' +\n 'instanceof interface internal is namespace native new override package private ' +\n 'protected public return set static super switch this throw try typeof use var void ' +\n 'while with',\n literal: 'true false null undefined'\n },\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_NUMBER_MODE,\n {\n className: 'class',\n beginKeywords: 'package', end: '{',\n contains: [hljs.TITLE_MODE]\n },\n {\n className: 'class',\n beginKeywords: 'class interface', end: '{', excludeEnd: true,\n contains: [\n {\n beginKeywords: 'extends implements'\n },\n hljs.TITLE_MODE\n ]\n },\n {\n className: 'meta',\n beginKeywords: 'import include', end: ';',\n keywords: {'meta-keyword': 'import include'}\n },\n {\n className: 'function',\n beginKeywords: 'function', end: '[{;]', excludeEnd: true,\n illegal: '\\\\S',\n contains: [\n hljs.TITLE_MODE,\n {\n className: 'params',\n begin: '\\\\(', end: '\\\\)',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n AS3_REST_ARG_MODE\n ]\n },\n {\n begin: ':\\\\s*' + IDENT_FUNC_RETURN_TYPE_RE\n }\n ]\n },\n hljs.METHOD_GUARD\n ],\n illegal: /#/\n };\n};","module.exports = function(hljs) {\n var NUMBER = {className: 'number', begin: '[\\\\$%]\\\\d+'};\n return {\n aliases: ['apacheconf'],\n case_insensitive: true,\n contains: [\n hljs.HASH_COMMENT_MODE,\n {className: 'section', begin: '</?', end: '>'},\n {\n className: 'attribute',\n begin: /\\w+/,\n relevance: 0,\n // keywords aren’t needed for highlighting per se, they only boost relevance\n // for a very generally defined mode (starts with a word, ends with line-end\n keywords: {\n nomarkup:\n 'order deny allow setenv rewriterule rewriteengine rewritecond documentroot ' +\n 'sethandler errordocument loadmodule options header listen serverroot ' +\n 'servername'\n },\n starts: {\n end: /$/,\n relevance: 0,\n keywords: {\n literal: 'on off all'\n },\n contains: [\n {\n className: 'meta',\n begin: '\\\\s\\\\[', end: '\\\\]$'\n },\n {\n className: 'variable',\n begin: '[\\\\$%]\\\\{', end: '\\\\}',\n contains: ['self', NUMBER]\n },\n NUMBER,\n hljs.QUOTE_STRING_MODE\n ]\n }\n }\n ],\n illegal: /\\S/\n };\n};","module.exports = function(hljs) {\n var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: ''});\n var PARAMS = {\n className: 'params',\n begin: '\\\\(', end: '\\\\)',\n contains: ['self', hljs.C_NUMBER_MODE, STRING]\n };\n var COMMENT_MODE_1 = hljs.COMMENT('--', '$');\n var COMMENT_MODE_2 = hljs.COMMENT(\n '\\\\(\\\\*',\n '\\\\*\\\\)',\n {\n contains: ['self', COMMENT_MODE_1] //allow nesting\n }\n );\n var COMMENTS = [\n COMMENT_MODE_1,\n COMMENT_MODE_2,\n hljs.HASH_COMMENT_MODE\n ];\n\n return {\n aliases: ['osascript'],\n keywords: {\n keyword:\n 'about above after against and around as at back before beginning ' +\n 'behind below beneath beside between but by considering ' +\n 'contain contains continue copy div does eighth else end equal ' +\n 'equals error every exit fifth first for fourth from front ' +\n 'get given global if ignoring in into is it its last local me ' +\n 'middle mod my ninth not of on onto or over prop property put ref ' +\n 'reference repeat returning script second set seventh since ' +\n 'sixth some tell tenth that the|0 then third through thru ' +\n 'timeout times to transaction try until where while whose with ' +\n 'without',\n literal:\n 'AppleScript false linefeed return pi quote result space tab true',\n built_in:\n 'alias application boolean class constant date file integer list ' +\n 'number real record string text ' +\n 'activate beep count delay launch log offset read round ' +\n 'run say summarize write ' +\n 'character characters contents day frontmost id item length ' +\n 'month name paragraph paragraphs rest reverse running time version ' +\n 'weekday word words year'\n },\n contains: [\n STRING,\n hljs.C_NUMBER_MODE,\n {\n className: 'built_in',\n begin:\n '\\\\b(clipboard info|the clipboard|info for|list (disks|folder)|' +\n 'mount volume|path to|(close|open for) access|(get|set) eof|' +\n 'current date|do shell script|get volume settings|random number|' +\n 'set volume|system attribute|system info|time to GMT|' +\n '(load|run|store) script|scripting components|' +\n 'ASCII (character|number)|localized string|' +\n 'choose (application|color|file|file name|' +\n 'folder|from list|remote application|URL)|' +\n 'display (alert|dialog))\\\\b|^\\\\s*return\\\\b'\n },\n {\n className: 'literal',\n begin:\n '\\\\b(text item delimiters|current application|missing value)\\\\b'\n },\n {\n className: 'keyword',\n begin:\n '\\\\b(apart from|aside from|instead of|out of|greater than|' +\n \"isn't|(doesn't|does not) (equal|come before|come after|contain)|\" +\n '(greater|less) than( or equal)?|(starts?|ends|begins?) with|' +\n 'contained by|comes (before|after)|a (ref|reference)|POSIX file|' +\n 'POSIX path|(date|time) string|quoted form)\\\\b'\n },\n {\n beginKeywords: 'on',\n illegal: '[${=;\\\\n]',\n contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]\n }\n ].concat(COMMENTS),\n illegal: '//|->|=>|\\\\[\\\\['\n };\n};","module.exports = function(hljs) {\n return {\n aliases: ['adoc'],\n contains: [\n // block comment\n hljs.COMMENT(\n '^/{4,}\\\\n',\n '\\\\n/{4,}$',\n // can also be done as...\n //'^/{4,}$',\n //'^/{4,}$',\n {\n relevance: 10\n }\n ),\n // line comment\n hljs.COMMENT(\n '^//',\n '$',\n {\n relevance: 0\n }\n ),\n // title\n {\n className: 'title',\n begin: '^\\\\.\\\\w.*$'\n },\n // example, admonition & sidebar blocks\n {\n begin: '^[=\\\\*]{4,}\\\\n',\n end: '\\\\n^[=\\\\*]{4,}$',\n relevance: 10\n },\n // headings\n {\n className: 'section',\n relevance: 10,\n variants: [\n {begin: '^(={1,5}) .+?( \\\\1)?$'},\n {begin: '^[^\\\\[\\\\]\\\\n]+?\\\\n[=\\\\-~\\\\^\\\\+]{2,}$'},\n ]\n },\n // document attributes\n {\n className: 'meta',\n begin: '^:.+?:',\n end: '\\\\s',\n excludeEnd: true,\n relevance: 10\n },\n // block attributes\n {\n className: 'meta',\n begin: '^\\\\[.+?\\\\]$',\n relevance: 0\n },\n // quoteblocks\n {\n className: 'quote',\n begin: '^_{4,}\\\\n',\n end: '\\\\n_{4,}$',\n relevance: 10\n },\n // listing and literal blocks\n {\n className: 'code',\n begin: '^[\\\\-\\\\.]{4,}\\\\n',\n end: '\\\\n[\\\\-\\\\.]{4,}$',\n relevance: 10\n },\n // passthrough blocks\n {\n begin: '^\\\\+{4,}\\\\n',\n end: '\\\\n\\\\+{4,}$',\n contains: [\n {\n begin: '<', end: '>',\n subLanguage: 'xml',\n relevance: 0\n }\n ],\n relevance: 10\n },\n // lists (can only capture indicators)\n {\n className: 'bullet',\n begin: '^(\\\\*+|\\\\-+|\\\\.+|[^\\\\n]+?::)\\\\s+'\n },\n // admonition\n {\n className: 'symbol',\n begin: '^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\\\s+',\n relevance: 10\n },\n // inline strong\n {\n className: 'strong',\n // must not follow a word character or be followed by an asterisk or space\n begin: '\\\\B\\\\*(?![\\\\*\\\\s])',\n end: '(\\\\n{2}|\\\\*)',\n // allow escaped asterisk followed by word char\n contains: [\n {\n begin: '\\\\\\\\*\\\\w',\n relevance: 0\n }\n ]\n },\n // inline emphasis\n {\n className: 'emphasis',\n // must not follow a word character or be followed by a single quote or space\n begin: '\\\\B\\'(?![\\'\\\\s])',\n end: '(\\\\n{2}|\\')',\n // allow escaped single quote followed by word char\n contains: [\n {\n begin: '\\\\\\\\\\'\\\\w',\n relevance: 0\n }\n ],\n relevance: 0\n },\n // inline emphasis (alt)\n {\n className: 'emphasis',\n // must not follow a word character or be followed by an underline or space\n begin: '_(?![_\\\\s])',\n end: '(\\\\n{2}|_)',\n relevance: 0\n },\n // inline smart quotes\n {\n className: 'string',\n variants: [\n {begin: \"``.+?''\"},\n {begin: \"`.+?'\"}\n ]\n },\n // inline code snippets (TODO should get same treatment as strong and emphasis)\n {\n className: 'code',\n begin: '(`.+?`|\\\\+.+?\\\\+)',\n relevance: 0\n },\n // indented literal block\n {\n className: 'code',\n begin: '^[ \\\\t]',\n end: '$',\n relevance: 0\n },\n // horizontal rules\n {\n begin: '^\\'{3,}[ \\\\t]*$',\n relevance: 10\n },\n // images and links\n {\n begin: '(link:)?(http|https|ftp|file|irc|image:?):\\\\S+\\\\[.*?\\\\]',\n returnBegin: true,\n contains: [\n {\n begin: '(link|image:?):',\n relevance: 0\n },\n {\n className: 'link',\n begin: '\\\\w',\n end: '[^\\\\[]+',\n relevance: 0\n },\n {\n className: 'string',\n begin: '\\\\[',\n end: '\\\\]',\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0\n }\n ],\n relevance: 10\n }\n ]\n };\n};","module.exports = function(hljs) {\n var VAR = {\n className: 'variable',\n variants: [\n {begin: /\\$[\\w\\d#@][\\w\\d_]*/},\n {begin: /\\$\\{(.*?)}/}\n ]\n };\n var QUOTE_STRING = {\n className: 'string',\n begin: /\"/, end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n VAR,\n {\n className: 'variable',\n begin: /\\$\\(/, end: /\\)/,\n contains: [hljs.BACKSLASH_ESCAPE]\n }\n ]\n };\n var ESCAPED_QUOTE = {\n className: '',\n begin: /\\\\\"/\n\n };\n var APOS_STRING = {\n className: 'string',\n begin: /'/, end: /'/\n };\n\n return {\n aliases: ['sh', 'zsh'],\n lexemes: /\\b-?[a-z\\._]+\\b/,\n keywords: {\n keyword:\n 'if then else elif fi for while in do done case esac function',\n literal:\n 'true false',\n built_in:\n // Shell built-ins\n // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n 'break cd continue eval exec exit export getopts hash pwd readonly return shift test times ' +\n 'trap umask unset ' +\n // Bash built-ins\n 'alias bind builtin caller command declare echo enable help let local logout mapfile printf ' +\n 'read readarray source type typeset ulimit unalias ' +\n // Shell modifiers\n 'set shopt ' +\n // Zsh built-ins\n 'autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles ' +\n 'compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate ' +\n 'fc fg float functions getcap getln history integer jobs kill limit log noglob popd print ' +\n 'pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit ' +\n 'unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof ' +\n 'zpty zregexparse zsocket zstyle ztcp',\n _:\n '-ne -eq -lt -gt -f -d -e -s -l -a' // relevance booster\n },\n contains: [\n {\n className: 'meta',\n begin: /^#![^\\n]+sh\\s*$/,\n relevance: 10\n },\n {\n className: 'function',\n begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n returnBegin: true,\n contains: [hljs.inherit(hljs.TITLE_MODE, {begin: /\\w[\\w\\d_]*/})],\n relevance: 0\n },\n hljs.HASH_COMMENT_MODE,\n QUOTE_STRING,\n ESCAPED_QUOTE,\n APOS_STRING,\n VAR\n ]\n };\n};","module.exports = function(hljs) {\n return {\n case_insensitive: true,\n illegal: '^\\.',\n // Support explicitely typed variables that end with $%! or #.\n lexemes: '[a-zA-Z][a-zA-Z0-9_\\$\\%\\!\\#]*',\n keywords: {\n keyword:\n 'ABS ASC AND ATN AUTO|0 BEEP BLOAD|10 BSAVE|10 CALL CALLS CDBL CHAIN CHDIR CHR$|10 CINT CIRCLE ' +\n 'CLEAR CLOSE CLS COLOR COM COMMON CONT COS CSNG CSRLIN CVD CVI CVS DATA DATE$ ' +\n 'DEFDBL DEFINT DEFSNG DEFSTR DEF|0 SEG USR DELETE DIM DRAW EDIT END ENVIRON ENVIRON$ ' +\n 'EOF EQV ERASE ERDEV ERDEV$ ERL ERR ERROR EXP FIELD FILES FIX FOR|0 FRE GET GOSUB|10 GOTO ' +\n 'HEX$ IF THEN ELSE|0 INKEY$ INP INPUT INPUT# INPUT$ INSTR IMP INT IOCTL IOCTL$ KEY ON ' +\n 'OFF LIST KILL LEFT$ LEN LET LINE LLIST LOAD LOC LOCATE LOF LOG LPRINT USING LSET ' +\n 'MERGE MID$ MKDIR MKD$ MKI$ MKS$ MOD NAME NEW NEXT NOISE NOT OCT$ ON OR PEN PLAY STRIG OPEN OPTION ' +\n 'BASE OUT PAINT PALETTE PCOPY PEEK PMAP POINT POKE POS PRINT PRINT] PSET PRESET ' +\n 'PUT RANDOMIZE READ REM RENUM RESET|0 RESTORE RESUME RETURN|0 RIGHT$ RMDIR RND RSET ' +\n 'RUN SAVE SCREEN SGN SHELL SIN SOUND SPACE$ SPC SQR STEP STICK STOP STR$ STRING$ SWAP ' +\n 'SYSTEM TAB TAN TIME$ TIMER TROFF TRON TO USR VAL VARPTR VARPTR$ VIEW WAIT WHILE ' +\n 'WEND WIDTH WINDOW WRITE XOR'\n },\n contains: [\n hljs.QUOTE_STRING_MODE,\n hljs.COMMENT('REM', '$', {relevance: 10}),\n hljs.COMMENT('\\'', '$', {relevance: 0}),\n {\n // Match line numbers\n className: 'symbol',\n begin: '^[0-9]+\\ ',\n relevance: 10\n },\n {\n // Match typed numeric constants (1000, 12.34!, 1.2e5, 1.5#, 1.2D2)\n className: 'number',\n begin: '\\\\b([0-9]+[0-9edED\\.]*[#\\!]?)',\n relevance: 0\n },\n {\n // Match hexadecimal numbers (&Hxxxx)\n className: 'number',\n begin: '(\\&[hH][0-9a-fA-F]{1,4})'\n },\n {\n // Match octal numbers (&Oxxxxxx)\n className: 'number',\n begin: '(\\&[oO][0-7]{1,6})'\n }\n ]\n };\n};","module.exports = function(hljs) {\n var keywords = {\n 'builtin-name':\n // Clojure keywords\n 'def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem '+\n 'quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? '+\n 'set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? '+\n 'class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? '+\n 'string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . '+\n 'inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last '+\n 'drop-while while intern condp case reduced cycle split-at split-with repeat replicate '+\n 'iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext '+\n 'nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends '+\n 'add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler '+\n 'set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter '+\n 'monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or '+\n 'when when-not when-let comp juxt partial sequence memoize constantly complement identity assert '+\n 'peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast '+\n 'sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import '+\n 'refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! '+\n 'assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger '+\n 'bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline '+\n 'flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking '+\n 'assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! '+\n 'reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! '+\n 'new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty '+\n 'hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list '+\n 'disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer '+\n 'chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate '+\n 'unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta '+\n 'lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize'\n };\n\n var SYMBOLSTART = 'a-zA-Z_\\\\-!.?+*=<>&#\\'';\n var SYMBOL_RE = '[' + SYMBOLSTART + '][' + SYMBOLSTART + '0-9/;:]*';\n var SIMPLE_NUMBER_RE = '[-+]?\\\\d+(\\\\.\\\\d+)?';\n\n var SYMBOL = {\n begin: SYMBOL_RE,\n relevance: 0\n };\n var NUMBER = {\n className: 'number', begin: SIMPLE_NUMBER_RE,\n relevance: 0\n };\n var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null});\n var COMMENT = hljs.COMMENT(\n ';',\n '$',\n {\n relevance: 0\n }\n );\n var LITERAL = {\n className: 'literal',\n begin: /\\b(true|false|nil)\\b/\n };\n var COLLECTION = {\n begin: '[\\\\[\\\\{]', end: '[\\\\]\\\\}]'\n };\n var HINT = {\n className: 'comment',\n begin: '\\\\^' + SYMBOL_RE\n };\n var HINT_COL = hljs.COMMENT('\\\\^\\\\{', '\\\\}');\n var KEY = {\n className: 'symbol',\n begin: '[:]{1,2}' + SYMBOL_RE\n };\n var LIST = {\n begin: '\\\\(', end: '\\\\)'\n };\n var BODY = {\n endsWithParent: true,\n relevance: 0\n };\n var NAME = {\n keywords: keywords,\n lexemes: SYMBOL_RE,\n className: 'name', begin: SYMBOL_RE,\n starts: BODY\n };\n var DEFAULT_CONTAINS = [LIST, STRING, HINT, HINT_COL, COMMENT, KEY, COLLECTION, NUMBER, LITERAL, SYMBOL];\n\n LIST.contains = [hljs.COMMENT('comment', ''), NAME, BODY];\n BODY.contains = DEFAULT_CONTAINS;\n COLLECTION.contains = DEFAULT_CONTAINS;\n HINT_COL.contains = [COLLECTION];\n\n return {\n aliases: ['clj'],\n illegal: /\\S/,\n contains: [LIST, STRING, HINT, HINT_COL, COMMENT, KEY, COLLECTION, NUMBER, LITERAL]\n }\n};","module.exports = function(hljs) {\n return {\n contains: [\n {\n className: 'meta',\n begin: /^([\\w.-]+|\\s*#_)?=>/,\n starts: {\n end: /$/,\n subLanguage: 'clojure'\n }\n }\n ]\n }\n};","module.exports = function(hljs) {\n return {\n aliases: ['cmake.in'],\n case_insensitive: true,\n keywords: {\n keyword:\n // scripting commands\n 'break cmake_host_system_information cmake_minimum_required cmake_parse_arguments ' +\n 'cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro ' +\n 'endwhile execute_process file find_file find_library find_package find_path ' +\n 'find_program foreach function get_cmake_property get_directory_property ' +\n 'get_filename_component get_property if include include_guard list macro ' +\n 'mark_as_advanced math message option return separate_arguments ' +\n 'set_directory_properties set_property set site_name string unset variable_watch while ' +\n // project commands\n 'add_compile_definitions add_compile_options add_custom_command add_custom_target ' +\n 'add_definitions add_dependencies add_executable add_library add_link_options ' +\n 'add_subdirectory add_test aux_source_directory build_command create_test_sourcelist ' +\n 'define_property enable_language enable_testing export fltk_wrap_ui ' +\n 'get_source_file_property get_target_property get_test_property include_directories ' +\n 'include_external_msproject include_regular_expression install link_directories ' +\n 'link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions ' +\n 'set_source_files_properties set_target_properties set_tests_properties source_group ' +\n 'target_compile_definitions target_compile_features target_compile_options ' +\n 'target_include_directories target_link_directories target_link_libraries ' +\n 'target_link_options target_sources try_compile try_run ' +\n // CTest commands\n 'ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ' +\n 'ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ' +\n 'ctest_test ctest_update ctest_upload ' +\n // deprecated commands\n 'build_name exec_program export_library_dependencies install_files install_programs ' +\n 'install_targets load_command make_directory output_required_files remove ' +\n 'subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file ' +\n 'qt5_use_modules qt5_use_package qt5_wrap_cpp ' +\n // core keywords\n 'on off true false and or not command policy target test exists is_newer_than ' +\n 'is_directory is_symlink is_absolute matches less greater equal less_equal ' +\n 'greater_equal strless strgreater strequal strless_equal strgreater_equal version_less ' +\n 'version_greater version_equal version_less_equal version_greater_equal in_list defined'\n },\n contains: [\n {\n className: 'variable',\n begin: '\\\\${', end: '}'\n },\n hljs.HASH_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.NUMBER_MODE\n ]\n };\n};","module.exports = function(hljs) {\n var KEYWORDS = {\n keyword:\n // JS keywords\n 'in if for while finally new do return else break catch instanceof throw try this ' +\n 'switch continue typeof delete debugger super yield import export from as default await ' +\n // Coffee keywords\n 'then unless until loop of by when and or is isnt not',\n literal:\n // JS literals\n 'true false null undefined ' +\n // Coffee literals\n 'yes no on off',\n built_in:\n 'npm require console print module global window document'\n };\n var JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n var SUBST = {\n className: 'subst',\n begin: /#\\{/, end: /}/,\n keywords: KEYWORDS\n };\n var EXPRESSIONS = [\n hljs.BINARY_NUMBER_MODE,\n hljs.inherit(hljs.C_NUMBER_MODE, {starts: {end: '(\\\\s*/)?', relevance: 0}}), // a number tries to eat the following slash to prevent treating it as a regexp\n {\n className: 'string',\n variants: [\n {\n begin: /'''/, end: /'''/,\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n {\n begin: /'/, end: /'/,\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n {\n begin: /\"\"\"/, end: /\"\"\"/,\n contains: [hljs.BACKSLASH_ESCAPE, SUBST]\n },\n {\n begin: /\"/, end: /\"/,\n contains: [hljs.BACKSLASH_ESCAPE, SUBST]\n }\n ]\n },\n {\n className: 'regexp',\n variants: [\n {\n begin: '///', end: '///',\n contains: [SUBST, hljs.HASH_COMMENT_MODE]\n },\n {\n begin: '//[gim]*',\n relevance: 0\n },\n {\n // regex can't start with space to parse x / 2 / 3 as two divisions\n // regex can't start with *, and it supports an \"illegal\" in the main mode\n begin: /\\/(?![ *])(\\\\\\/|.)*?\\/[gim]*(?=\\W)/\n }\n ]\n },\n {\n begin: '@' + JS_IDENT_RE // relevance booster\n },\n {\n subLanguage: 'javascript',\n excludeBegin: true, excludeEnd: true,\n variants: [\n {\n begin: '```', end: '```',\n },\n {\n begin: '`', end: '`',\n }\n ]\n }\n ];\n SUBST.contains = EXPRESSIONS;\n\n var TITLE = hljs.inherit(hljs.TITLE_MODE, {begin: JS_IDENT_RE});\n var PARAMS_RE = '(\\\\(.*\\\\))?\\\\s*\\\\B[-=]>';\n var PARAMS = {\n className: 'params',\n begin: '\\\\([^\\\\(]', returnBegin: true,\n /* We need another contained nameless mode to not have every nested\n pair of parens to be called \"params\" */\n contains: [{\n begin: /\\(/, end: /\\)/,\n keywords: KEYWORDS,\n contains: ['self'].concat(EXPRESSIONS)\n }]\n };\n\n return {\n aliases: ['coffee', 'cson', 'iced'],\n keywords: KEYWORDS,\n illegal: /\\/\\*/,\n contains: EXPRESSIONS.concat([\n hljs.COMMENT('###', '###'),\n hljs.HASH_COMMENT_MODE,\n {\n className: 'function',\n begin: '^\\\\s*' + JS_IDENT_RE + '\\\\s*=\\\\s*' + PARAMS_RE, end: '[-=]>',\n returnBegin: true,\n contains: [TITLE, PARAMS]\n },\n {\n // anonymous function start\n begin: /[:\\(,=]\\s*/,\n relevance: 0,\n contains: [\n {\n className: 'function',\n begin: PARAMS_RE, end: '[-=]>',\n returnBegin: true,\n contains: [PARAMS]\n }\n ]\n },\n {\n className: 'class',\n beginKeywords: 'class',\n end: '$',\n illegal: /[:=\"\\[\\]]/,\n contains: [\n {\n beginKeywords: 'extends',\n endsWithParent: true,\n illegal: /[:=\"\\[\\]]/,\n contains: [TITLE]\n },\n TITLE\n ]\n },\n {\n begin: JS_IDENT_RE + ':', end: ':',\n returnBegin: true, returnEnd: true,\n relevance: 0\n }\n ])\n };\n};","module.exports = function(hljs) {\n var CPP_PRIMITIVE_TYPES = {\n className: 'keyword',\n begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n };\n\n // https://en.cppreference.com/w/cpp/language/escape\n // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n var CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)'\n var STRINGS = {\n className: 'string',\n variants: [\n {\n begin: '(u8?|U|L)?\"', end: '\"',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n {\n begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + \"|.)\", end: '\\'',\n illegal: '.'\n },\n { begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\((?:.|\\n)*?\\)\\1\"/ }\n ]\n };\n\n var NUMBERS = {\n className: 'number',\n variants: [\n { begin: '\\\\b(0b[01\\']+)' },\n { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\n { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n ],\n relevance: 0\n };\n\n var PREPROCESSOR = {\n className: 'meta',\n begin: /#\\s*[a-z]+\\b/, end: /$/,\n keywords: {\n 'meta-keyword':\n 'if else elif endif define undef warning error line ' +\n 'pragma _Pragma ifdef ifndef include'\n },\n contains: [\n {\n begin: /\\\\\\n/, relevance: 0\n },\n hljs.inherit(STRINGS, {className: 'meta-string'}),\n {\n className: 'meta-string',\n begin: /<.*?>/, end: /$/,\n illegal: '\\\\n',\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n };\n\n var FUNCTION_TITLE = hljs.IDENT_RE + '\\\\s*\\\\(';\n\n var CPP_KEYWORDS = {\n keyword: 'int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof ' +\n 'dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace ' +\n 'unsigned long volatile static protected bool template mutable if public friend ' +\n 'do goto auto void enum else break extern using asm case typeid wchar_t' +\n 'short reinterpret_cast|10 default double register explicit signed typename try this ' +\n 'switch continue inline delete alignas alignof constexpr consteval constinit decltype ' +\n 'concept co_await co_return co_yield requires ' +\n 'noexcept static_assert thread_local restrict final override ' +\n 'atomic_bool atomic_char atomic_schar ' +\n 'atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong ' +\n 'atomic_ullong new throw return ' +\n 'and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq',\n built_in: 'std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream ' +\n 'auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set ' +\n 'unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos ' +\n 'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp ' +\n 'fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper ' +\n 'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow ' +\n 'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp ' +\n 'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan ' +\n 'vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary',\n literal: 'true false nullptr NULL'\n };\n\n var EXPRESSION_CONTAINS = [\n CPP_PRIMITIVE_TYPES,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n NUMBERS,\n STRINGS\n ];\n\n return {\n aliases: ['c', 'cc', 'h', 'c++', 'h++', 'hpp', 'hh', 'hxx', 'cxx'],\n keywords: CPP_KEYWORDS,\n illegal: '</',\n contains: EXPRESSION_CONTAINS.concat([\n PREPROCESSOR,\n {\n begin: '\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\s*<', end: '>',\n keywords: CPP_KEYWORDS,\n contains: ['self', CPP_PRIMITIVE_TYPES]\n },\n {\n begin: hljs.IDENT_RE + '::',\n keywords: CPP_KEYWORDS\n },\n {\n // This mode covers expression context where we can't expect a function\n // definition and shouldn't highlight anything that looks like one:\n // `return some()`, `else if()`, `(x*sum(1, 2))`\n variants: [\n {begin: /=/, end: /;/},\n {begin: /\\(/, end: /\\)/},\n {beginKeywords: 'new throw return else', end: /;/}\n ],\n keywords: CPP_KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat([\n {\n begin: /\\(/, end: /\\)/,\n keywords: CPP_KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat(['self']),\n relevance: 0\n }\n ]),\n relevance: 0\n },\n {\n className: 'function',\n begin: '(' + hljs.IDENT_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n returnBegin: true, end: /[{;=]/,\n excludeEnd: true,\n keywords: CPP_KEYWORDS,\n illegal: /[^\\w\\s\\*&]/,\n contains: [\n {\n begin: FUNCTION_TITLE, returnBegin: true,\n contains: [hljs.TITLE_MODE],\n relevance: 0\n },\n {\n className: 'params',\n begin: /\\(/, end: /\\)/,\n keywords: CPP_KEYWORDS,\n relevance: 0,\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRINGS,\n NUMBERS,\n CPP_PRIMITIVE_TYPES,\n // Count matching parentheses.\n {\n begin: /\\(/, end: /\\)/,\n keywords: CPP_KEYWORDS,\n relevance: 0,\n contains: [\n 'self',\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRINGS,\n NUMBERS,\n CPP_PRIMITIVE_TYPES\n ]\n }\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n PREPROCESSOR\n ]\n },\n {\n className: 'class',\n beginKeywords: 'class struct', end: /[{;:]/,\n contains: [\n {begin: /</, end: />/, contains: ['self']}, // skip generic stuff\n hljs.TITLE_MODE\n ]\n }\n ]),\n exports: {\n preprocessor: PREPROCESSOR,\n strings: STRINGS,\n keywords: CPP_KEYWORDS\n }\n };\n};","module.exports = function(hljs) {\n var INT_SUFFIX = '(_*[ui](8|16|32|64|128))?';\n var FLOAT_SUFFIX = '(_*f(32|64))?';\n var CRYSTAL_IDENT_RE = '[a-zA-Z_]\\\\w*[!?=]?';\n var CRYSTAL_METHOD_RE = '[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\\\*\\\\*|\\\\[\\\\][=?]?';\n var CRYSTAL_PATH_RE = '[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?';\n var CRYSTAL_KEYWORDS = {\n keyword:\n 'abstract alias annotation as as? asm begin break case class def do else elsif end ensure enum extend for fun if ' +\n 'include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? ' +\n 'return require select self sizeof struct super then type typeof union uninitialized unless until verbatim when while with yield ' +\n '__DIR__ __END_LINE__ __FILE__ __LINE__',\n literal: 'false nil true'\n };\n var SUBST = {\n className: 'subst',\n begin: '#{', end: '}',\n keywords: CRYSTAL_KEYWORDS\n };\n var EXPANSION = {\n className: 'template-variable',\n variants: [\n {begin: '\\\\{\\\\{', end: '\\\\}\\\\}'},\n {begin: '\\\\{%', end: '%\\\\}'}\n ],\n keywords: CRYSTAL_KEYWORDS\n };\n\n function recursiveParen(begin, end) {\n var\n contains = [{begin: begin, end: end}];\n contains[0].contains = contains;\n return contains;\n }\n var STRING = {\n className: 'string',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST],\n variants: [\n {begin: /'/, end: /'/},\n {begin: /\"/, end: /\"/},\n {begin: /`/, end: /`/},\n {begin: '%[Qwi]?\\\\(', end: '\\\\)', contains: recursiveParen('\\\\(', '\\\\)')},\n {begin: '%[Qwi]?\\\\[', end: '\\\\]', contains: recursiveParen('\\\\[', '\\\\]')},\n {begin: '%[Qwi]?{', end: '}', contains: recursiveParen('{', '}')},\n {begin: '%[Qwi]?<', end: '>', contains: recursiveParen('<', '>')},\n {begin: '%[Qwi]?\\\\|', end: '\\\\|'},\n {begin: /<<-\\w+$/, end: /^\\s*\\w+$/},\n ],\n relevance: 0,\n };\n var Q_STRING = {\n className: 'string',\n variants: [\n {begin: '%q\\\\(', end: '\\\\)', contains: recursiveParen('\\\\(', '\\\\)')},\n {begin: '%q\\\\[', end: '\\\\]', contains: recursiveParen('\\\\[', '\\\\]')},\n {begin: '%q{', end: '}', contains: recursiveParen('{', '}')},\n {begin: '%q<', end: '>', contains: recursiveParen('<', '>')},\n {begin: '%q\\\\|', end: '\\\\|'},\n {begin: /<<-'\\w+'$/, end: /^\\s*\\w+$/},\n ],\n relevance: 0,\n };\n var REGEXP = {\n begin: '(?!%})(' + hljs.RE_STARTERS_RE + '|\\\\n|\\\\b(case|if|select|unless|until|when|while)\\\\b)\\\\s*',\n keywords: 'case if select unless until when while',\n contains: [\n {\n className: 'regexp',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST],\n variants: [\n {begin: '//[a-z]*', relevance: 0},\n {begin: '/(?!\\\\/)', end: '/[a-z]*'},\n ]\n }\n ],\n relevance: 0\n };\n var REGEXP2 = {\n className: 'regexp',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST],\n variants: [\n {begin: '%r\\\\(', end: '\\\\)', contains: recursiveParen('\\\\(', '\\\\)')},\n {begin: '%r\\\\[', end: '\\\\]', contains: recursiveParen('\\\\[', '\\\\]')},\n {begin: '%r{', end: '}', contains: recursiveParen('{', '}')},\n {begin: '%r<', end: '>', contains: recursiveParen('<', '>')},\n {begin: '%r\\\\|', end: '\\\\|'},\n ],\n relevance: 0\n };\n var ATTRIBUTE = {\n className: 'meta',\n begin: '@\\\\[', end: '\\\\]',\n contains: [\n hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'meta-string'})\n ]\n };\n var CRYSTAL_DEFAULT_CONTAINS = [\n EXPANSION,\n STRING,\n Q_STRING,\n REGEXP2,\n REGEXP,\n ATTRIBUTE,\n hljs.HASH_COMMENT_MODE,\n {\n className: 'class',\n beginKeywords: 'class module struct', end: '$|;',\n illegal: /=/,\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.inherit(hljs.TITLE_MODE, {begin: CRYSTAL_PATH_RE}),\n {begin: '<'} // relevance booster for inheritance\n ]\n },\n {\n className: 'class',\n beginKeywords: 'lib enum union', end: '$|;',\n illegal: /=/,\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.inherit(hljs.TITLE_MODE, {begin: CRYSTAL_PATH_RE}),\n ],\n relevance: 10\n },\n {\n beginKeywords: 'annotation', end: '$|;',\n illegal: /=/,\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.inherit(hljs.TITLE_MODE, {begin: CRYSTAL_PATH_RE}),\n ],\n relevance: 10\n },\n {\n className: 'function',\n beginKeywords: 'def', end: /\\B\\b/,\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {\n begin: CRYSTAL_METHOD_RE,\n endsParent: true\n })\n ]\n },\n {\n className: 'function',\n beginKeywords: 'fun macro', end: /\\B\\b/,\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {\n begin: CRYSTAL_METHOD_RE,\n endsParent: true\n })\n ],\n relevance: 5\n },\n {\n className: 'symbol',\n begin: hljs.UNDERSCORE_IDENT_RE + '(\\\\!|\\\\?)?:',\n relevance: 0\n },\n {\n className: 'symbol',\n begin: ':',\n contains: [STRING, {begin: CRYSTAL_METHOD_RE}],\n relevance: 0\n },\n {\n className: 'number',\n variants: [\n { begin: '\\\\b0b([01_]+)' + INT_SUFFIX },\n { begin: '\\\\b0o([0-7_]+)' + INT_SUFFIX },\n { begin: '\\\\b0x([A-Fa-f0-9_]+)' + INT_SUFFIX },\n { begin: '\\\\b([1-9][0-9_]*[0-9]|[0-9])(\\\\.[0-9][0-9_]*)?([eE]_*[-+]?[0-9_]*)?' + FLOAT_SUFFIX + '(?!_)' },\n { begin: '\\\\b([1-9][0-9_]*|0)' + INT_SUFFIX }\n ],\n relevance: 0\n }\n ];\n SUBST.contains = CRYSTAL_DEFAULT_CONTAINS;\n EXPANSION.contains = CRYSTAL_DEFAULT_CONTAINS.slice(1); // without EXPANSION\n\n return {\n aliases: ['cr'],\n lexemes: CRYSTAL_IDENT_RE,\n keywords: CRYSTAL_KEYWORDS,\n contains: CRYSTAL_DEFAULT_CONTAINS\n };\n};","module.exports = function(hljs) {\n var FUNCTION_LIKE = {\n begin: /[\\w-]+\\(/, returnBegin: true,\n contains: [\n {\n className: 'built_in',\n begin: /[\\w-]+/\n },\n {\n begin: /\\(/, end: /\\)/,\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.CSS_NUMBER_MODE,\n ]\n }\n ]\n }\n var ATTRIBUTE = {\n className: 'attribute',\n begin: /\\S/, end: ':', excludeEnd: true,\n starts: {\n endsWithParent: true, excludeEnd: true,\n contains: [\n FUNCTION_LIKE,\n hljs.CSS_NUMBER_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'number', begin: '#[0-9A-Fa-f]+'\n },\n {\n className: 'meta', begin: '!important'\n }\n ]\n }\n }\n var AT_IDENTIFIER = '@[a-z-]+' // @font-face\n var AT_MODIFIERS = \"and or not only\"\n var MEDIA_TYPES = \"all print screen speech\"\n var AT_PROPERTY_RE = /@\\-?\\w[\\w]*(\\-\\w+)*/ // @-webkit-keyframes\n var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n var RULE = {\n begin: /(?:[A-Z\\_\\.\\-]+|--[a-zA-Z0-9_-]+)\\s*:/, returnBegin: true, end: ';', endsWithParent: true,\n contains: [\n ATTRIBUTE\n ]\n };\n\n return {\n case_insensitive: true,\n illegal: /[=\\/|'\\$]/,\n contains: [\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'selector-id', begin: /#[A-Za-z0-9_-]+/\n },\n {\n className: 'selector-class', begin: /\\.[A-Za-z0-9_-]+/\n },\n {\n className: 'selector-attr',\n begin: /\\[/, end: /\\]/,\n illegal: '$',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n ]\n },\n {\n className: 'selector-pseudo',\n begin: /:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/\n },\n // matching these here allows us to treat them more like regular CSS\n // rules so everything between the {} gets regular rule highlighting,\n // which is what we want for page and font-face\n {\n begin: '@(page|font-face)',\n lexemes: AT_IDENTIFIER,\n keywords: '@page @font-face'\n },\n {\n begin: '@', end: '[{;]', // at_rule eating first \"{\" is a good thing\n // because it doesn’t let it to be parsed as\n // a rule set but instead drops parser into\n // the default mode which is how it should be.\n illegal: /:/, // break on Less variables @var: ...\n returnBegin: true,\n contains: [\n {\n className: 'keyword',\n begin: AT_PROPERTY_RE\n },\n {\n begin: /\\s/, endsWithParent: true, excludeEnd: true,\n relevance: 0,\n keywords: AT_MODIFIERS,\n contains: [\n {\n begin: /[a-z-]+:/,\n className:\"attribute\"\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.CSS_NUMBER_MODE\n ]\n }\n ]\n },\n {\n className: 'selector-tag', begin: IDENT_RE,\n relevance: 0\n },\n {\n begin: '{', end: '}',\n illegal: /\\S/,\n contains: [\n hljs.C_BLOCK_COMMENT_MODE,\n RULE,\n ]\n }\n ]\n };\n};","module.exports = function(hljs) {\n var SUBST = {\n className: 'subst',\n variants: [{\n begin: '\\\\$[A-Za-z0-9_]+'\n }],\n };\n\n var BRACED_SUBST = {\n className: 'subst',\n variants: [{\n begin: '\\\\${',\n end: '}'\n }, ],\n keywords: 'true false null this is new super',\n };\n\n var STRING = {\n className: 'string',\n variants: [{\n begin: 'r\\'\\'\\'',\n end: '\\'\\'\\''\n },\n {\n begin: 'r\"\"\"',\n end: '\"\"\"'\n },\n {\n begin: 'r\\'',\n end: '\\'',\n illegal: '\\\\n'\n },\n {\n begin: 'r\"',\n end: '\"',\n illegal: '\\\\n'\n },\n {\n begin: '\\'\\'\\'',\n end: '\\'\\'\\'',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]\n },\n {\n begin: '\"\"\"',\n end: '\"\"\"',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]\n },\n {\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]\n },\n {\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]\n }\n ]\n };\n BRACED_SUBST.contains = [\n hljs.C_NUMBER_MODE, STRING\n ];\n\n var KEYWORDS = {\n keyword: 'abstract as assert async await break case catch class const continue covariant default deferred do ' +\n 'dynamic else enum export extends extension external factory false final finally for Function get hide if ' +\n 'implements import in inferface is library mixin new null on operator part rethrow return set show static ' +\n 'super switch sync this throw true try typedef var void while with yield',\n built_in:\n // dart:core\n 'Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set ' +\n 'Stopwatch String StringBuffer StringSink Symbol Type Uri bool double dynamic int num print ' +\n // dart:html\n 'Element ElementList document querySelector querySelectorAll window'\n };\n\n return {\n keywords: KEYWORDS,\n contains: [\n STRING,\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/', {\n subLanguage: 'markdown'\n }\n ),\n hljs.COMMENT(\n '///+\\\\s*',\n '$', {\n contains: [{\n subLanguage: 'markdown',\n begin: '.',\n end: '$',\n }]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'class',\n beginKeywords: 'class interface',\n end: '{',\n excludeEnd: true,\n contains: [{\n beginKeywords: 'extends implements'\n },\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n hljs.C_NUMBER_MODE,\n {\n className: 'meta',\n begin: '@[A-Za-z]+'\n },\n {\n begin: '=>' // No markup, just a relevance booster\n }\n ]\n }\n};","module.exports = function(hljs) {\n return {\n aliases: ['patch'],\n contains: [\n {\n className: 'meta',\n relevance: 10,\n variants: [\n {begin: /^@@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +@@$/},\n {begin: /^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/},\n {begin: /^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$/}\n ]\n },\n {\n className: 'comment',\n variants: [\n {begin: /Index: /, end: /$/},\n {begin: /={3,}/, end: /$/},\n {begin: /^\\-{3}/, end: /$/},\n {begin: /^\\*{3} /, end: /$/},\n {begin: /^\\+{3}/, end: /$/},\n {begin: /^\\*{15}$/ }\n ]\n },\n {\n className: 'addition',\n begin: '^\\\\+', end: '$'\n },\n {\n className: 'deletion',\n begin: '^\\\\-', end: '$'\n },\n {\n className: 'addition',\n begin: '^\\\\!', end: '$'\n }\n ]\n };\n};","module.exports = function(hljs) {\n var FILTER = {\n begin: /\\|[A-Za-z]+:?/,\n keywords: {\n name:\n 'truncatewords removetags linebreaksbr yesno get_digit timesince random striptags ' +\n 'filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands ' +\n 'title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode ' +\n 'timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort ' +\n 'dictsortreversed default_if_none pluralize lower join center default ' +\n 'truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first ' +\n 'escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize ' +\n 'localtime utc timezone'\n },\n contains: [\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE\n ]\n };\n\n return {\n aliases: ['jinja'],\n case_insensitive: true,\n subLanguage: 'xml',\n contains: [\n hljs.COMMENT(/\\{%\\s*comment\\s*%}/, /\\{%\\s*endcomment\\s*%}/),\n hljs.COMMENT(/\\{#/, /#}/),\n {\n className: 'template-tag',\n begin: /\\{%/, end: /%}/,\n contains: [\n {\n className: 'name',\n begin: /\\w+/,\n keywords: {\n name:\n 'comment endcomment load templatetag ifchanged endifchanged if endif firstof for ' +\n 'endfor ifnotequal endifnotequal widthratio extends include spaceless ' +\n 'endspaceless regroup ifequal endifequal ssi now with cycle url filter ' +\n 'endfilter debug block endblock else autoescape endautoescape csrf_token empty elif ' +\n 'endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix ' +\n 'plural get_current_language language get_available_languages ' +\n 'get_current_language_bidi get_language_info get_language_info_list localize ' +\n 'endlocalize localtime endlocaltime timezone endtimezone get_current_timezone ' +\n 'verbatim'\n },\n starts: {\n endsWithParent: true,\n keywords: 'in by as',\n contains: [FILTER],\n relevance: 0\n }\n }\n ]\n },\n {\n className: 'template-variable',\n begin: /\\{\\{/, end: /}}/,\n contains: [FILTER]\n }\n ]\n };\n};","module.exports = function(hljs) {\n return {\n aliases: ['bind', 'zone'],\n keywords: {\n keyword:\n 'IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX ' +\n 'LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT'\n },\n contains: [\n hljs.COMMENT(';', '$', {relevance: 0}),\n {\n className: 'meta',\n begin: /^\\$(TTL|GENERATE|INCLUDE|ORIGIN)\\b/\n },\n // IPv6\n {\n className: 'number',\n begin: '((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:)))\\\\b'\n },\n // IPv4\n {\n className: 'number',\n begin: '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\\\b'\n },\n hljs.inherit(hljs.NUMBER_MODE, {begin: /\\b\\d+[dhwm]?/})\n ]\n };\n};","module.exports = function(hljs) {\n return {\n aliases: ['docker'],\n case_insensitive: true,\n keywords: 'from maintainer expose env arg user onbuild stopsignal',\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.NUMBER_MODE,\n {\n beginKeywords: 'run cmd entrypoint volume add copy workdir label healthcheck shell',\n starts: {\n end: /[^\\\\]$/,\n subLanguage: 'bash'\n }\n }\n ],\n illegal: '</'\n }\n};","module.exports = function(hljs) {\n var COMMENT = hljs.COMMENT(\n /^\\s*@?rem\\b/, /$/,\n {\n relevance: 10\n }\n );\n var LABEL = {\n className: 'symbol',\n begin: '^\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\s+label)',\n relevance: 0\n };\n return {\n aliases: ['bat', 'cmd'],\n case_insensitive: true,\n illegal: /\\/\\*/,\n keywords: {\n keyword:\n 'if else goto for in do call exit not exist errorlevel defined ' +\n 'equ neq lss leq gtr geq',\n built_in:\n 'prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux ' +\n 'shift cd dir echo setlocal endlocal set pause copy ' +\n 'append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color ' +\n 'comp compact convert date dir diskcomp diskcopy doskey erase fs ' +\n 'find findstr format ftype graftabl help keyb label md mkdir mode more move path ' +\n 'pause print popd pushd promt rd recover rem rename replace restore rmdir shift' +\n 'sort start subst time title tree type ver verify vol ' +\n // winutils\n 'ping net ipconfig taskkill xcopy ren del'\n },\n contains: [\n {\n className: 'variable', begin: /%%[^ ]|%[^ ]+?%|![^ ]+?!/\n },\n {\n className: 'function',\n begin: LABEL.begin, end: 'goto:eof',\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {begin: '([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*'}),\n COMMENT\n ]\n },\n {\n className: 'number', begin: '\\\\b\\\\d+',\n relevance: 0\n },\n COMMENT\n ]\n };\n};","module.exports = function(hljs) {\n var QUOTED_PROPERTY = {\n className: 'string',\n begin: /\"/, end: /\"/\n };\n var APOS_PROPERTY = {\n className: 'string',\n begin: /'/, end: /'/\n };\n var UNQUOTED_PROPERTY = {\n className: 'string',\n begin: '[\\\\w-?]+:\\\\w+', end: '\\\\W',\n relevance: 0\n };\n var VALUELESS_PROPERTY = {\n className: 'string',\n begin: '\\\\w+-?\\\\w+', end: '\\\\W',\n relevance: 0\n };\n\n return {\n keywords: 'dsconfig',\n contains: [\n {\n className: 'keyword',\n begin: '^dsconfig', end: '\\\\s', excludeEnd: true,\n relevance: 10\n },\n {\n className: 'built_in',\n begin: '(list|create|get|set|delete)-(\\\\w+)', end: '\\\\s', excludeEnd: true,\n illegal: '!@#$%^&*()',\n relevance: 10\n },\n {\n className: 'built_in',\n begin: '--(\\\\w+)', end: '\\\\s', excludeEnd: true\n },\n QUOTED_PROPERTY,\n APOS_PROPERTY,\n UNQUOTED_PROPERTY,\n VALUELESS_PROPERTY,\n hljs.HASH_COMMENT_MODE\n ]\n };\n};","module.exports = function(hljs) {\n var ELIXIR_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_.]*(\\\\!|\\\\?)?';\n var ELIXIR_METHOD_RE = '[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?';\n var ELIXIR_KEYWORDS =\n 'and false then defined module in return redo retry end for true self when ' +\n 'next until do begin unless nil break not case cond alias while ensure or ' +\n 'include use alias fn quote require import with|0';\n var SUBST = {\n className: 'subst',\n begin: '#\\\\{', end: '}',\n lexemes: ELIXIR_IDENT_RE,\n keywords: ELIXIR_KEYWORDS\n };\n\n var SIGIL_DELIMITERS = '[/|([{<\"\\']'\n var LOWERCASE_SIGIL = {\n className: 'string',\n begin: '~[a-z]' + '(?=' + SIGIL_DELIMITERS + ')',\n contains: [\n {\n endsParent:true,\n contains: [{\n contains: [hljs.BACKSLASH_ESCAPE, SUBST],\n variants: [\n { begin: /\"/, end: /\"/ },\n { begin: /'/, end: /'/ },\n { begin: /\\//, end: /\\// },\n { begin: /\\|/, end: /\\|/ },\n { begin: /\\(/, end: /\\)/ },\n { begin: /\\[/, end: /\\]/ },\n { begin: /\\{/, end: /\\}/ },\n { begin: /</, end: />/ }\n ]\n }]\n },\n ],\n };\n\n var UPCASE_SIGIL = {\n className: 'string',\n begin: '~[A-Z]' + '(?=' + SIGIL_DELIMITERS + ')',\n contains: [\n { begin: /\"/, end: /\"/ },\n { begin: /'/, end: /'/ },\n { begin: /\\//, end: /\\// },\n { begin: /\\|/, end: /\\|/ },\n { begin: /\\(/, end: /\\)/ },\n { begin: /\\[/, end: /\\]/ },\n { begin: /\\{/, end: /\\}/ },\n { begin: /\\</, end: /\\>/ }\n ]\n };\n\n var STRING = {\n className: 'string',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST],\n variants: [\n {\n begin: /\"\"\"/, end: /\"\"\"/,\n },\n {\n begin: /'''/, end: /'''/,\n },\n {\n begin: /~S\"\"\"/, end: /\"\"\"/,\n contains: []\n },\n {\n begin: /~S\"/, end: /\"/,\n contains: []\n },\n {\n begin: /~S'''/, end: /'''/,\n contains: []\n },\n {\n begin: /~S'/, end: /'/,\n contains: []\n },\n {\n begin: /'/, end: /'/\n },\n {\n begin: /\"/, end: /\"/\n },\n ]\n };\n var FUNCTION = {\n className: 'function',\n beginKeywords: 'def defp defmacro', end: /\\B\\b/, // the mode is ended by the title\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {\n begin: ELIXIR_IDENT_RE,\n endsParent: true\n })\n ]\n };\n var CLASS = hljs.inherit(FUNCTION, {\n className: 'class',\n beginKeywords: 'defimpl defmodule defprotocol defrecord', end: /\\bdo\\b|$|;/\n });\n var ELIXIR_DEFAULT_CONTAINS = [\n STRING,\n UPCASE_SIGIL,\n LOWERCASE_SIGIL,\n hljs.HASH_COMMENT_MODE,\n CLASS,\n FUNCTION,\n {\n begin: '::'\n },\n {\n className: 'symbol',\n begin: ':(?![\\\\s:])',\n contains: [STRING, {begin: ELIXIR_METHOD_RE}],\n relevance: 0\n },\n {\n className: 'symbol',\n begin: ELIXIR_IDENT_RE + ':(?!:)',\n relevance: 0\n },\n {\n className: 'number',\n begin: '(\\\\b0o[0-7_]+)|(\\\\b0b[01_]+)|(\\\\b0x[0-9a-fA-F_]+)|(-?\\\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)',\n relevance: 0\n },\n {\n className: 'variable',\n begin: '(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))'\n },\n {\n begin: '->'\n },\n { // regexp container\n begin: '(' + hljs.RE_STARTERS_RE + ')\\\\s*',\n contains: [\n hljs.HASH_COMMENT_MODE,\n {\n className: 'regexp',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST],\n variants: [\n {\n begin: '/', end: '/[a-z]*'\n },\n {\n begin: '%r\\\\[', end: '\\\\][a-z]*'\n }\n ]\n }\n ],\n relevance: 0\n }\n ];\n SUBST.contains = ELIXIR_DEFAULT_CONTAINS;\n\n return {\n lexemes: ELIXIR_IDENT_RE,\n keywords: ELIXIR_KEYWORDS,\n contains: ELIXIR_DEFAULT_CONTAINS\n };\n};","module.exports = function(hljs) {\n var COMMENT = {\n variants: [\n hljs.COMMENT('--', '$'),\n hljs.COMMENT(\n '{-',\n '-}',\n {\n contains: ['self']\n }\n )\n ]\n };\n\n var CONSTRUCTOR = {\n className: 'type',\n begin: '\\\\b[A-Z][\\\\w\\']*', // TODO: other constructors (built-in, infix).\n relevance: 0\n };\n\n var LIST = {\n begin: '\\\\(', end: '\\\\)',\n illegal: '\"',\n contains: [\n {className: 'type', begin: '\\\\b[A-Z][\\\\w]*(\\\\((\\\\.\\\\.|,|\\\\w+)\\\\))?'},\n COMMENT\n ]\n };\n\n var RECORD = {\n begin: '{', end: '}',\n contains: LIST.contains\n };\n\n var CHARACTER = {\n className: 'string',\n begin: '\\'\\\\\\\\?.', end: '\\'',\n illegal: '.'\n };\n\n return {\n keywords:\n 'let in if then else case of where module import exposing ' +\n 'type alias as infix infixl infixr port effect command subscription',\n contains: [\n\n // Top-level constructions.\n\n {\n beginKeywords: 'port effect module', end: 'exposing',\n keywords: 'port effect module where command subscription exposing',\n contains: [LIST, COMMENT],\n illegal: '\\\\W\\\\.|;'\n },\n {\n begin: 'import', end: '$',\n keywords: 'import as exposing',\n contains: [LIST, COMMENT],\n illegal: '\\\\W\\\\.|;'\n },\n {\n begin: 'type', end: '$',\n keywords: 'type alias',\n contains: [CONSTRUCTOR, LIST, RECORD, COMMENT]\n },\n {\n beginKeywords: 'infix infixl infixr', end: '$',\n contains: [hljs.C_NUMBER_MODE, COMMENT]\n },\n {\n begin: 'port', end: '$',\n keywords: 'port',\n contains: [COMMENT]\n },\n\n // Literals and names.\n\n CHARACTER,\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE,\n CONSTRUCTOR,\n hljs.inherit(hljs.TITLE_MODE, {begin: '^[_a-z][\\\\w\\']*'}),\n COMMENT,\n\n {begin: '->|<-'} // No markup, relevance booster\n ],\n illegal: /;/\n };\n};","module.exports = function(hljs) {\n return {\n subLanguage: 'xml',\n contains: [\n hljs.COMMENT('<%#', '%>'),\n {\n begin: '<%[%=-]?', end: '[%-]?%>',\n subLanguage: 'ruby',\n excludeBegin: true,\n excludeEnd: true\n }\n ]\n };\n};","module.exports = function(hljs) {\n return {\n keywords: {\n built_in:\n 'spawn spawn_link self',\n keyword:\n 'after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if ' +\n 'let not of or orelse|10 query receive rem try when xor'\n },\n contains: [\n {\n className: 'meta', begin: '^[0-9]+> ',\n relevance: 10\n },\n hljs.COMMENT('%', '$'),\n {\n className: 'number',\n begin: '\\\\b(\\\\d+#[a-fA-F0-9]+|\\\\d+(\\\\.\\\\d+)?([eE][-+]?\\\\d+)?)',\n relevance: 0\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n begin: '\\\\?(::)?([A-Z]\\\\w*(::)?)+'\n },\n {\n begin: '->'\n },\n {\n begin: 'ok'\n },\n {\n begin: '!'\n },\n {\n begin: '(\\\\b[a-z\\'][a-zA-Z0-9_\\']*:[a-z\\'][a-zA-Z0-9_\\']*)|(\\\\b[a-z\\'][a-zA-Z0-9_\\']*)',\n relevance: 0\n },\n {\n begin: '[A-Z][a-zA-Z0-9_\\']*',\n relevance: 0\n }\n ]\n };\n};","module.exports = function(hljs) {\n var BASIC_ATOM_RE = '[a-z\\'][a-zA-Z0-9_\\']*';\n var FUNCTION_NAME_RE = '(' + BASIC_ATOM_RE + ':' + BASIC_ATOM_RE + '|' + BASIC_ATOM_RE + ')';\n var ERLANG_RESERVED = {\n keyword:\n 'after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if ' +\n 'let not of orelse|10 query receive rem try when xor',\n literal:\n 'false true'\n };\n\n var COMMENT = hljs.COMMENT('%', '$');\n var NUMBER = {\n className: 'number',\n begin: '\\\\b(\\\\d+#[a-fA-F0-9]+|\\\\d+(\\\\.\\\\d+)?([eE][-+]?\\\\d+)?)',\n relevance: 0\n };\n var NAMED_FUN = {\n begin: 'fun\\\\s+' + BASIC_ATOM_RE + '/\\\\d+'\n };\n var FUNCTION_CALL = {\n begin: FUNCTION_NAME_RE + '\\\\(', end: '\\\\)',\n returnBegin: true,\n relevance: 0,\n contains: [\n {\n begin: FUNCTION_NAME_RE, relevance: 0\n },\n {\n begin: '\\\\(', end: '\\\\)', endsWithParent: true,\n returnEnd: true,\n relevance: 0\n // \"contains\" defined later\n }\n ]\n };\n var TUPLE = {\n begin: '{', end: '}',\n relevance: 0\n // \"contains\" defined later\n };\n var VAR1 = {\n begin: '\\\\b_([A-Z][A-Za-z0-9_]*)?',\n relevance: 0\n };\n var VAR2 = {\n begin: '[A-Z][a-zA-Z0-9_]*',\n relevance: 0\n };\n var RECORD_ACCESS = {\n begin: '#' + hljs.UNDERSCORE_IDENT_RE,\n relevance: 0,\n returnBegin: true,\n contains: [\n {\n begin: '#' + hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n begin: '{', end: '}',\n relevance: 0\n // \"contains\" defined later\n }\n ]\n };\n\n var BLOCK_STATEMENTS = {\n beginKeywords: 'fun receive if try case', end: 'end',\n keywords: ERLANG_RESERVED\n };\n BLOCK_STATEMENTS.contains = [\n COMMENT,\n NAMED_FUN,\n hljs.inherit(hljs.APOS_STRING_MODE, {className: ''}),\n BLOCK_STATEMENTS,\n FUNCTION_CALL,\n hljs.QUOTE_STRING_MODE,\n NUMBER,\n TUPLE,\n VAR1, VAR2,\n RECORD_ACCESS\n ];\n\n var BASIC_MODES = [\n COMMENT,\n NAMED_FUN,\n BLOCK_STATEMENTS,\n FUNCTION_CALL,\n hljs.QUOTE_STRING_MODE,\n NUMBER,\n TUPLE,\n VAR1, VAR2,\n RECORD_ACCESS\n ];\n FUNCTION_CALL.contains[1].contains = BASIC_MODES;\n TUPLE.contains = BASIC_MODES;\n RECORD_ACCESS.contains[1].contains = BASIC_MODES;\n\n var PARAMS = {\n className: 'params',\n begin: '\\\\(', end: '\\\\)',\n contains: BASIC_MODES\n };\n return {\n aliases: ['erl'],\n keywords: ERLANG_RESERVED,\n illegal: '(</|\\\\*=|\\\\+=|-=|/\\\\*|\\\\*/|\\\\(\\\\*|\\\\*\\\\))',\n contains: [\n {\n className: 'function',\n begin: '^' + BASIC_ATOM_RE + '\\\\s*\\\\(', end: '->',\n returnBegin: true,\n illegal: '\\\\(|#|//|/\\\\*|\\\\\\\\|:|;',\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, {begin: BASIC_ATOM_RE})\n ],\n starts: {\n end: ';|\\\\.',\n keywords: ERLANG_RESERVED,\n contains: BASIC_MODES\n }\n },\n COMMENT,\n {\n begin: '^-', end: '\\\\.',\n relevance: 0,\n excludeEnd: true,\n returnBegin: true,\n lexemes: '-' + hljs.IDENT_RE,\n keywords:\n '-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn ' +\n '-import -include -include_lib -compile -define -else -endif -file -behaviour ' +\n '-behavior -spec',\n contains: [PARAMS]\n },\n NUMBER,\n hljs.QUOTE_STRING_MODE,\n RECORD_ACCESS,\n VAR1, VAR2,\n TUPLE,\n {begin: /\\.$/} // relevance booster\n ]\n };\n};","module.exports = function(hljs) {\n return {\n aliases: ['xlsx', 'xls'],\n case_insensitive: true,\n lexemes: /[a-zA-Z][\\w\\.]*/,\n // built-in functions imported from https://web.archive.org/web/20160513042710/https://support.office.com/en-us/article/Excel-functions-alphabetical-b3944572-255d-4efb-bb96-c6d90033e188\n keywords: {\n built_in: 'ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH AGGREGATE ADDRESS AMORDEGRC AMORLINC AND ARABIC AREAS ASC ASIN ASINH ATAN ATAN2 ATANH AVEDEV AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS BAHTTEXT BASE BESSELI BESSELJ BESSELK BESSELY BETADIST BETA.DIST BETAINV BETA.INV BIN2DEC BIN2HEX BIN2OCT BINOMDIST BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CALL CEILING CEILING.MATH CEILING.PRECISE CELL CHAR CHIDIST CHIINV CHITEST CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSE CLEAN CODE COLUMN COLUMNS COMBIN COMBINA COMPLEX CONCAT CONCATENATE CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T CONVERT CORREL COS COSH COT COTH COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD COVAR COVARIANCE.P COVARIANCE.S CRITBINOM CSC CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY CUBERANKEDMEMBER CUBESET CUBESETCOUNT CUBEVALUE CUMIPMT CUMPRINC DATE DATEDIF DATEVALUE DAVERAGE DAY DAYS DAYS360 DB DBCS DCOUNT DCOUNTA DDB DEC2BIN DEC2HEX DEC2OCT DECIMAL DEGREES DELTA DEVSQ DGET DISC DMAX DMIN DOLLAR DOLLARDE DOLLARFR DPRODUCT DSTDEV DSTDEVP DSUM DURATION DVAR DVARP EDATE EFFECT ENCODEURL EOMONTH ERF ERF.PRECISE ERFC ERFC.PRECISE ERROR.TYPE EUROCONVERT EVEN EXACT EXP EXPON.DIST EXPONDIST FACT FACTDOUBLE FALSE|0 F.DIST FDIST F.DIST.RT FILTERXML FIND FINDB F.INV F.INV.RT FINV FISHER FISHERINV FIXED FLOOR FLOOR.MATH FLOOR.PRECISE FORECAST FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT FREQUENCY F.TEST FTEST FV FVSCHEDULE GAMMA GAMMA.DIST GAMMADIST GAMMA.INV GAMMAINV GAMMALN GAMMALN.PRECISE GAUSS GCD GEOMEAN GESTEP GETPIVOTDATA GROWTH HARMEAN HEX2BIN HEX2DEC HEX2OCT HLOOKUP HOUR HYPERLINK HYPGEOM.DIST HYPGEOMDIST IF IFERROR IFNA IFS IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMCOSH IMCOT IMCSC IMCSCH IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMPOWER IMPRODUCT IMREAL IMSEC IMSECH IMSIN IMSINH IMSQRT IMSUB IMSUM IMTAN INDEX INDIRECT INFO INT INTERCEPT INTRATE IPMT IRR ISBLANK ISERR ISERROR ISEVEN ISFORMULA ISLOGICAL ISNA ISNONTEXT ISNUMBER ISODD ISREF ISTEXT ISO.CEILING ISOWEEKNUM ISPMT JIS KURT LARGE LCM LEFT LEFTB LEN LENB LINEST LN LOG LOG10 LOGEST LOGINV LOGNORM.DIST LOGNORMDIST LOGNORM.INV LOOKUP LOWER MATCH MAX MAXA MAXIFS MDETERM MDURATION MEDIAN MID MIDBs MIN MINIFS MINA MINUTE MINVERSE MIRR MMULT MOD MODE MODE.MULT MODE.SNGL MONTH MROUND MULTINOMIAL MUNIT N NA NEGBINOM.DIST NEGBINOMDIST NETWORKDAYS NETWORKDAYS.INTL NOMINAL NORM.DIST NORMDIST NORMINV NORM.INV NORM.S.DIST NORMSDIST NORM.S.INV NORMSINV NOT NOW NPER NPV NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX ODD ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD OFFSET OR PDURATION PEARSON PERCENTILE.EXC PERCENTILE.INC PERCENTILE PERCENTRANK.EXC PERCENTRANK.INC PERCENTRANK PERMUT PERMUTATIONA PHI PHONETIC PI PMT POISSON.DIST POISSON POWER PPMT PRICE PRICEDISC PRICEMAT PROB PRODUCT PROPER PV QUARTILE QUARTILE.EXC QUARTILE.INC QUOTIENT RADIANS RAND RANDBETWEEN RANK.AVG RANK.EQ RANK RATE RECEIVED REGISTER.ID REPLACE REPLACEB REPT RIGHT RIGHTB ROMAN ROUND ROUNDDOWN ROUNDUP ROW ROWS RRI RSQ RTD SEARCH SEARCHB SEC SECH SECOND SERIESSUM SHEET SHEETS SIGN SIN SINH SKEW SKEW.P SLN SLOPE SMALL SQL.REQUEST SQRT SQRTPI STANDARDIZE STDEV STDEV.P STDEV.S STDEVA STDEVP STDEVPA STEYX SUBSTITUTE SUBTOTAL SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SWITCH SYD T TAN TANH TBILLEQ TBILLPRICE TBILLYIELD T.DIST T.DIST.2T T.DIST.RT TDIST TEXT TEXTJOIN TIME TIMEVALUE T.INV T.INV.2T TINV TODAY TRANSPOSE TREND TRIM TRIMMEAN TRUE|0 TRUNC T.TEST TTEST TYPE UNICHAR UNICODE UPPER VALUE VAR VAR.P VAR.S VARA VARP VARPA VDB VLOOKUP WEBSERVICE WEEKDAY WEEKNUM WEIBULL WEIBULL.DIST WORKDAY WORKDAY.INTL XIRR XNPV XOR YEAR YEARFRAC YIELD YIELDDISC YIELDMAT Z.TEST ZTEST'\n },\n contains: [\n {\n /* matches a beginning equal sign found in Excel formula examples */\n begin: /^=/,\n end: /[^=]/, returnEnd: true, illegal: /=/, /* only allow single equal sign at front of line */\n relevance: 10\n },\n /* technically, there can be more than 2 letters in column names, but this prevents conflict with some keywords */\n {\n /* matches a reference to a single cell */\n className: 'symbol',\n begin: /\\b[A-Z]{1,2}\\d+\\b/,\n end: /[^\\d]/, excludeEnd: true,\n relevance: 0\n },\n {\n /* matches a reference to a range of cells */\n className: 'symbol',\n begin: /[A-Z]{0,2}\\d*:[A-Z]{0,2}\\d*/,\n relevance: 0\n },\n hljs.BACKSLASH_ESCAPE,\n hljs.QUOTE_STRING_MODE,\n {\n className: 'number',\n begin: hljs.NUMBER_RE + '(%)?',\n relevance: 0\n },\n /* Excel formula comments are done by putting the comment in a function call to N() */\n hljs.COMMENT(/\\bN\\(/,/\\)/,\n {\n excludeBegin: true,\n excludeEnd: true,\n illegal: /\\n/\n })\n ]\n };\n};","module.exports = function(hljs) {\n var PARAMS = {\n className: 'params',\n begin: '\\\\(', end: '\\\\)'\n };\n\n var F_KEYWORDS = {\n literal: '.False. .True.',\n keyword: 'kind do while private call intrinsic where elsewhere ' +\n 'type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then ' +\n 'public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. ' +\n 'goto save else use module select case ' +\n 'access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit ' +\n 'continue format pause cycle exit ' +\n 'c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg ' +\n 'synchronous nopass non_overridable pass protected volatile abstract extends import ' +\n 'non_intrinsic value deferred generic final enumerator class associate bind enum ' +\n 'c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t ' +\n 'c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double ' +\n 'c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr ' +\n 'c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer ' +\n 'c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor ' +\n 'numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ' +\n 'ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive ' +\n 'pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure ' +\n 'integer real character complex logical dimension allocatable|10 parameter ' +\n 'external implicit|10 none double precision assign intent optional pointer ' +\n 'target in out common equivalence data',\n built_in: 'alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint ' +\n 'dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl ' +\n 'algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama ' +\n 'iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod ' +\n 'qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log ' +\n 'log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate ' +\n 'adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product ' +\n 'eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul ' +\n 'maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product ' +\n 'radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind ' +\n 'set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer ' +\n 'dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ' +\n 'ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode ' +\n 'is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of' +\n 'acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 ' +\n 'atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits ' +\n 'bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr ' +\n 'num_images parity popcnt poppar shifta shiftl shiftr this_image'\n };\n return {\n case_insensitive: true,\n aliases: ['f90', 'f95'],\n keywords: F_KEYWORDS,\n illegal: /\\/\\*/,\n contains: [\n hljs.inherit(hljs.APOS_STRING_MODE, {className: 'string', relevance: 0}),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'string', relevance: 0}),\n {\n className: 'function',\n beginKeywords: 'subroutine function program',\n illegal: '[${=\\\\n]',\n contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]\n },\n hljs.COMMENT('!', '$', {relevance: 0}),\n {\n className: 'number',\n begin: '(?=\\\\b|\\\\+|\\\\-|\\\\.)(?=\\\\.\\\\d|\\\\d)(?:\\\\d+)?(?:\\\\.?\\\\d*)(?:[de][+-]?\\\\d+)?\\\\b\\\\.?',\n relevance: 0\n }\n ]\n };\n};","module.exports = function(hljs) {\n var TYPEPARAM = {\n begin: '<', end: '>',\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {begin: /'[a-zA-Z0-9_]+/})\n ]\n };\n\n return {\n aliases: ['fs'],\n keywords:\n 'abstract and as assert base begin class default delegate do done ' +\n 'downcast downto elif else end exception extern false finally for ' +\n 'fun function global if in inherit inline interface internal lazy let ' +\n 'match member module mutable namespace new null of open or ' +\n 'override private public rec return sig static struct then to ' +\n 'true try type upcast use val void when while with yield',\n illegal: /\\/\\*/,\n contains: [\n {\n // monad builder keywords (matches before non-bang kws)\n className: 'keyword',\n begin: /\\b(yield|return|let|do)!/\n },\n {\n className: 'string',\n begin: '@\"', end: '\"',\n contains: [{begin: '\"\"'}]\n },\n {\n className: 'string',\n begin: '\"\"\"', end: '\"\"\"'\n },\n hljs.COMMENT('\\\\(\\\\*', '\\\\*\\\\)'),\n {\n className: 'class',\n beginKeywords: 'type', end: '\\\\(|=|$', excludeEnd: true,\n contains: [\n hljs.UNDERSCORE_TITLE_MODE,\n TYPEPARAM\n ]\n },\n {\n className: 'meta',\n begin: '\\\\[<', end: '>\\\\]',\n relevance: 10\n },\n {\n className: 'symbol',\n begin: '\\\\B(\\'[A-Za-z])\\\\b',\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),\n hljs.C_NUMBER_MODE\n ]\n };\n};","module.exports = function (hljs) {\n return {\n aliases: ['feature'],\n keywords: 'Feature Background Ability Business\\ Need Scenario Scenarios Scenario\\ Outline Scenario\\ Template Examples Given And Then But When',\n contains: [\n {\n className: 'symbol',\n begin: '\\\\*',\n relevance: 0\n },\n {\n className: 'meta',\n begin: '@[^@\\\\s]+'\n },\n {\n begin: '\\\\|', end: '\\\\|\\\\w*$',\n contains: [\n {\n className: 'string',\n begin: '[^|]+'\n }\n ]\n },\n {\n className: 'variable',\n begin: '<', end: '>'\n },\n hljs.HASH_COMMENT_MODE,\n {\n className: 'string',\n begin: '\"\"\"', end: '\"\"\"'\n },\n hljs.QUOTE_STRING_MODE\n ]\n };\n};","module.exports = function(hljs) {\n var GO_KEYWORDS = {\n keyword:\n 'break default func interface select case map struct chan else goto package switch ' +\n 'const fallthrough if range type continue for import return var go defer ' +\n 'bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 ' +\n 'uint16 uint32 uint64 int uint uintptr rune',\n literal:\n 'true false iota nil',\n built_in:\n 'append cap close complex copy imag len make new panic print println real recover delete'\n };\n return {\n aliases: ['golang'],\n keywords: GO_KEYWORDS,\n illegal: '</',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'string',\n variants: [\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n {begin: '`', end: '`'},\n ]\n },\n {\n className: 'number',\n variants: [\n {begin: hljs.C_NUMBER_RE + '[i]', relevance: 1},\n hljs.C_NUMBER_MODE\n ]\n },\n {\n begin: /:=/ // relevance booster\n },\n {\n className: 'function',\n beginKeywords: 'func', end: '\\\\s*(\\\\{|$)', excludeEnd: true,\n contains: [\n hljs.TITLE_MODE,\n {\n className: 'params',\n begin: /\\(/, end: /\\)/,\n keywords: GO_KEYWORDS,\n illegal: /[\"']/\n }\n ]\n }\n ]\n };\n};","module.exports = function(hljs) {\n return {\n case_insensitive: true,\n keywords: {\n keyword:\n 'task project allprojects subprojects artifacts buildscript configurations ' +\n 'dependencies repositories sourceSets description delete from into include ' +\n 'exclude source classpath destinationDir includes options sourceCompatibility ' +\n 'targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant ' +\n 'def abstract break case catch continue default do else extends final finally ' +\n 'for if implements instanceof native new private protected public return static ' +\n 'switch synchronized throw throws transient try volatile while strictfp package ' +\n 'import false null super this true antlrtask checkstyle codenarc copy boolean ' +\n 'byte char class double float int interface long short void compile runTime ' +\n 'file fileTree abs any append asList asWritable call collect compareTo count ' +\n 'div dump each eachByte eachFile eachLine every find findAll flatten getAt ' +\n 'getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods ' +\n 'isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter ' +\n 'newReader newWriter next plus pop power previous print println push putAt read ' +\n 'readBytes readLines reverse reverseEach round size sort splitEachLine step subMap ' +\n 'times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader ' +\n 'withStream withWriter withWriterAppend write writeLine'\n },\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.NUMBER_MODE,\n hljs.REGEXP_MODE\n\n ]\n }\n};","module.exports = function(hljs) {\n return {\n keywords: {\n literal : 'true false null',\n keyword:\n 'byte short char int long boolean float double void ' +\n // groovy specific keywords\n 'def as in assert trait ' +\n // common keywords with Java\n 'super this abstract static volatile transient public private protected synchronized final ' +\n 'class interface enum if else for while switch case break default continue ' +\n 'throw throws try catch finally implements extends new import package return instanceof'\n },\n\n contains: [\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance : 0,\n contains : [\n {\n // eat up @'s in emails to prevent them to be recognized as doctags\n begin: /\\w+@/, relevance: 0\n },\n {\n className : 'doctag',\n begin : '@[A-Za-z]+'\n }\n ]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'string',\n begin: '\"\"\"', end: '\"\"\"'\n },\n {\n className: 'string',\n begin: \"'''\", end: \"'''\"\n },\n {\n className: 'string',\n begin: \"\\\\$/\", end: \"/\\\\$\",\n relevance: 10\n },\n hljs.APOS_STRING_MODE,\n {\n className: 'regexp',\n begin: /~?\\/[^\\/\\n]+\\//,\n contains: [\n hljs.BACKSLASH_ESCAPE\n ]\n },\n hljs.QUOTE_STRING_MODE,\n {\n className: 'meta',\n begin: \"^#!/usr/bin/env\", end: '$',\n illegal: '\\n'\n },\n hljs.BINARY_NUMBER_MODE,\n {\n className: 'class',\n beginKeywords: 'class interface trait enum', end: '{',\n illegal: ':',\n contains: [\n {beginKeywords: 'extends implements'},\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n hljs.C_NUMBER_MODE,\n {\n className: 'meta', begin: '@[A-Za-z]+'\n },\n {\n // highlight map keys and named parameters as strings\n className: 'string', begin: /[^\\?]{0}[A-Za-z0-9_$]+ *:/\n },\n {\n // catch middle element of the ternary operator\n // to avoid highlight it as a label, named parameter, or map key\n begin: /\\?/, end: /\\:/\n },\n {\n // highlight labeled statements\n className: 'symbol', begin: '^\\\\s*[A-Za-z0-9_$]+:',\n relevance: 0\n }\n ],\n illegal: /#|<\\//\n }\n};","module.exports = // TODO support filter tags like :javascript, support inline HTML\nfunction(hljs) {\n return {\n case_insensitive: true,\n contains: [\n {\n className: 'meta',\n begin: '^!!!( (5|1\\\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\\\b.*))?$',\n relevance: 10\n },\n // FIXME these comments should be allowed to span indented lines\n hljs.COMMENT(\n '^\\\\s*(!=#|=#|-#|/).*$',\n false,\n {\n relevance: 0\n }\n ),\n {\n begin: '^\\\\s*(-|=|!=)(?!#)',\n starts: {\n end: '\\\\n',\n subLanguage: 'ruby'\n }\n },\n {\n className: 'tag',\n begin: '^\\\\s*%',\n contains: [\n {\n className: 'selector-tag',\n begin: '\\\\w+'\n },\n {\n className: 'selector-id',\n begin: '#[\\\\w-]+'\n },\n {\n className: 'selector-class',\n begin: '\\\\.[\\\\w-]+'\n },\n {\n begin: '{\\\\s*',\n end: '\\\\s*}',\n contains: [\n {\n begin: ':\\\\w+\\\\s*=>',\n end: ',\\\\s+',\n returnBegin: true,\n endsWithParent: true,\n contains: [\n {\n className: 'attr',\n begin: ':\\\\w+'\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n begin: '\\\\w+',\n relevance: 0\n }\n ]\n }\n ]\n },\n {\n begin: '\\\\(\\\\s*',\n end: '\\\\s*\\\\)',\n excludeEnd: true,\n contains: [\n {\n begin: '\\\\w+\\\\s*=',\n end: '\\\\s+',\n returnBegin: true,\n endsWithParent: true,\n contains: [\n {\n className: 'attr',\n begin: '\\\\w+',\n relevance: 0\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n begin: '\\\\w+',\n relevance: 0\n }\n ]\n }\n ]\n }\n ]\n },\n {\n begin: '^\\\\s*[=~]\\\\s*'\n },\n {\n begin: '#{',\n starts: {\n end: '}',\n subLanguage: 'ruby'\n }\n }\n ]\n };\n};","module.exports = function (hljs) {\n var BUILT_INS = {'builtin-name': 'each in with if else unless bindattr action collection debugger log outlet template unbound view yield lookup'};\n\n var IDENTIFIER_PLAIN_OR_QUOTED = {\n begin: /\".*?\"|'.*?'|\\[.*?\\]|\\w+/\n };\n\n var EXPRESSION_OR_HELPER_CALL = hljs.inherit(IDENTIFIER_PLAIN_OR_QUOTED, {\n keywords: BUILT_INS,\n starts: {\n // helper params\n endsWithParent: true,\n relevance: 0,\n contains: [hljs.inherit(IDENTIFIER_PLAIN_OR_QUOTED, {relevance: 0})]\n }\n });\n\n var BLOCK_MUSTACHE_CONTENTS = hljs.inherit(EXPRESSION_OR_HELPER_CALL, {\n className: 'name'\n });\n\n var BASIC_MUSTACHE_CONTENTS = hljs.inherit(EXPRESSION_OR_HELPER_CALL, {\n // relevance 0 for backward compatibility concerning auto-detection\n relevance: 0\n });\n\n var ESCAPE_MUSTACHE_WITH_PRECEEDING_BACKSLASH = {begin: /\\\\\\{\\{/, skip: true};\n var PREVENT_ESCAPE_WITH_ANOTHER_PRECEEDING_BACKSLASH = {begin: /\\\\\\\\(?=\\{\\{)/, skip: true};\n\n return {\n aliases: ['hbs', 'html.hbs', 'html.handlebars'],\n case_insensitive: true,\n subLanguage: 'xml',\n contains: [\n ESCAPE_MUSTACHE_WITH_PRECEEDING_BACKSLASH,\n PREVENT_ESCAPE_WITH_ANOTHER_PRECEEDING_BACKSLASH,\n hljs.COMMENT(/\\{\\{!--/, /--\\}\\}/),\n hljs.COMMENT(/\\{\\{!/, /\\}\\}/),\n {\n // open raw block \"{{{{raw}}}} content not evaluated {{{{/raw}}}}\"\n className: 'template-tag',\n begin: /\\{\\{\\{\\{(?!\\/)/, end: /\\}\\}\\}\\}/,\n contains: [BLOCK_MUSTACHE_CONTENTS],\n starts: {end: /\\{\\{\\{\\{\\//, returnEnd: true, subLanguage: 'xml'}\n },\n {\n // close raw block\n className: 'template-tag',\n begin: /\\{\\{\\{\\{\\//, end: /\\}\\}\\}\\}/,\n contains: [BLOCK_MUSTACHE_CONTENTS]\n },\n {\n // open block statement\n className: 'template-tag',\n begin: /\\{\\{[#\\/]/, end: /\\}\\}/,\n contains: [BLOCK_MUSTACHE_CONTENTS],\n },\n {\n // template variable or helper-call that is NOT html-escaped\n className: 'template-variable',\n begin: /\\{\\{\\{/, end: /\\}\\}\\}/,\n keywords: BUILT_INS,\n contains: [BASIC_MUSTACHE_CONTENTS]\n },\n {\n // template variable or helper-call that is html-escaped\n className: 'template-variable',\n begin: /\\{\\{/, end: /\\}\\}/,\n keywords: BUILT_INS,\n contains: [BASIC_MUSTACHE_CONTENTS]\n }\n ]\n };\n};","module.exports = function(hljs) {\n var COMMENT = {\n variants: [\n hljs.COMMENT('--', '$'),\n hljs.COMMENT(\n '{-',\n '-}',\n {\n contains: ['self']\n }\n )\n ]\n };\n\n var PRAGMA = {\n className: 'meta',\n begin: '{-#', end: '#-}'\n };\n\n var PREPROCESSOR = {\n className: 'meta',\n begin: '^#', end: '$'\n };\n\n var CONSTRUCTOR = {\n className: 'type',\n begin: '\\\\b[A-Z][\\\\w\\']*', // TODO: other constructors (build-in, infix).\n relevance: 0\n };\n\n var LIST = {\n begin: '\\\\(', end: '\\\\)',\n illegal: '\"',\n contains: [\n PRAGMA,\n PREPROCESSOR,\n {className: 'type', begin: '\\\\b[A-Z][\\\\w]*(\\\\((\\\\.\\\\.|,|\\\\w+)\\\\))?'},\n hljs.inherit(hljs.TITLE_MODE, {begin: '[_a-z][\\\\w\\']*'}),\n COMMENT\n ]\n };\n\n var RECORD = {\n begin: '{', end: '}',\n contains: LIST.contains\n };\n\n return {\n aliases: ['hs'],\n keywords:\n 'let in if then else case of where do module import hiding ' +\n 'qualified type data newtype deriving class instance as default ' +\n 'infix infixl infixr foreign export ccall stdcall cplusplus ' +\n 'jvm dotnet safe unsafe family forall mdo proc rec',\n contains: [\n\n // Top-level constructions.\n\n {\n beginKeywords: 'module', end: 'where',\n keywords: 'module where',\n contains: [LIST, COMMENT],\n illegal: '\\\\W\\\\.|;'\n },\n {\n begin: '\\\\bimport\\\\b', end: '$',\n keywords: 'import qualified as hiding',\n contains: [LIST, COMMENT],\n illegal: '\\\\W\\\\.|;'\n },\n\n {\n className: 'class',\n begin: '^(\\\\s*)?(class|instance)\\\\b', end: 'where',\n keywords: 'class family instance where',\n contains: [CONSTRUCTOR, LIST, COMMENT]\n },\n {\n className: 'class',\n begin: '\\\\b(data|(new)?type)\\\\b', end: '$',\n keywords: 'data family type newtype deriving',\n contains: [PRAGMA, CONSTRUCTOR, LIST, RECORD, COMMENT]\n },\n {\n beginKeywords: 'default', end: '$',\n contains: [CONSTRUCTOR, LIST, COMMENT]\n },\n {\n beginKeywords: 'infix infixl infixr', end: '$',\n contains: [hljs.C_NUMBER_MODE, COMMENT]\n },\n {\n begin: '\\\\bforeign\\\\b', end: '$',\n keywords: 'foreign import export ccall stdcall cplusplus jvm ' +\n 'dotnet safe unsafe',\n contains: [CONSTRUCTOR, hljs.QUOTE_STRING_MODE, COMMENT]\n },\n {\n className: 'meta',\n begin: '#!\\\\/usr\\\\/bin\\\\/env\\ runhaskell', end: '$'\n },\n\n // \"Whitespaces\".\n\n PRAGMA,\n PREPROCESSOR,\n\n // Literals and names.\n\n // TODO: characters.\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE,\n CONSTRUCTOR,\n hljs.inherit(hljs.TITLE_MODE, {begin: '^[_a-z][\\\\w\\']*'}),\n\n COMMENT,\n\n {begin: '->|<-'} // No markup, relevance booster\n ]\n };\n};","module.exports = function(hljs) {\n var BUILT_INS = 'action collection component concat debugger each each-in else get hash if input link-to loc log mut outlet partial query-params render textarea unbound unless with yield view';\n\n var ATTR_ASSIGNMENT = {\n illegal: /\\}\\}/,\n begin: /[a-zA-Z0-9_]+=/,\n returnBegin: true,\n relevance: 0,\n contains: [\n {\n className: 'attr', begin: /[a-zA-Z0-9_]+/\n }\n ]\n };\n\n var SUB_EXPR = {\n illegal: /\\}\\}/,\n begin: /\\)/, end: /\\)/,\n contains: [\n {\n begin: /[a-zA-Z\\.\\-]+/,\n keywords: {built_in: BUILT_INS},\n starts: {\n endsWithParent: true, relevance: 0,\n contains: [\n hljs.QUOTE_STRING_MODE,\n ]\n }\n }\n ]\n };\n\n var TAG_INNARDS = {\n endsWithParent: true, relevance: 0,\n keywords: {keyword: 'as', built_in: BUILT_INS},\n contains: [\n hljs.QUOTE_STRING_MODE,\n ATTR_ASSIGNMENT,\n hljs.NUMBER_MODE\n ]\n };\n\n return {\n case_insensitive: true,\n subLanguage: 'xml',\n contains: [\n hljs.COMMENT('{{!(--)?', '(--)?}}'),\n {\n className: 'template-tag',\n begin: /\\{\\{[#\\/]/, end: /\\}\\}/,\n contains: [\n {\n className: 'name',\n begin: /[a-zA-Z\\.\\-]+/,\n keywords: {'builtin-name': BUILT_INS},\n starts: TAG_INNARDS\n }\n ]\n },\n {\n className: 'template-variable',\n begin: /\\{\\{[a-zA-Z][a-zA-Z\\-]+/, end: /\\}\\}/,\n keywords: {keyword: 'as', built_in: BUILT_INS},\n contains: [\n hljs.QUOTE_STRING_MODE\n ]\n }\n ]\n };\n};","module.exports = function(hljs) {\n var VERSION = 'HTTP/[0-9\\\\.]+';\n return {\n aliases: ['https'],\n illegal: '\\\\S',\n contains: [\n {\n begin: '^' + VERSION, end: '$',\n contains: [{className: 'number', begin: '\\\\b\\\\d{3}\\\\b'}]\n },\n {\n begin: '^[A-Z]+ (.*?) ' + VERSION + '$', returnBegin: true, end: '$',\n contains: [\n {\n className: 'string',\n begin: ' ', end: ' ',\n excludeBegin: true, excludeEnd: true\n },\n {\n begin: VERSION\n },\n {\n className: 'keyword',\n begin: '[A-Z]+'\n }\n ]\n },\n {\n className: 'attribute',\n begin: '^\\\\w', end: ': ', excludeEnd: true,\n illegal: '\\\\n|\\\\s|=',\n starts: {end: '$', relevance: 0}\n },\n {\n begin: '\\\\n\\\\n',\n starts: {subLanguage: [], endsWithParent: true}\n }\n ]\n };\n};","module.exports = function(hljs) {\n var STRING = {\n className: \"string\",\n contains: [hljs.BACKSLASH_ESCAPE],\n variants: [\n {\n begin: \"'''\", end: \"'''\",\n relevance: 10\n }, {\n begin: '\"\"\"', end: '\"\"\"',\n relevance: 10\n }, {\n begin: '\"', end: '\"'\n }, {\n begin: \"'\", end: \"'\"\n }\n ]\n };\n return {\n aliases: ['toml'],\n case_insensitive: true,\n illegal: /\\S/,\n contains: [\n hljs.COMMENT(';', '$'),\n hljs.HASH_COMMENT_MODE,\n {\n className: 'section',\n begin: /^\\s*\\[+/, end: /\\]+/\n },\n {\n begin: /^[a-z0-9\\[\\]_\\.-]+\\s*=\\s*/, end: '$',\n returnBegin: true,\n contains: [\n {\n className: 'attr',\n begin: /[a-z0-9\\[\\]_\\.-]+/\n },\n {\n begin: /=/, endsWithParent: true,\n relevance: 0,\n contains: [\n hljs.COMMENT(';', '$'),\n hljs.HASH_COMMENT_MODE,\n {\n className: 'literal',\n begin: /\\bon|off|true|false|yes|no\\b/\n },\n {\n className: 'variable',\n variants: [\n {begin: /\\$[\\w\\d\"][\\w\\d_]*/},\n {begin: /\\$\\{(.*?)}/}\n ]\n },\n STRING,\n {\n className: 'number',\n begin: /([\\+\\-]+)?[\\d]+_[\\d_]+/\n },\n hljs.NUMBER_MODE\n ]\n }\n ]\n }\n ]\n };\n};","module.exports = function(hljs) {\n var JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n var GENERIC_IDENT_RE = JAVA_IDENT_RE + '(<' + JAVA_IDENT_RE + '(\\\\s*,\\\\s*' + JAVA_IDENT_RE + ')*>)?';\n var KEYWORDS =\n 'false synchronized int abstract float private char boolean var static null if const ' +\n 'for true while long strictfp finally protected import native final void ' +\n 'enum else break transient catch instanceof byte super volatile case assert short ' +\n 'package default double public try this switch continue throws protected public private ' +\n 'module requires exports do';\n\n // https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html\n var JAVA_NUMBER_RE = '\\\\b' +\n '(' +\n '0[bB]([01]+[01_]+[01]+|[01]+)' + // 0b...\n '|' +\n '0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)' + // 0x...\n '|' +\n '(' +\n '([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?' +\n '|' +\n '\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)' +\n ')' +\n '([eE][-+]?\\\\d+)?' + // octal, decimal, float\n ')' +\n '[lLfF]?';\n var JAVA_NUMBER_MODE = {\n className: 'number',\n begin: JAVA_NUMBER_RE,\n relevance: 0\n };\n\n return {\n aliases: ['jsp'],\n keywords: KEYWORDS,\n illegal: /<\\/|#/,\n contains: [\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance : 0,\n contains : [\n {\n // eat up @'s in emails to prevent them to be recognized as doctags\n begin: /\\w+@/, relevance: 0\n },\n {\n className : 'doctag',\n begin : '@[A-Za-z]+'\n }\n ]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n className: 'class',\n beginKeywords: 'class interface', end: /[{;=]/, excludeEnd: true,\n keywords: 'class interface',\n illegal: /[:\"\\[\\]]/,\n contains: [\n {beginKeywords: 'extends implements'},\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n {\n // Expression keywords prevent 'keyword Name(...)' from being\n // recognized as a function definition\n beginKeywords: 'new throw return else',\n relevance: 0\n },\n {\n className: 'function',\n begin: '(' + GENERIC_IDENT_RE + '\\\\s+)+' + hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(', returnBegin: true, end: /[{;=]/,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(', returnBegin: true,\n relevance: 0,\n contains: [hljs.UNDERSCORE_TITLE_MODE]\n },\n {\n className: 'params',\n begin: /\\(/, end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n JAVA_NUMBER_MODE,\n {\n className: 'meta', begin: '@[A-Za-z]+'\n }\n ]\n };\n};","module.exports = function(hljs) {\n var IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n var KEYWORDS = {\n keyword:\n 'in of if for while finally var new function do return void else break catch ' +\n 'instanceof with throw case default try this switch continue typeof delete ' +\n 'let yield const export super debugger as async await static ' +\n // ECMAScript 6 modules import\n 'import from as'\n ,\n literal:\n 'true false null undefined NaN Infinity',\n built_in:\n 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n 'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n 'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' +\n 'Promise'\n };\n var NUMBER = {\n className: 'number',\n variants: [\n { begin: '\\\\b(0[bB][01]+)n?' },\n { begin: '\\\\b(0[oO][0-7]+)n?' },\n { begin: hljs.C_NUMBER_RE + 'n?' }\n ],\n relevance: 0\n };\n var SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{', end: '\\\\}',\n keywords: KEYWORDS,\n contains: [] // defined later\n };\n var HTML_TEMPLATE = {\n begin: 'html`', end: '',\n starts: {\n end: '`', returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml',\n }\n };\n var CSS_TEMPLATE = {\n begin: 'css`', end: '',\n starts: {\n end: '`', returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css',\n }\n };\n var TEMPLATE_STRING = {\n className: 'string',\n begin: '`', end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n SUBST.contains = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n TEMPLATE_STRING,\n NUMBER,\n hljs.REGEXP_MODE\n ];\n var PARAMS_CONTAINS = SUBST.contains.concat([\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]);\n\n return {\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS,\n contains: [\n {\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n },\n {\n className: 'meta',\n begin: /^#!/, end: /$/\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n TEMPLATE_STRING,\n hljs.C_LINE_COMMENT_MODE,\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance : 0,\n contains : [\n {\n className : 'doctag',\n begin : '@[A-Za-z]+',\n contains : [\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n },\n ]\n }\n ]\n }\n ),\n hljs.C_BLOCK_COMMENT_MODE,\n NUMBER,\n { // object attr container\n begin: /[{,\\n]\\s*/, relevance: 0,\n contains: [\n {\n begin: IDENT_RE + '\\\\s*:', returnBegin: true,\n relevance: 0,\n contains: [{className: 'attr', begin: IDENT_RE, relevance: 0}]\n }\n ]\n },\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n begin: '(\\\\(.*?\\\\)|' + IDENT_RE + ')\\\\s*=>', returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: IDENT_RE\n },\n {\n begin: /\\(\\s*\\)/,\n },\n {\n begin: /\\(/, end: /\\)/,\n excludeBegin: true, excludeEnd: true,\n keywords: KEYWORDS,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n {\n className: '',\n begin: /\\s/,\n end: /\\s*/,\n skip: true,\n },\n { // E4X / JSX\n begin: /</, end: /(\\/[A-Za-z0-9\\\\._:-]+|[A-Za-z0-9\\\\._:-]+\\/)>/,\n subLanguage: 'xml',\n contains: [\n { begin: /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/, skip: true },\n {\n begin: /<[A-Za-z0-9\\\\._:-]+/, end: /(\\/[A-Za-z0-9\\\\._:-]+|[A-Za-z0-9\\\\._:-]+\\/)>/, skip: true,\n contains: [\n { begin: /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/, skip: true },\n 'self'\n ]\n }\n ]\n }\n ],\n relevance: 0\n },\n {\n className: 'function',\n beginKeywords: 'function', end: /\\{/, excludeEnd: true,\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {begin: IDENT_RE}),\n {\n className: 'params',\n begin: /\\(/, end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n contains: PARAMS_CONTAINS\n }\n ],\n illegal: /\\[|%/\n },\n {\n begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n },\n hljs.METHOD_GUARD,\n { // ES6 class\n className: 'class',\n beginKeywords: 'class', end: /[{;=]/, excludeEnd: true,\n illegal: /[:\"\\[\\]]/,\n contains: [\n {beginKeywords: 'extends'},\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n {\n beginKeywords: 'constructor get set', end: /\\{/, excludeEnd: true\n }\n ],\n illegal: /#(?!!)/\n };\n};","module.exports = function(hljs) {\n var LITERALS = {literal: 'true false null'};\n var ALLOWED_COMMENTS = [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n var TYPES = [\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE\n ];\n var VALUE_CONTAINER = {\n end: ',', endsWithParent: true, excludeEnd: true,\n contains: TYPES,\n keywords: LITERALS\n };\n var OBJECT = {\n begin: '{', end: '}',\n contains: [\n {\n className: 'attr',\n begin: /\"/, end: /\"/,\n contains: [hljs.BACKSLASH_ESCAPE],\n illegal: '\\\\n',\n },\n hljs.inherit(VALUE_CONTAINER, {begin: /:/})\n ].concat(ALLOWED_COMMENTS),\n illegal: '\\\\S'\n };\n var ARRAY = {\n begin: '\\\\[', end: '\\\\]',\n contains: [hljs.inherit(VALUE_CONTAINER)], // inherit is a workaround for a bug that makes shared modes with endsWithParent compile only the ending of one of the parents\n illegal: '\\\\S'\n };\n TYPES.push(OBJECT, ARRAY);\n ALLOWED_COMMENTS.forEach(function(rule) {\n TYPES.push(rule)\n })\n return {\n contains: TYPES,\n keywords: LITERALS,\n illegal: '\\\\S'\n };\n};","module.exports = function(hljs) {\n // Since there are numerous special names in Julia, it is too much trouble\n // to maintain them by hand. Hence these names (i.e. keywords, literals and\n // built-ins) are automatically generated from Julia v0.6 itself through\n // the following scripts for each.\n\n var KEYWORDS = {\n // # keyword generator, multi-word keywords handled manually below\n // foreach(println, [\"in\", \"isa\", \"where\"])\n // for kw in Base.REPLCompletions.complete_keyword(\"\")\n // if !(contains(kw, \" \") || kw == \"struct\")\n // println(kw)\n // end\n // end\n keyword:\n 'in isa where ' +\n 'baremodule begin break catch ccall const continue do else elseif end export false finally for function ' +\n 'global if import importall let local macro module quote return true try using while ' +\n // legacy, to be deprecated in the next release\n 'type immutable abstract bitstype typealias ',\n\n // # literal generator\n // println(\"true\")\n // println(\"false\")\n // for name in Base.REPLCompletions.completions(\"\", 0)[1]\n // try\n // v = eval(Symbol(name))\n // if !(v isa Function || v isa Type || v isa TypeVar || v isa Module || v isa Colon)\n // println(name)\n // end\n // end\n // end\n literal:\n 'true false ' +\n 'ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort ' +\n 'NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway ' +\n 'RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im ' +\n 'nothing pi γ π φ ',\n\n // # built_in generator:\n // for name in Base.REPLCompletions.completions(\"\", 0)[1]\n // try\n // v = eval(Symbol(name))\n // if v isa Type || v isa TypeVar\n // println(name)\n // end\n // end\n // end\n built_in:\n 'ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet ' +\n 'AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat ' +\n 'AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal '+\n 'BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException ' +\n 'CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager ' +\n 'Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ' +\n 'ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t ' +\n 'Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict ' +\n 'DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ' +\n 'ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function ' +\n 'Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear ' +\n 'IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException ' +\n 'InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix ' +\n 'MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict ' +\n 'OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe ' +\n 'PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ' +\n 'ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode ' +\n 'RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed ' +\n 'SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange ' +\n 'StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal ' +\n 'Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry ' +\n 'TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError ' +\n 'UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector ' +\n 'VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool '\n };\n\n // ref: http://julia.readthedocs.org/en/latest/manual/variables/#allowed-variable-names\n var VARIABLE_NAME_RE = '[A-Za-z_\\\\u00A1-\\\\uFFFF][A-Za-z_0-9\\\\u00A1-\\\\uFFFF]*';\n\n // placeholder for recursive self-reference\n var DEFAULT = {\n lexemes: VARIABLE_NAME_RE, keywords: KEYWORDS, illegal: /<\\//\n };\n\n // ref: http://julia.readthedocs.org/en/latest/manual/integers-and-floating-point-numbers/\n var NUMBER = {\n className: 'number',\n // supported numeric literals:\n // * binary literal (e.g. 0x10)\n // * octal literal (e.g. 0o76543210)\n // * hexadecimal literal (e.g. 0xfedcba876543210)\n // * hexadecimal floating point literal (e.g. 0x1p0, 0x1.2p2)\n // * decimal literal (e.g. 9876543210, 100_000_000)\n // * floating pointe literal (e.g. 1.2, 1.2f, .2, 1., 1.2e10, 1.2e-10)\n begin: /(\\b0x[\\d_]*(\\.[\\d_]*)?|0x\\.\\d[\\d_]*)p[-+]?\\d+|\\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\\b\\d[\\d_]*(\\.[\\d_]*)?|\\.\\d[\\d_]*)([eEfF][-+]?\\d+)?/,\n relevance: 0\n };\n\n var CHAR = {\n className: 'string',\n begin: /'(.|\\\\[xXuU][a-zA-Z0-9]+)'/\n };\n\n var INTERPOLATION = {\n className: 'subst',\n begin: /\\$\\(/, end: /\\)/,\n keywords: KEYWORDS\n };\n\n var INTERPOLATED_VARIABLE = {\n className: 'variable',\n begin: '\\\\$' + VARIABLE_NAME_RE\n };\n\n // TODO: neatly escape normal code in string literal\n var STRING = {\n className: 'string',\n contains: [hljs.BACKSLASH_ESCAPE, INTERPOLATION, INTERPOLATED_VARIABLE],\n variants: [\n { begin: /\\w*\"\"\"/, end: /\"\"\"\\w*/, relevance: 10 },\n { begin: /\\w*\"/, end: /\"\\w*/ }\n ]\n };\n\n var COMMAND = {\n className: 'string',\n contains: [hljs.BACKSLASH_ESCAPE, INTERPOLATION, INTERPOLATED_VARIABLE],\n begin: '`', end: '`'\n };\n\n var MACROCALL = {\n className: 'meta',\n begin: '@' + VARIABLE_NAME_RE\n };\n\n var COMMENT = {\n className: 'comment',\n variants: [\n { begin: '#=', end: '=#', relevance: 10 },\n { begin: '#', end: '$' }\n ]\n };\n\n DEFAULT.contains = [\n NUMBER,\n CHAR,\n STRING,\n COMMAND,\n MACROCALL,\n COMMENT,\n hljs.HASH_COMMENT_MODE,\n {\n className: 'keyword',\n begin:\n '\\\\b(((abstract|primitive)\\\\s+)type|(mutable\\\\s+)?struct)\\\\b'\n },\n {begin: /<:/} // relevance booster\n ];\n INTERPOLATION.contains = DEFAULT.contains;\n\n return DEFAULT;\n};","module.exports = function(hljs) {\n return {\n contains: [\n {\n className: 'meta',\n begin: /^julia>/,\n relevance: 10,\n starts: {\n // end the highlighting if we are on a new line and the line does not have at\n // least six spaces in the beginning\n end: /^(?![ ]{6})/,\n subLanguage: 'julia'\n },\n // jldoctest Markdown blocks are used in the Julia manual and package docs indicate\n // code snippets that should be verified when the documentation is built. They can be\n // either REPL-like or script-like, but are usually REPL-like and therefore we apply\n // julia-repl highlighting to them. More information can be found in Documenter's\n // manual: https://juliadocs.github.io/Documenter.jl/latest/man/doctests.html\n aliases: ['jldoctest']\n }\n ]\n }\n};","module.exports = function(hljs) {\n var KEYWORDS = {\n keyword:\n 'abstract as val var vararg get set class object open private protected public noinline ' +\n 'crossinline dynamic final enum if else do while for when throw try catch finally ' +\n 'import package is in fun override companion reified inline lateinit init ' +\n 'interface annotation data sealed internal infix operator out by constructor super ' +\n 'tailrec where const inner suspend typealias external expect actual ' +\n // to be deleted soon\n 'trait volatile transient native default',\n built_in:\n 'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',\n literal:\n 'true false null'\n };\n var KEYWORDS_WITH_LABEL = {\n className: 'keyword',\n begin: /\\b(break|continue|return|this)\\b/,\n starts: {\n contains: [\n {\n className: 'symbol',\n begin: /@\\w+/\n }\n ]\n }\n };\n var LABEL = {\n className: 'symbol', begin: hljs.UNDERSCORE_IDENT_RE + '@'\n };\n\n // for string templates\n var SUBST = {\n className: 'subst',\n begin: '\\\\${', end: '}', contains: [hljs.C_NUMBER_MODE]\n };\n var VARIABLE = {\n className: 'variable', begin: '\\\\$' + hljs.UNDERSCORE_IDENT_RE\n };\n var STRING = {\n className: 'string',\n variants: [\n {\n begin: '\"\"\"', end: '\"\"\"(?=[^\"])',\n contains: [VARIABLE, SUBST]\n },\n // Can't use built-in modes easily, as we want to use STRING in the meta\n // context as 'meta-string' and there's no syntax to remove explicitly set\n // classNames in built-in modes.\n {\n begin: '\\'', end: '\\'',\n illegal: /\\n/,\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n {\n begin: '\"', end: '\"',\n illegal: /\\n/,\n contains: [hljs.BACKSLASH_ESCAPE, VARIABLE, SUBST]\n }\n ]\n };\n SUBST.contains.push(STRING)\n\n var ANNOTATION_USE_SITE = {\n className: 'meta', begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\s*:(?:\\\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'\n };\n var ANNOTATION = {\n className: 'meta', begin: '@' + hljs.UNDERSCORE_IDENT_RE,\n contains: [\n {\n begin: /\\(/, end: /\\)/,\n contains: [\n hljs.inherit(STRING, {className: 'meta-string'})\n ]\n }\n ]\n };\n\n // https://kotlinlang.org/docs/reference/whatsnew11.html#underscores-in-numeric-literals\n // According to the doc above, the number mode of kotlin is the same as java 8,\n // so the code below is copied from java.js\n var KOTLIN_NUMBER_RE = '\\\\b' +\n '(' +\n '0[bB]([01]+[01_]+[01]+|[01]+)' + // 0b...\n '|' +\n '0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)' + // 0x...\n '|' +\n '(' +\n '([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?' +\n '|' +\n '\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)' +\n ')' +\n '([eE][-+]?\\\\d+)?' + // octal, decimal, float\n ')' +\n '[lLfF]?';\n var KOTLIN_NUMBER_MODE = {\n className: 'number',\n begin: KOTLIN_NUMBER_RE,\n relevance: 0\n };\n var KOTLIN_NESTED_COMMENT = hljs.COMMENT(\n '/\\\\*', '\\\\*/',\n { contains: [ hljs.C_BLOCK_COMMENT_MODE ] }\n );\n var KOTLIN_PAREN_TYPE = {\n variants: [\n\t { className: 'type',\n\t begin: hljs.UNDERSCORE_IDENT_RE\n\t },\n\t { begin: /\\(/, end: /\\)/,\n\t contains: [] //defined later\n\t }\n\t]\n };\n var KOTLIN_PAREN_TYPE2 = KOTLIN_PAREN_TYPE;\n KOTLIN_PAREN_TYPE2.variants[1].contains = [ KOTLIN_PAREN_TYPE ];\n KOTLIN_PAREN_TYPE.variants[1].contains = [ KOTLIN_PAREN_TYPE2 ];\n\n return {\n aliases: ['kt'],\n keywords: KEYWORDS,\n contains : [\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance : 0,\n contains : [{\n className : 'doctag',\n begin : '@[A-Za-z]+'\n }]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n KOTLIN_NESTED_COMMENT,\n KEYWORDS_WITH_LABEL,\n LABEL,\n ANNOTATION_USE_SITE,\n ANNOTATION,\n {\n className: 'function',\n beginKeywords: 'fun', end: '[(]|$',\n returnBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n illegal: /fun\\s+(<.*>)?[^\\s\\(]+(\\s+[^\\s\\(]+)\\s*=/,\n relevance: 5,\n contains: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(', returnBegin: true,\n relevance: 0,\n contains: [hljs.UNDERSCORE_TITLE_MODE]\n },\n {\n className: 'type',\n begin: /</, end: />/, keywords: 'reified',\n relevance: 0\n },\n {\n className: 'params',\n begin: /\\(/, end: /\\)/,\n endsParent: true,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n {\n begin: /:/, end: /[=,\\/]/, endsWithParent: true,\n contains: [\n KOTLIN_PAREN_TYPE,\n hljs.C_LINE_COMMENT_MODE,\n KOTLIN_NESTED_COMMENT\n ],\n relevance: 0\n },\n hljs.C_LINE_COMMENT_MODE,\n KOTLIN_NESTED_COMMENT,\n ANNOTATION_USE_SITE,\n ANNOTATION,\n STRING,\n hljs.C_NUMBER_MODE\n ]\n },\n KOTLIN_NESTED_COMMENT\n ]\n },\n {\n className: 'class',\n beginKeywords: 'class interface trait', end: /[:\\{(]|$/, // remove 'trait' when removed from KEYWORDS\n excludeEnd: true,\n illegal: 'extends implements',\n contains: [\n {beginKeywords: 'public protected internal private constructor'},\n hljs.UNDERSCORE_TITLE_MODE,\n {\n className: 'type',\n begin: /</, end: />/, excludeBegin: true, excludeEnd: true,\n relevance: 0\n },\n {\n className: 'type',\n begin: /[,:]\\s*/, end: /[<\\(,]|$/, excludeBegin: true, returnEnd: true\n },\n ANNOTATION_USE_SITE,\n ANNOTATION\n ]\n },\n STRING,\n {\n className: 'meta',\n begin: \"^#!/usr/bin/env\", end: '$',\n illegal: '\\n'\n },\n KOTLIN_NUMBER_MODE\n ]\n };\n};","module.exports = function(hljs) {\n return {\n contains: [\n {\n className: 'attribute',\n begin: '^dn', end: ': ', excludeEnd: true,\n starts: {end: '$', relevance: 0},\n relevance: 10\n },\n {\n className: 'attribute',\n begin: '^\\\\w', end: ': ', excludeEnd: true,\n starts: {end: '$', relevance: 0}\n },\n {\n className: 'literal',\n begin: '^-', end: '$'\n },\n hljs.HASH_COMMENT_MODE\n ]\n };\n};","module.exports = function(hljs) {\n var IDENT_RE = '[\\\\w-]+'; // yes, Less identifiers may begin with a digit\n var INTERP_IDENT_RE = '(' + IDENT_RE + '|@{' + IDENT_RE + '})';\n\n /* Generic Modes */\n\n var RULES = [], VALUE = []; // forward def. for recursive modes\n\n var STRING_MODE = function(c) { return {\n // Less strings are not multiline (also include '~' for more consistent coloring of \"escaped\" strings)\n className: 'string', begin: '~?' + c + '.*?' + c\n };};\n\n var IDENT_MODE = function(name, begin, relevance) { return {\n className: name, begin: begin, relevance: relevance\n };};\n\n var PARENS_MODE = {\n // used only to properly balance nested parens inside mixin call, def. arg list\n begin: '\\\\(', end: '\\\\)', contains: VALUE, relevance: 0\n };\n\n // generic Less highlighter (used almost everywhere except selectors):\n VALUE.push(\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING_MODE(\"'\"),\n STRING_MODE('\"'),\n hljs.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(\n {\n begin: '(url|data-uri)\\\\(',\n starts: {className: 'string', end: '[\\\\)\\\\n]', excludeEnd: true}\n },\n IDENT_MODE('number', '#[0-9A-Fa-f]+\\\\b'),\n PARENS_MODE,\n IDENT_MODE('variable', '@@?' + IDENT_RE, 10),\n IDENT_MODE('variable', '@{' + IDENT_RE + '}'),\n IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string\n { // @media features (it’s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):\n className: 'attribute', begin: IDENT_RE + '\\\\s*:', end: ':', returnBegin: true, excludeEnd: true\n },\n {\n className: 'meta',\n begin: '!important'\n }\n );\n\n var VALUE_WITH_RULESETS = VALUE.concat({\n begin: '{', end: '}', contains: RULES\n });\n\n var MIXIN_GUARD_MODE = {\n beginKeywords: 'when', endsWithParent: true,\n contains: [{beginKeywords: 'and not'}].concat(VALUE) // using this form to override VALUE’s 'function' match\n };\n\n /* Rule-Level Modes */\n\n var RULE_MODE = {\n begin: INTERP_IDENT_RE + '\\\\s*:', returnBegin: true, end: '[;}]',\n relevance: 0,\n contains: [\n {\n className: 'attribute',\n begin: INTERP_IDENT_RE, end: ':', excludeEnd: true,\n starts: {\n endsWithParent: true, illegal: '[<=$]',\n relevance: 0,\n contains: VALUE\n }\n }\n ]\n };\n\n var AT_RULE_MODE = {\n className: 'keyword',\n begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b',\n starts: {end: '[;{}]', returnEnd: true, contains: VALUE, relevance: 0}\n };\n\n // variable definitions and calls\n var VAR_RULE_MODE = {\n className: 'variable',\n variants: [\n // using more strict pattern for higher relevance to increase chances of Less detection.\n // this is *the only* Less specific statement used in most of the sources, so...\n // (we’ll still often loose to the css-parser unless there's '//' comment,\n // simply because 1 variable just can't beat 99 properties :)\n {begin: '@' + IDENT_RE + '\\\\s*:', relevance: 15},\n {begin: '@' + IDENT_RE}\n ],\n starts: {end: '[;}]', returnEnd: true, contains: VALUE_WITH_RULESETS}\n };\n\n var SELECTOR_MODE = {\n // first parse unambiguous selectors (i.e. those not starting with tag)\n // then fall into the scary lookahead-discriminator variant.\n // this mode also handles mixin definitions and calls\n variants: [{\n begin: '[\\\\.#:&\\\\[>]', end: '[;{}]' // mixin calls end with ';'\n }, {\n begin: INTERP_IDENT_RE, end: '{'\n }],\n returnBegin: true,\n returnEnd: true,\n illegal: '[<=\\'$\"]',\n relevance: 0,\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n MIXIN_GUARD_MODE,\n IDENT_MODE('keyword', 'all\\\\b'),\n IDENT_MODE('variable', '@{' + IDENT_RE + '}'), // otherwise it’s identified as tag\n IDENT_MODE('selector-tag', INTERP_IDENT_RE + '%?', 0), // '%' for more consistent coloring of @keyframes \"tags\"\n IDENT_MODE('selector-id', '#' + INTERP_IDENT_RE),\n IDENT_MODE('selector-class', '\\\\.' + INTERP_IDENT_RE, 0),\n IDENT_MODE('selector-tag', '&', 0),\n {className: 'selector-attr', begin: '\\\\[', end: '\\\\]'},\n {className: 'selector-pseudo', begin: /:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/},\n {begin: '\\\\(', end: '\\\\)', contains: VALUE_WITH_RULESETS}, // argument list of parametric mixins\n {begin: '!important'} // eat !important after mixin call or it will be colored as tag\n ]\n };\n\n RULES.push(\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n AT_RULE_MODE,\n VAR_RULE_MODE,\n RULE_MODE,\n SELECTOR_MODE\n );\n\n return {\n case_insensitive: true,\n illegal: '[=>\\'/<($\"]',\n contains: RULES\n };\n};","module.exports = function(hljs) {\n var LISP_IDENT_RE = '[a-zA-Z_\\\\-\\\\+\\\\*\\\\/\\\\<\\\\=\\\\>\\\\&\\\\#][a-zA-Z0-9_\\\\-\\\\+\\\\*\\\\/\\\\<\\\\=\\\\>\\\\&\\\\#!]*';\n var MEC_RE = '\\\\|[^]*?\\\\|';\n var LISP_SIMPLE_NUMBER_RE = '(\\\\-|\\\\+)?\\\\d+(\\\\.\\\\d+|\\\\/\\\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\\\+|\\\\-)?\\\\d+)?';\n var SHEBANG = {\n className: 'meta',\n begin: '^#!', end: '$'\n };\n var LITERAL = {\n className: 'literal',\n begin: '\\\\b(t{1}|nil)\\\\b'\n };\n var NUMBER = {\n className: 'number',\n variants: [\n {begin: LISP_SIMPLE_NUMBER_RE, relevance: 0},\n {begin: '#(b|B)[0-1]+(/[0-1]+)?'},\n {begin: '#(o|O)[0-7]+(/[0-7]+)?'},\n {begin: '#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?'},\n {begin: '#(c|C)\\\\(' + LISP_SIMPLE_NUMBER_RE + ' +' + LISP_SIMPLE_NUMBER_RE, end: '\\\\)'}\n ]\n };\n var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null});\n var COMMENT = hljs.COMMENT(\n ';', '$',\n {\n relevance: 0\n }\n );\n var VARIABLE = {\n begin: '\\\\*', end: '\\\\*'\n };\n var KEYWORD = {\n className: 'symbol',\n begin: '[:&]' + LISP_IDENT_RE\n };\n var IDENT = {\n begin: LISP_IDENT_RE,\n relevance: 0\n };\n var MEC = {\n begin: MEC_RE\n };\n var QUOTED_LIST = {\n begin: '\\\\(', end: '\\\\)',\n contains: ['self', LITERAL, STRING, NUMBER, IDENT]\n };\n var QUOTED = {\n contains: [NUMBER, STRING, VARIABLE, KEYWORD, QUOTED_LIST, IDENT],\n variants: [\n {\n begin: '[\\'`]\\\\(', end: '\\\\)'\n },\n {\n begin: '\\\\(quote ', end: '\\\\)',\n keywords: {name: 'quote'}\n },\n {\n begin: '\\'' + MEC_RE\n }\n ]\n };\n var QUOTED_ATOM = {\n variants: [\n {begin: '\\'' + LISP_IDENT_RE},\n {begin: '#\\'' + LISP_IDENT_RE + '(::' + LISP_IDENT_RE + ')*'}\n ]\n };\n var LIST = {\n begin: '\\\\(\\\\s*', end: '\\\\)'\n };\n var BODY = {\n endsWithParent: true,\n relevance: 0\n };\n LIST.contains = [\n {\n className: 'name',\n variants: [\n {begin: LISP_IDENT_RE},\n {begin: MEC_RE}\n ]\n },\n BODY\n ];\n BODY.contains = [QUOTED, QUOTED_ATOM, LIST, LITERAL, NUMBER, STRING, COMMENT, VARIABLE, KEYWORD, MEC, IDENT];\n\n return {\n illegal: /\\S/,\n contains: [\n NUMBER,\n SHEBANG,\n LITERAL,\n STRING,\n COMMENT,\n QUOTED,\n QUOTED_ATOM,\n LIST,\n IDENT\n ]\n };\n};","module.exports = function(hljs) {\n var KEYWORDS = {\n keyword:\n // JS keywords\n 'in if for while finally new do return else break catch instanceof throw try this ' +\n 'switch continue typeof delete debugger case default function var with ' +\n // LiveScript keywords\n 'then unless until loop of by when and or is isnt not it that otherwise from to til fallthrough super ' +\n 'case default function var void const let enum export import native list map ' +\n '__hasProp __extends __slice __bind __indexOf',\n literal:\n // JS literals\n 'true false null undefined ' +\n // LiveScript literals\n 'yes no on off it that void',\n built_in:\n 'npm require console print module global window document'\n };\n var JS_IDENT_RE = '[A-Za-z$_](?:\\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*';\n var TITLE = hljs.inherit(hljs.TITLE_MODE, {begin: JS_IDENT_RE});\n var SUBST = {\n className: 'subst',\n begin: /#\\{/, end: /}/,\n keywords: KEYWORDS\n };\n var SUBST_SIMPLE = {\n className: 'subst',\n begin: /#[A-Za-z$_]/, end: /(?:\\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,\n keywords: KEYWORDS\n };\n var EXPRESSIONS = [\n hljs.BINARY_NUMBER_MODE,\n {\n className: 'number',\n begin: '(\\\\b0[xX][a-fA-F0-9_]+)|(\\\\b\\\\d(\\\\d|_\\\\d)*(\\\\.(\\\\d(\\\\d|_\\\\d)*)?)?(_*[eE]([-+]\\\\d(_\\\\d|\\\\d)*)?)?[_a-z]*)',\n relevance: 0,\n starts: {end: '(\\\\s*/)?', relevance: 0} // a number tries to eat the following slash to prevent treating it as a regexp\n },\n {\n className: 'string',\n variants: [\n {\n begin: /'''/, end: /'''/,\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n {\n begin: /'/, end: /'/,\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n {\n begin: /\"\"\"/, end: /\"\"\"/,\n contains: [hljs.BACKSLASH_ESCAPE, SUBST, SUBST_SIMPLE]\n },\n {\n begin: /\"/, end: /\"/,\n contains: [hljs.BACKSLASH_ESCAPE, SUBST, SUBST_SIMPLE]\n },\n {\n begin: /\\\\/, end: /(\\s|$)/,\n excludeEnd: true\n }\n ]\n },\n {\n className: 'regexp',\n variants: [\n {\n begin: '//', end: '//[gim]*',\n contains: [SUBST, hljs.HASH_COMMENT_MODE]\n },\n {\n // regex can't start with space to parse x / 2 / 3 as two divisions\n // regex can't start with *, and it supports an \"illegal\" in the main mode\n begin: /\\/(?![ *])(\\\\\\/|.)*?\\/[gim]*(?=\\W)/\n }\n ]\n },\n {\n begin: '@' + JS_IDENT_RE\n },\n {\n begin: '``', end: '``',\n excludeBegin: true, excludeEnd: true,\n subLanguage: 'javascript'\n }\n ];\n SUBST.contains = EXPRESSIONS;\n\n var PARAMS = {\n className: 'params',\n begin: '\\\\(', returnBegin: true,\n /* We need another contained nameless mode to not have every nested\n pair of parens to be called \"params\" */\n contains: [\n {\n begin: /\\(/, end: /\\)/,\n keywords: KEYWORDS,\n contains: ['self'].concat(EXPRESSIONS)\n }\n ]\n };\n\n var SYMBOLS = {\n begin: '(#=>|=>|\\\\|>>|-?->|\\\\!->)'\n };\n\n return {\n aliases: ['ls'],\n keywords: KEYWORDS,\n illegal: /\\/\\*/,\n contains: EXPRESSIONS.concat([\n hljs.COMMENT('\\\\/\\\\*', '\\\\*\\\\/'),\n hljs.HASH_COMMENT_MODE,\n SYMBOLS, // relevance booster\n {\n className: 'function',\n contains: [TITLE, PARAMS],\n returnBegin: true,\n variants: [\n {\n begin: '(' + JS_IDENT_RE + '\\\\s*(?:=|:=)\\\\s*)?(\\\\(.*\\\\))?\\\\s*\\\\B\\\\->\\\\*?', end: '\\\\->\\\\*?'\n },\n {\n begin: '(' + JS_IDENT_RE + '\\\\s*(?:=|:=)\\\\s*)?!?(\\\\(.*\\\\))?\\\\s*\\\\B[-~]{1,2}>\\\\*?', end: '[-~]{1,2}>\\\\*?'\n },\n {\n begin: '(' + JS_IDENT_RE + '\\\\s*(?:=|:=)\\\\s*)?(\\\\(.*\\\\))?\\\\s*\\\\B!?[-~]{1,2}>\\\\*?', end: '!?[-~]{1,2}>\\\\*?'\n }\n ]\n },\n {\n className: 'class',\n beginKeywords: 'class',\n end: '$',\n illegal: /[:=\"\\[\\]]/,\n contains: [\n {\n beginKeywords: 'extends',\n endsWithParent: true,\n illegal: /[:=\"\\[\\]]/,\n contains: [TITLE]\n },\n TITLE\n ]\n },\n {\n begin: JS_IDENT_RE + ':', end: ':',\n returnBegin: true, returnEnd: true,\n relevance: 0\n }\n ])\n };\n};","module.exports = function(hljs) {\n var OPENING_LONG_BRACKET = '\\\\[=*\\\\[';\n var CLOSING_LONG_BRACKET = '\\\\]=*\\\\]';\n var LONG_BRACKETS = {\n begin: OPENING_LONG_BRACKET, end: CLOSING_LONG_BRACKET,\n contains: ['self']\n };\n var COMMENTS = [\n hljs.COMMENT('--(?!' + OPENING_LONG_BRACKET + ')', '$'),\n hljs.COMMENT(\n '--' + OPENING_LONG_BRACKET,\n CLOSING_LONG_BRACKET,\n {\n contains: [LONG_BRACKETS],\n relevance: 10\n }\n )\n ];\n return {\n lexemes: hljs.UNDERSCORE_IDENT_RE,\n keywords: {\n literal: \"true false nil\",\n keyword: \"and break do else elseif end for goto if in local not or repeat return then until while\",\n built_in:\n //Metatags and globals:\n '_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len ' +\n '__gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert ' +\n //Standard methods and properties:\n 'collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring' +\n 'module next pairs pcall print rawequal rawget rawset require select setfenv' +\n 'setmetatable tonumber tostring type unpack xpcall arg self' +\n //Library methods and properties (one line per library):\n 'coroutine resume yield status wrap create running debug getupvalue ' +\n 'debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv ' +\n 'io lines write close flush open output type read stderr stdin input stdout popen tmpfile ' +\n 'math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan ' +\n 'os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall ' +\n 'string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower ' +\n 'table setn insert getn foreachi maxn foreach concat sort remove'\n },\n contains: COMMENTS.concat([\n {\n className: 'function',\n beginKeywords: 'function', end: '\\\\)',\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {begin: '([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*'}),\n {\n className: 'params',\n begin: '\\\\(', endsWithParent: true,\n contains: COMMENTS\n }\n ].concat(COMMENTS)\n },\n hljs.C_NUMBER_MODE,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n className: 'string',\n begin: OPENING_LONG_BRACKET, end: CLOSING_LONG_BRACKET,\n contains: [LONG_BRACKETS],\n relevance: 5\n }\n ])\n };\n};","module.exports = function(hljs) {\n /* Variables: simple (eg $(var)) and special (eg $@) */\n var VARIABLE = {\n className: 'variable',\n variants: [\n {\n begin: '\\\\$\\\\(' + hljs.UNDERSCORE_IDENT_RE + '\\\\)',\n contains: [hljs.BACKSLASH_ESCAPE],\n },\n {\n begin: /\\$[@%<?\\^\\+\\*]/\n },\n ]\n };\n /* Quoted string with variables inside */\n var QUOTE_STRING = {\n className: 'string',\n begin: /\"/, end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n VARIABLE,\n ]\n };\n /* Function: $(func arg,...) */\n var FUNC = {\n className: 'variable',\n begin: /\\$\\([\\w-]+\\s/, end: /\\)/,\n keywords: {\n built_in:\n 'subst patsubst strip findstring filter filter-out sort ' +\n 'word wordlist firstword lastword dir notdir suffix basename ' +\n 'addsuffix addprefix join wildcard realpath abspath error warning ' +\n 'shell origin flavor foreach if or and call eval file value',\n },\n contains: [\n VARIABLE,\n ]\n };\n /* Variable assignment */\n var ASSIGNMENT = {\n begin: '^' + hljs.UNDERSCORE_IDENT_RE + '\\\\s*(?=[:+?]?=)'\n };\n /* Meta targets (.PHONY) */\n var META = {\n className: 'meta',\n begin: /^\\.PHONY:/, end: /$/,\n keywords: {'meta-keyword': '.PHONY'},\n lexemes: /[\\.\\w]+/\n };\n /* Targets */\n var TARGET = {\n className: 'section',\n begin: /^[^\\s]+:/, end: /$/,\n contains: [VARIABLE,]\n };\n return {\n aliases: ['mk', 'mak'],\n keywords:\n 'define endef undefine ifdef ifndef ifeq ifneq else endif ' +\n 'include -include sinclude override export unexport private vpath',\n lexemes: /[\\w-]+/,\n contains: [\n hljs.HASH_COMMENT_MODE,\n VARIABLE,\n QUOTE_STRING,\n FUNC,\n ASSIGNMENT,\n META,\n TARGET,\n ]\n };\n};","module.exports = function(hljs) {\n return {\n aliases: ['md', 'mkdown', 'mkd'],\n contains: [\n // highlight headers\n {\n className: 'section',\n variants: [\n { begin: '^#{1,6}', end: '$' },\n { begin: '^.+?\\\\n[=-]{2,}$' }\n ]\n },\n // inline html\n {\n begin: '<', end: '>',\n subLanguage: 'xml',\n relevance: 0\n },\n // lists (indicators only)\n {\n className: 'bullet',\n begin: '^\\\\s*([*+-]|(\\\\d+\\\\.))\\\\s+'\n },\n // strong segments\n {\n className: 'strong',\n begin: '[*_]{2}.+?[*_]{2}'\n },\n // emphasis segments\n {\n className: 'emphasis',\n variants: [\n { begin: '\\\\*.+?\\\\*' },\n { begin: '_.+?_'\n , relevance: 0\n }\n ]\n },\n // blockquotes\n {\n className: 'quote',\n begin: '^>\\\\s+', end: '$'\n },\n // code snippets\n {\n className: 'code',\n variants: [\n {\n begin: '^```\\\\w*\\\\s*$', end: '^```[ ]*$'\n },\n {\n begin: '`.+?`'\n },\n {\n begin: '^( {4}|\\\\t)', end: '$',\n relevance: 0\n }\n ]\n },\n // horizontal rules\n {\n begin: '^[-\\\\*]{3,}', end: '$'\n },\n // using links - title and link\n {\n begin: '\\\\[.+?\\\\][\\\\(\\\\[].*?[\\\\)\\\\]]',\n returnBegin: true,\n contains: [\n {\n className: 'string',\n begin: '\\\\[', end: '\\\\]',\n excludeBegin: true,\n returnEnd: true,\n relevance: 0\n },\n {\n className: 'link',\n begin: '\\\\]\\\\(', end: '\\\\)',\n excludeBegin: true, excludeEnd: true\n },\n {\n className: 'symbol',\n begin: '\\\\]\\\\[', end: '\\\\]',\n excludeBegin: true, excludeEnd: true\n }\n ],\n relevance: 10\n },\n {\n begin: /^\\[[^\\n]+\\]:/,\n returnBegin: true,\n contains: [\n {\n className: 'symbol',\n begin: /\\[/, end: /\\]/,\n excludeBegin: true, excludeEnd: true\n },\n {\n className: 'link',\n begin: /:\\s*/, end: /$/,\n excludeBegin: true\n }\n ]\n }\n ]\n };\n};","module.exports = function(hljs) {\n return {\n aliases: ['mma', 'wl'],\n lexemes: '(\\\\$|\\\\b)' + hljs.IDENT_RE + '\\\\b',\n //\n // The list of \"keywords\" (System` symbols) was determined by evaluating the following Wolfram Language code in Mathematica 12.0:\n //\n // StringRiffle[\n // \"'\" <> StringRiffle[#, \" \"] <> \"'\" & /@\n // Values[GroupBy[\n // Select[Names[\"System`*\"],\n // StringStartsQ[#, CharacterRange[\"A\", \"Z\"] | \"$\"] &],\n // First[Characters[#]] &]], \" +\\n\"]\n //\n keywords: 'AASTriangle AbelianGroup Abort AbortKernels AbortProtect AbortScheduledTask Above Abs AbsArg AbsArgPlot Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AcceptanceThreshold AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Activate Active ActiveClassification ActiveClassificationObject ActiveItem ActivePrediction ActivePredictionObject ActiveStyle AcyclicGraphQ AddOnHelpPath AddSides AddTo AddToSearchIndex AddUsers AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AdministrativeDivisionData AffineHalfSpace AffineSpace AffineStateSpaceModel AffineTransform After AggregatedEntityClass AggregationLayer AircraftData AirportData AirPressureData AirTemperatureData AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowAdultContent AllowedCloudExtraParameters AllowedCloudParameterExtensions AllowedDimensions AllowedFrequencyRange AllowedHeads AllowGroupClose AllowIncomplete AllowInlineCells AllowKernelInitialization AllowLooseGrammar AllowReverseGroupClose AllowScriptLevelChange AllTrue Alphabet AlphabeticOrder AlphabeticSort AlphaChannel AlternateImage AlternatingFactorial AlternatingGroup AlternativeHypothesis Alternatives AltitudeMethod AmbientLight AmbiguityFunction AmbiguityList Analytic AnatomyData AnatomyForm AnatomyPlot3D AnatomySkinStyle AnatomyStyling AnchoredSearch And AndersonDarlingTest AngerJ AngleBisector AngleBracket AnglePath AnglePath3D AngleVector AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning AnimationRunTime AnimationTimeIndex Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotate Annotation AnnotationDelete AnnotationNames AnnotationRules AnnotationValue Annuity AnnuityDue Annulus AnomalyDetection AnomalyDetectorFunction Anonymous Antialiasing AntihermitianMatrixQ Antisymmetric AntisymmetricMatrixQ Antonyms AnyOrder AnySubset AnyTrue Apart ApartSquareFree APIFunction Appearance AppearanceElements AppearanceRules AppellF1 Append AppendCheck AppendLayer AppendTo ApplicationIdentificationKey Apply ApplySides ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcCurvature ARCHProcess ArcLength ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Area Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess Around AroundReplace ARProcess Array ArrayComponents ArrayDepth ArrayFilter ArrayFlatten ArrayMesh ArrayPad ArrayPlot ArrayQ ArrayResample ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads ASATriangle Ask AskAppend AskConfirm AskDisplay AskedQ AskedValue AskFunction AskState AskTemplateDisplay AspectRatio AspectRatioFixed Assert AssociateTo Association AssociationFormat AssociationMap AssociationQ AssociationThread AssumeDeterministic Assuming Assumptions AstronomicalData AsymptoticDSolveValue AsymptoticEqual AsymptoticEquivalent AsymptoticGreater AsymptoticGreaterEqual AsymptoticIntegrate AsymptoticLess AsymptoticLessEqual AsymptoticOutputTracker AsymptoticRSolveValue AsymptoticSolve AsymptoticSum Asynchronous AsynchronousTaskObject AsynchronousTasks Atom AtomCoordinates AtomCount AtomDiagramCoordinates AtomList AtomQ AttentionLayer Attributes Audio AudioAmplify AudioAnnotate AudioAnnotationLookup AudioBlockMap AudioCapture AudioChannelAssignment AudioChannelCombine AudioChannelMix AudioChannels AudioChannelSeparate AudioData AudioDelay AudioDelete AudioDevice AudioDistance AudioFade AudioFrequencyShift AudioGenerator AudioIdentify AudioInputDevice AudioInsert AudioIntervals AudioJoin AudioLabel AudioLength AudioLocalMeasurements AudioLooping AudioLoudness AudioMeasurements AudioNormalize AudioOutputDevice AudioOverlay AudioPad AudioPan AudioPartition AudioPause AudioPitchShift AudioPlay AudioPlot AudioQ AudioRecord AudioReplace AudioResample AudioReverb AudioSampleRate AudioSpectralMap AudioSpectralTransformation AudioSplit AudioStop AudioStream AudioStreams AudioTimeStretch AudioTrim AudioType AugmentedPolyhedron AugmentedSymmetricPolynomial Authenticate Authentication AuthenticationDialog AutoAction Autocomplete AutocompletionFunction AutoCopy AutocorrelationTest AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutoQuoteCharacters AutoRefreshed AutoRemove AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords AutoSubmitting Axes AxesEdge AxesLabel AxesOrigin AxesStyle AxiomaticTheory Axis' +\n 'BabyMonsterGroupB Back Background BackgroundAppearance BackgroundTasksSettings Backslash Backsubstitution Backward Ball Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarcodeImage BarcodeRecognize BaringhausHenzeTest BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseDecode BaseEncode BaseForm Baseline BaselinePosition BaseStyle BasicRecurrentLayer BatchNormalizationLayer BatchSize BatesDistribution BattleLemarieWavelet BayesianMaximization BayesianMaximizationObject BayesianMinimization BayesianMinimizationObject Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized Between BetweennessCentrality BeveledPolyhedron BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryDeserialize BinaryDistance BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinarySerialize BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BiquadraticFilterModel BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor BiweightLocation BiweightMidvariance Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockchainAddressData BlockchainBase BlockchainBlockData BlockchainContractValue BlockchainData BlockchainGet BlockchainKeyEncode BlockchainPut BlockchainTokenData BlockchainTransaction BlockchainTransactionData BlockchainTransactionSign BlockchainTransactionSubmit BlockMap BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bond BondCount BondList BondQ Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms BooleanQ BooleanRegion Booleans BooleanStrings BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryDiscretizeGraphics BoundaryDiscretizeRegion BoundaryMesh BoundaryMeshRegion BoundaryMeshRegionQ BoundaryStyle BoundedRegionQ BoundingRegion Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxObject BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break BridgeData BrightnessEqualize BroadcastStationData Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurve3DBoxOptions BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BSplineSurface3DBoxOptions BubbleChart BubbleChart3D BubbleScale BubbleSizes BuildingData BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteArray ByteArrayFormat ByteArrayQ ByteArrayToString ByteCount ByteOrdering' +\n 'C CachedValue CacheGraphics CachePersistence CalendarConvert CalendarData CalendarType Callout CalloutMarker CalloutStyle CallPacket CanberraDistance Cancel CancelButton CandlestickChart CanonicalGraph CanonicalizePolygon CanonicalizePolyhedron CanonicalName CanonicalWarpingCorrespondence CanonicalWarpingDistance CantorMesh CantorStaircase Cap CapForm CapitalDifferentialD Capitalize CapsuleShape CaptureRunning CardinalBSplineBasis CarlemanLinearize CarmichaelLambda CaseOrdering Cases CaseSensitive Cashflow Casoratian Catalan CatalanNumber Catch Catenate CatenateLayer CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling CelestialSystem Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEvaluationLanguage CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellLabelStyle CellLabelTemplate CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterArray CenterDot CentralFeature CentralMoment CentralMomentGeneratingFunction Cepstrogram CepstrogramArray CepstrumArray CForm ChampernowneNumber ChangeOptions ChannelBase ChannelBrokerAction ChannelDatabin ChannelHistoryLength ChannelListen ChannelListener ChannelListeners ChannelListenerWait ChannelObject ChannelPreSendFunction ChannelReceiverFunction ChannelSend ChannelSubscribers ChanVeseBinarize Character CharacterCounts CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterName CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop ChromaticityPlot ChromaticityPlot3D ChromaticPolynomial Circle CircleBox CircleDot CircleMinus CirclePlus CirclePoints CircleThrough CircleTimes CirculantGraph CircularOrthogonalMatrixDistribution CircularQuaternionMatrixDistribution CircularRealMatrixDistribution CircularSymplecticMatrixDistribution CircularUnitaryMatrixDistribution Circumsphere CityData ClassifierFunction ClassifierInformation ClassifierMeasurements ClassifierMeasurementsObject Classify ClassPriors Clear ClearAll ClearAttributes ClearCookies ClearPermissions ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipPlanesStyle ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent CloudAccountData CloudBase CloudConnect CloudDeploy CloudDirectory CloudDisconnect CloudEvaluate CloudExport CloudExpression CloudExpressions CloudFunction CloudGet CloudImport CloudLoggingData CloudObject CloudObjectInformation CloudObjectInformationData CloudObjectNameFormat CloudObjects CloudObjectURLType CloudPublish CloudPut CloudRenderingMethod CloudSave CloudShare CloudSubmit CloudSymbol CloudUnshare ClusterClassify ClusterDissimilarityFunction ClusteringComponents ClusteringTree CMYKColor Coarse CodeAssistOptions Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorBalance ColorCombine ColorConvert ColorCoverage ColorData ColorDataFunction ColorDetect ColorDistance ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQ ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorsNear ColorSpace ColorToneMapping Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CombinedEntityClass CombinerFunction CometData CommonDefaultFormatTypes Commonest CommonestFilter CommonName CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompanyData CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledCodeFunction CompiledFunction CompilerOptions Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComplexListPlot ComplexPlot ComplexPlot3D ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries CompositeQ Composition CompoundElement CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData ComputeUncertainty Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath ConformAudio ConformImages Congruent ConicHullRegion ConicHullRegion3DBox ConicHullRegionBox ConicOptimization Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphComponents ConnectedGraphQ ConnectedMeshComponents ConnectedMoleculeComponents ConnectedMoleculeQ ConnectionSettings ConnectLibraryCallbackFunction ConnectSystemModelComponents ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray ConstantArrayLayer ConstantImage ConstantPlusLayer ConstantRegionQ Constants ConstantTimesLayer ConstellationData ConstrainedMax ConstrainedMin Construct Containing ContainsAll ContainsAny ContainsExactly ContainsNone ContainsOnly ContentFieldOptions ContentLocationFunction ContentObject ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTask ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean ContrastiveLossLayer Control ControlActive ControlAlignment ControlGroupContentsBox ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket ConvexHullMesh ConvexPolygonQ ConvexPolyhedronQ ConvolutionLayer Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CookieFunction Cookies CoordinateBoundingBox CoordinateBoundingBoxArray CoordinateBounds CoordinateBoundsArray CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDatabin CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CountDistinct CountDistinctBy CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Counts CountsBy Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateCellID CreateChannel CreateCloudExpression CreateDatabin CreateDataSystemModel CreateDialog CreateDirectory CreateDocument CreateFile CreateIntermediateDirectories CreateManagedLibraryExpression CreateNotebook CreatePalette CreatePalettePacket CreatePermissionsGroup CreateScheduledTask CreateSearchIndex CreateSystemModel CreateTemporary CreateUUID CreateWindow CriterionFunction CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossEntropyLossLayer CrossingCount CrossingDetect CrossingPolygon CrossMatrix Csc Csch CTCLossLayer Cube CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrencyConvert CurrentDate CurrentImage CurrentlySpeakingPacket CurrentNotebookImage CurrentScreenImage CurrentValue Curry CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecomposition' +\n 'D DagumDistribution DamData DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DatabaseConnect DatabaseDisconnect DatabaseReference Databin DatabinAdd DatabinRemove Databins DatabinUpload DataCompression DataDistribution DataRange DataReversed Dataset Date DateBounds Dated DateDelimiters DateDifference DatedUnit DateFormat DateFunction DateHistogram DateList DateListLogPlot DateListPlot DateListStepPlot DateObject DateObjectQ DateOverlapsQ DatePattern DatePlus DateRange DateReduction DateString DateTicksFormat DateValue DateWithinQ DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayHemisphere DaylightQ DayMatchQ DayName DayNightTerminator DayPlus DayRange DayRound DeBruijnGraph DeBruijnSequence Debug DebugTag Decapitalize Decimal DecimalForm DeclareKnownSymbols DeclarePackage Decompose DeconvolutionLayer Decrement Decrypt DecryptFile DedekindEta DeepSpaceProbeData Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultPrintPrecision DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValue DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod DefineResourceFunction Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic DEigensystem DEigenvalues Deinitialization Del DelaunayMesh Delayed Deletable Delete DeleteAnomalies DeleteBorderComponents DeleteCases DeleteChannel DeleteCloudExpression DeleteContents DeleteDirectory DeleteDuplicates DeleteDuplicatesBy DeleteFile DeleteMissing DeleteObject DeletePermissionsKey DeleteSearchIndex DeleteSmallComponents DeleteStopwords DeleteWithContents DeletionWarning DelimitedArray DelimitedSequence Delimiter DelimiterFlashTime DelimiterMatching Delimiters DeliveryFunction Dendrogram Denominator DensityGraphics DensityHistogram DensityPlot DensityPlot3D DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DerivedKey DescriptorStateSpace DesignMatrix DestroyAfterEvaluation Det DeviceClose DeviceConfigure DeviceExecute DeviceExecuteAsynchronous DeviceObject DeviceOpen DeviceOpenQ DeviceRead DeviceReadBuffer DeviceReadLatest DeviceReadList DeviceReadTimeSeries Devices DeviceStreams DeviceWrite DeviceWriteBuffer DGaussianWavelet DiacriticalPositioning Diagonal DiagonalizableMatrixQ DiagonalMatrix DiagonalMatrixQ Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DictionaryWordQ DifferenceDelta DifferenceOrder DifferenceQuotient DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitalSignature DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralAngle DihedralGroup Dilation DimensionalCombinations DimensionalMeshComponents DimensionReduce DimensionReducerFunction DimensionReduction Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletBeta DirichletCharacter DirichletCondition DirichletConvolve DirichletDistribution DirichletEta DirichletL DirichletLambda DirichletTransform DirichletWindow DisableConsolePrintPacket DisableFormatting DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLimit DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscreteMaxLimit DiscreteMinLimit DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform DiscretizeGraphics DiscretizeRegion Discriminant DisjointQ Disjunction Disk DiskBox DiskMatrix DiskSegment Dispatch DispatchQ DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceMatrix DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers DivideSides Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentGenerator DocumentGeneratorInformation DocumentGeneratorInformationData DocumentGenerators DocumentNotebook DocumentWeightingRules Dodecahedron DomainRegistrationInformation DominantColors DOSTextFormat Dot DotDashed DotEqual DotLayer DotPlusLayer Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DropoutLayer DSolve DSolveValue Dt DualLinearProgramming DualPolyhedron DualSystemsModel DumpGet DumpSave DuplicateFreeQ Duration Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicGeoGraphics DynamicImage DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptions' +\n 'E EarthImpactData EarthquakeData EccentricityCentrality Echo EchoFunction EclipseType EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeContract EdgeCost EdgeCount EdgeCoverQ EdgeCycleMatrix EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight EdgeWeightedGraphQ Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData ElementwiseLayer ElidedForms Eliminate EliminationOrder Ellipsoid EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmbedCode EmbeddedHTML EmbeddedService EmbeddingLayer EmbeddingObject EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EmptyRegion EnableConsolePrintPacket Enabled Encode Encrypt EncryptedObject EncryptFile End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfBuffer EndOfFile EndOfLine EndOfString EndPackage EngineEnvironment EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entity EntityClass EntityClassList EntityCopies EntityFunction EntityGroup EntityInstance EntityList EntityPrefetch EntityProperties EntityProperty EntityPropertyClass EntityRegister EntityStore EntityStores EntityTypeName EntityUnregister EntityValue Entropy EntropyFilter Environment Epilog EpilogFunction Equal EqualColumns EqualRows EqualTilde EqualTo EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EscapeRadius EstimatedBackground EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerAngles EulerCharacteristic EulerE EulerGamma EulerianGraphQ EulerMatrix EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluateScheduledTask EvaluationBox EvaluationCell EvaluationCompletionAction EvaluationData EvaluationElements EvaluationEnvironment EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels EventSeries ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludedLines ExcludedPhysicalQuantities ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog ExoplanetData Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi ExpirationDate Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportByteArray ExportForm ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpressionUUID ExpToTrig ExtendedEntityClass ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalBundle ExternalCall ExternalDataCharacterEncoding ExternalEvaluate ExternalFunction ExternalFunctionName ExternalObject ExternalOptions ExternalSessionObject ExternalSessions ExternalTypeSignature ExternalValue Extract ExtractArchive ExtractLayer ExtremeValueDistribution' +\n 'FaceForm FaceGrids FaceGridsStyle FacialFeatures Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail Failure FailureAction FailureDistribution FailureQ False FareySequence FARIMAProcess FeatureDistance FeatureExtract FeatureExtraction FeatureExtractor FeatureExtractorFunction FeatureNames FeatureNearest FeatureSpacePlot FeatureSpacePlot3D FeatureTypes FEDisableConsolePrintPacket FeedbackLinearize FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket FetalGrowthData Fibonacci Fibonorial FieldCompletionFunction FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileConvert FileDate FileExistsQ FileExtension FileFormat FileHandler FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameForms FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileSize FileSystemMap FileSystemScan FileTemplate FileTemplateApply FileType FilledCurve FilledCurveBox FilledCurveBoxOptions Filling FillingStyle FillingTransform FilteredEntityClass FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindAnomalies FindArgMax FindArgMin FindChannels FindClique FindClusters FindCookies FindCurvePath FindCycle FindDevices FindDistribution FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEdgeIndependentPaths FindEquationalProof FindEulerianCycle FindExternalEvaluators FindFaces FindFile FindFit FindFormula FindFundamentalCycles FindGeneratingFunction FindGeoLocation FindGeometricConjectures FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindHamiltonianPath FindHiddenMarkovStates FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMatchingColor FindMaximum FindMaximumFlow FindMaxValue FindMeshDefects FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindMoleculeSubstructure FindPath FindPeaks FindPermutation FindPostmanTour FindProcessParameters FindRepeat FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindSpanningTree FindSystemModelEquilibrium FindTextualAnswer FindThreshold FindTransientRepeat FindVertexCover FindVertexCut FindVertexIndependentPaths Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstCase FirstPassageTimeDistribution FirstPosition FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FitRegularization FittedModel FixedOrder FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlattenLayer FlatTopWindow FlipView Floor FlowPolynomial FlushPrintOutputPacket Fold FoldList FoldPair FoldPairList FollowRedirects Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FormControl FormFunction FormLayoutFunction FormObject FormPage FormTheme FormulaData FormulaLookup FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalGaussianNoiseProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameRate FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrenetSerretSystem FrequencySamplingFilterKernel FresnelC FresnelF FresnelG FresnelS Friday FrobeniusNumber FrobeniusSolve FromAbsoluteTime FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS FromEntity FromJulianDate FromLetterNumber FromPolarCoordinates FromRomanNumeral FromSphericalCoordinates FromUnixTime Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullInformationOutputRegulator FullOptions FullRegion FullSimplify Function FunctionCompile FunctionCompileExport FunctionCompileExportByteArray FunctionCompileExportLibrary FunctionCompileExportString FunctionDomain FunctionExpand FunctionInterpolation FunctionPeriod FunctionRange FunctionSpace FussellVeselyImportance' +\n 'GaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins GalaxyData GalleryView Gamma GammaDistribution GammaRegularized GapPenalty GARCHProcess GatedRecurrentLayer Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianOrthogonalMatrixDistribution GaussianSymplecticMatrixDistribution GaussianUnitaryMatrixDistribution GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateAsymmetricKeyPair GenerateConditions GeneratedCell GeneratedDocumentBinding GenerateDerivedKey GenerateDigitalSignature GenerateDocument GeneratedParameters GeneratedQuantityMagnitudes GenerateHTTPResponse GenerateSecuredAuthenticationKey GenerateSymmetricKey GeneratingFunction GeneratorDescription GeneratorHistoryLength GeneratorOutputType Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeoAntipode GeoArea GeoArraySize GeoBackground GeoBoundingBox GeoBounds GeoBoundsRegion GeoBubbleChart GeoCenter GeoCircle GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDisk GeoDisplacement GeoDistance GeoDistanceList GeoElevationData GeoEntities GeoGraphics GeogravityModelData GeoGridDirectionDifference GeoGridLines GeoGridLinesStyle GeoGridPosition GeoGridRange GeoGridRangePadding GeoGridUnitArea GeoGridUnitDistance GeoGridVector GeoGroup GeoHemisphere GeoHemisphereBoundary GeoHistogram GeoIdentify GeoImage GeoLabels GeoLength GeoListPlot GeoLocation GeologicalPeriodData GeomagneticModelData GeoMarker GeometricAssertion GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricScene GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoModel GeoNearest GeoPath GeoPosition GeoPositionENU GeoPositionXYZ GeoProjection GeoProjectionData GeoRange GeoRangePadding GeoRegionValuePlot GeoResolution GeoScaleBar GeoServer GeoSmoothHistogram GeoStreamPlot GeoStyling GeoStylingImageFunction GeoVariant GeoVector GeoVectorENU GeoVectorPlot GeoVectorXYZ GeoVisibleRegion GeoVisibleRegionBoundary GeoWithinQ GeoZoomLevel GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenAngle GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter GrammarApply GrammarRules GrammarToken Graph Graph3D GraphAssortativity GraphAutomorphismGroup GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel Greater GreaterEqual GreaterEqualLess GreaterEqualThan GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterThan GreaterTilde Green GreenFunction Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupBy GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators Groupings GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain GroupTogetherGrouping GroupTogetherNestedGrouping GrowCutComponents Gudermannian GuidedFilter GumbelDistribution' +\n 'HaarWavelet HadamardMatrix HalfLine HalfNormalDistribution HalfPlane HalfSpace HamiltonianGraphQ HammingDistance HammingWindow HandlerFunctions HandlerFunctionsKeys HankelH1 HankelH2 HankelMatrix HankelTransform HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash Haversine HazardFunction Head HeadCompose HeaderLines Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings Here HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenMarkovProcess HiddenSurface Highlighted HighlightGraph HighlightImage HighlightMesh HighpassFilter HigmanSimsGroupHS HilbertCurve HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HistoricalPeriodData HitMissTransform HITSCentrality HjorthDistribution HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HostLookup HotellingTSquareDistribution HoytDistribution HTMLSave HTTPErrorResponse HTTPRedirect HTTPRequest HTTPRequestData HTTPResponse Hue HumanGrowthData HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyperplane Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestData' +\n 'I IconData Iconize IconizedObject IconRules Icosahedron Identity IdentityMatrix If IgnoreCase IgnoreDiacritics IgnorePunctuation IgnoreSpellCheck IgnoringInactive Im Image Image3D Image3DProjection Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageApplyIndexed ImageAspectRatio ImageAssemble ImageAugmentationLayer ImageBoundingBoxes ImageCache ImageCacheValid ImageCapture ImageCaptureFunction ImageCases ImageChannels ImageClip ImageCollage ImageColorSpace ImageCompose ImageContainsQ ImageContents ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDisplacements ImageDistance ImageEffect ImageExposureCombine ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageFocusCombine ImageForestingComponents ImageFormattingWidth ImageForwardTransformation ImageGraphics ImageHistogram ImageIdentify ImageInstanceQ ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarker ImageMarkers ImageMeasurements ImageMesh ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImagePosition ImagePreviewFunction ImagePyramid ImagePyramidApply ImageQ ImageRangeCache ImageRecolor ImageReflect ImageRegion ImageResize ImageResolution ImageRestyle ImageRotate ImageRotated ImageSaliencyFilter ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions ImagingDevice ImplicitRegion Implies Import ImportAutoReplacements ImportByteArray ImportOptions ImportString ImprovementImportance In Inactivate Inactive IncidenceGraph IncidenceList IncidenceMatrix IncludeAromaticBonds IncludeConstantBasis IncludeDefinitions IncludeDirectories IncludeFileExtension IncludeGeneratorTasks IncludeHydrogens IncludeInflections IncludeMetaInformation IncludePods IncludeQuantities IncludeRelatedTables IncludeSingularTerm IncludeWindowTimes Increment IndefiniteMatrixQ Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentPhysicalQuantity IndependentUnit IndependentUnitDimension IndependentVertexSetQ Indeterminate IndeterminateThreshold IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers InfiniteLine InfinitePlane Infinity Infix InflationAdjust InflationMethod Information InformationData InformationDataGrid Inherited InheritScope InhomogeneousPoissonProcess InitialEvaluationHistory Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InitializationObjects InitializationValue Initialize InitialSeeding InlineCounterAssignments InlineCounterIncrements InlineRules Inner InnerPolygon InnerPolyhedron Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionFunction InsertionPointObject InsertLinebreaks InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Insphere Install InstallService InstanceNormalizationLayer InString Integer IntegerDigits IntegerExponent IntegerLength IntegerName IntegerPart IntegerPartitions IntegerQ IntegerReverse Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction Interpreter InterpretTemplate InterquartileRange Interrupt InterruptSettings IntersectingQ Intersection Interval IntervalIntersection IntervalMarkers IntervalMarkersStyle IntervalMemberQ IntervalSlider IntervalUnion Into Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHankelTransform InverseHaversine InverseImagePyramid InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InverseMellinTransform InversePermutation InverseRadon InverseRadonTransform InverseSeries InverseShortTimeFourier InverseSpectrogram InverseSurvivalFunction InverseTransformedRegion InverseWaveletTransform InverseWeierstrassP InverseWishartMatrixDistribution InverseZTransform Invisible InvisibleApplication InvisibleTimes IPAddress IrreduciblePolynomialQ IslandData IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemAspectRatio ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcess' +\n 'JaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join JoinAcross Joined JoinedCurve JoinedCurveBox JoinedCurveBoxOptions JoinForm JordanDecomposition JordanModelDecomposition JulianDate JuliaSetBoettcher JuliaSetIterationCount JuliaSetPlot JuliaSetPoints' +\n 'K KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KEdgeConnectedComponents KEdgeConnectedGraphQ KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelFunction KernelMixtureDistribution Kernels Ket Key KeyCollisionFunction KeyComplement KeyDrop KeyDropFrom KeyExistsQ KeyFreeQ KeyIntersection KeyMap KeyMemberQ KeypointStrength Keys KeySelect KeySort KeySortBy KeyTake KeyUnion KeyValueMap KeyValuePattern Khinchin KillProcess KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnapsackSolve KnightTourGraph KnotData KnownUnitQ KochCurve KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter KVertexConnectedComponents KVertexConnectedGraphQ' +\n 'LABColor Label Labeled LabeledSlider LabelingFunction LabelingSize LabelStyle LabelVisibility LaguerreL LakeData LambdaComponents LambertW LaminaData LanczosWindow LandauDistribution Language LanguageCategory LanguageData LanguageIdentify LanguageOptions LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCHColor LCM LeaderSize LeafCount LeapYearQ LearnDistribution LearnedDistribution LearningRate LearningRateMultipliers LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessEqualThan LessFullEqual LessGreater LessLess LessSlantEqual LessThan LessTilde LetterCharacter LetterCounts LetterNumber LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryDataType LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox Line3DBoxOptions LinearFilter LinearFractionalOptimization LinearFractionalTransform LinearGradientImage LinearizingTransformationData LinearLayer LinearModelFit LinearOffsetFunction LinearOptimization LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBoxOptions LineBreak LinebreakAdjustments LineBreakChart LinebreakSemicolonWeighting LineBreakWithin LineColor LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRankCentrality LinkRead LinkReadHeld LinkReadyQ Links LinkService LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot ListDensityPlot3D Listen ListFormat ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListSliceContourPlot3D ListSliceDensityPlot3D ListSliceVectorPlot3D ListStepPlot ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalAdaptiveBinarize LocalCache LocalClusteringCoefficient LocalizeDefinitions LocalizeVariables LocalObject LocalObjects LocalResponseNormalizationLayer LocalSubmit LocalSymbol LocalTime LocalTimeZone LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogisticSigmoid LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongestOrderedSequence LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow LongShortTermMemoryLayer Lookup Loopback LoopFreeGraphQ LossFunction LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowerTriangularMatrixQ LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LunarEclipse LUVColor LyapunovSolve LyonsGroupLy' +\n 'MachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MailAddressValidation MailExecute MailFolder MailItem MailReceiverFunction MailResponseFunction MailSearch MailServerConnect MailServerConnection MailSettings MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules ManagedLibraryExpressionID ManagedLibraryExpressionQ MandelbrotSetBoettcher MandelbrotSetDistance MandelbrotSetIterationCount MandelbrotSetMemberQ MandelbrotSetPlot MangoldtLambda ManhattanDistance Manipulate Manipulator MannedSpaceMissionData MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarchenkoPasturDistribution MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicalFunctionData MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixNormalDistribution MatrixPlot MatrixPower MatrixPropertyDistribution MatrixQ MatrixRank MatrixTDistribution Max MaxBend MaxCellMeasure MaxColorDistance MaxDetect MaxDuration MaxExtraBandwidths MaxExtraConditions MaxFeatureDisplacement MaxFeatures MaxFilter MaximalBy Maximize MaxItems MaxIterations MaxLimit MaxMemoryUsed MaxMixtureKernels MaxOverlapFraction MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxTrainingRounds MaxValue MaxwellDistribution MaxWordGap McLaughlinGroupMcL Mean MeanAbsoluteLossLayer MeanAround MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter MeanSquaredLossLayer Median MedianDeviation MedianFilter MedicalTestData Medium MeijerG MeijerGReduce MeixnerDistribution MellinConvolve MellinTransform MemberQ MemoryAvailable MemoryConstrained MemoryConstraint MemoryInUse MengerMesh Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuList MenuPacket MenuSortingValue MenuStyle MenuView Merge MergeDifferences MergingFunction MersennePrimeExponent MersennePrimeExponentQ Mesh MeshCellCentroid MeshCellCount MeshCellHighlight MeshCellIndex MeshCellLabel MeshCellMarker MeshCellMeasure MeshCellQuality MeshCells MeshCellShapeFunction MeshCellStyle MeshCoordinates MeshFunctions MeshPrimitives MeshQualityGoal MeshRange MeshRefinementFunction MeshRegion MeshRegionQ MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageObject MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation MeteorShowerData Method MethodOptions MexicanHatWavelet MeyerWavelet Midpoint Min MinColorDistance MinDetect MineralData MinFilter MinimalBy MinimalPolynomial MinimalStateSpaceModel Minimize MinimumTimeIncrement MinIntervalSize MinkowskiQuestionMark MinLimit MinMax MinorPlanetData Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingBehavior MissingDataMethod MissingDataRules MissingQ MissingString MissingStyle MissingValuePattern MittagLefflerE MixedFractionParts MixedGraphQ MixedMagnitude MixedRadix MixedRadixQuantity MixedUnit MixtureDistribution Mod Modal Mode Modular ModularInverse ModularLambda Module Modulus MoebiusMu Molecule MoleculeContainsQ MoleculeEquivalentQ MoleculeGraph MoleculeModify MoleculePattern MoleculePlot MoleculePlot3D MoleculeProperty MoleculeQ MoleculeValue Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction MomentOfInertia Monday Monitor MonomialList MonomialOrder MonsterGroupM MoonPhase MoonPosition MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform MortalityData Most MountainData MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovieData MovingAverage MovingMap MovingMedian MoyalDistribution Multicolumn MultiedgeStyle MultigraphQ MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity MultiplySides Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistribution' +\n 'N NakagamiDistribution NameQ Names NamespaceBox NamespaceBoxOptions Nand NArgMax NArgMin NBernoulliB NBodySimulation NBodySimulationData NCache NDEigensystem NDEigenvalues NDSolve NDSolveValue Nearest NearestFunction NearestNeighborGraph NearestTo NebulaData NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeDefiniteMatrixQ NegativeIntegers NegativeMultinomialDistribution NegativeRationals NegativeReals NegativeSemidefiniteMatrixQ NeighborhoodData NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestGraph NestList NestWhile NestWhileList NetAppend NetBidirectionalOperator NetChain NetDecoder NetDelete NetDrop NetEncoder NetEvaluationMode NetExtract NetFlatten NetFoldOperator NetGraph NetInformation NetInitialize NetInsert NetInsertSharedArrays NetJoin NetMapOperator NetMapThreadOperator NetMeasurements NetModel NetNestOperator NetPairEmbeddingOperator NetPort NetPortGradient NetPrepend NetRename NetReplace NetReplacePart NetSharedArray NetStateObject NetTake NetTrain NetTrainResultsObject NetworkPacketCapture NetworkPacketRecording NetworkPacketRecordingDuring NetworkPacketTrace NeumannValue NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextCell NextDate NextPrime NextScheduledTaskTime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NightHemisphere NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants NondimensionalizationTransform None NoneTrue NonlinearModelFit NonlinearStateSpaceModel NonlocalMeansFilter NonNegative NonNegativeIntegers NonNegativeRationals NonNegativeReals NonPositive NonPositiveIntegers NonPositiveRationals NonPositiveReals Nor NorlundB Norm Normal NormalDistribution NormalGrouping NormalizationLayer Normalize Normalized NormalizedSquaredEuclideanDistance NormalMatrixQ NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookImport NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookTemplate NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde Nothing NotHumpDownHump NotHumpEqual NotificationFunction NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar Now NoWhitespace NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms NuclearExplosionData NuclearReactorData Null NullRecords NullSpace NullWords Number NumberCompose NumberDecompose NumberExpand NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberLinePlot NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumeratorDenominator NumericalOrder NumericalSort NumericArray NumericArrayQ NumericArrayType NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlot' +\n 'O ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OceanData Octahedron OddQ Off Offset OLEData On ONanGroupON Once OneIdentity Opacity OpacityFunction OpacityFunctionScaling Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionalElement OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering OrderingBy OrderingLayer Orderless OrderlessPatternSequence OrnsteinUhlenbeckProcess Orthogonalize OrthogonalMatrixQ Out Outer OuterPolygon OuterPolyhedron OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OverwriteTarget OwenT OwnValues' +\n 'Package PackingMethod PaddedForm Padding PaddingLayer PaddingSize PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageTheme PageWidth Pagination PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath PalindromeQ Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo Parallelepiped ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds Parallelogram ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParametricRegion ParentBox ParentCell ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParentNotebook ParetoDistribution ParetoPickandsDistribution ParkData Part PartBehavior PartialCorrelationFunction PartialD ParticleAcceleratorData ParticleData Partition PartitionGranularity PartitionsP PartitionsQ PartLayer PartOfSpeech PartProtection ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteAutoQuoteCharacters PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PeakDetect PeanoCurve PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PercentForm PerfectNumber PerfectNumberQ PerformanceGoal Perimeter PeriodicBoundaryCondition PeriodicInterpolation Periodogram PeriodogramArray Permanent Permissions PermissionsGroup PermissionsGroupMemberQ PermissionsGroups PermissionsKey PermissionsKeys PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PerpendicularBisector PersistenceLocation PersistenceTime PersistentObject PersistentObjects PersistentValue PersonData PERTDistribution PetersenGraph PhaseMargins PhaseRange PhysicalSystemData Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest PingTime Pink PitchRecognize Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarAngle PlanarGraph PlanarGraphQ PlanckRadiationLaw PlaneCurveData PlanetaryMoonData PlanetData PlantData Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLabels PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangeClipPlanesStyle PlotRangePadding PlotRegion PlotStyle PlotTheme Pluralize Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox Point3DBoxOptions PointBox PointBoxOptions PointFigureChart PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonalNumber PolygonAngle PolygonBox PolygonBoxOptions PolygonCoordinates PolygonDecomposition PolygonHoleScale PolygonIntersections PolygonScale Polyhedron PolyhedronAngle PolyhedronCoordinates PolyhedronData PolyhedronDecomposition PolyhedronGenus PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PoolingLayer PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position PositionIndex Positive PositiveDefiniteMatrixQ PositiveIntegers PositiveRationals PositiveReals PositiveSemidefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerRange PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement Predict PredictionRoot PredictorFunction PredictorInformation PredictorMeasurements PredictorMeasurementsObject PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependLayer PrependTo PreprocessingRules PreserveColor PreserveImageOptions Previous PreviousCell PreviousDate PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitivePolynomialQ PrimitiveRoot PrimitiveRootList PrincipalComponents PrincipalValue Print PrintableASCIIQ PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment Printout3D Printout3DPreviewer PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateKey PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessConnection ProcessDirectory ProcessEnvironment Processes ProcessEstimator ProcessInformation ProcessObject ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessStatus ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm ProofObject Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse PsychrometricPropertyData PublicKey PublisherID PulsarData PunctuationCharacter Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptions' +\n 'QBinomial QFactorial QGamma QHypergeometricPFQ QnDispersion QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ QuadraticOptimization Quantile QuantilePlot Quantity QuantityArray QuantityDistribution QuantityForm QuantityMagnitude QuantityQ QuantityUnit QuantityVariable QuantityVariableCanonicalUnit QuantityVariableDimensions QuantityVariableIdentifier QuantityVariablePhysicalQuantity Quartics QuartileDeviation Quartiles QuartileSkewness Query QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainder' +\n 'RadialGradientImage RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RadonTransform RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Ramp Random RandomChoice RandomColor RandomComplex RandomEntity RandomFunction RandomGeoPosition RandomGraph RandomImage RandomInstance RandomInteger RandomPermutation RandomPoint RandomPolygon RandomPolyhedron RandomPrime RandomReal RandomSample RandomSeed RandomSeeding RandomVariate RandomWalkProcess RandomWord Range RangeFilter RangeSpecification RankedMax RankedMin RarerProbability Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadByteArray ReadLine ReadList ReadProtected ReadString Real RealAbs RealBlockDiagonalForm RealDigits RealExponent Reals RealSign Reap RecognitionPrior RecognitionThreshold Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RectangularRepeatingElement RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate Region RegionBinarize RegionBoundary RegionBounds RegionCentroid RegionDifference RegionDimension RegionDisjoint RegionDistance RegionDistanceFunction RegionEmbeddingDimension RegionEqual RegionFunction RegionImage RegionIntersection RegionMeasure RegionMember RegionMemberFunction RegionMoment RegionNearest RegionNearestFunction RegionPlot RegionPlot3D RegionProduct RegionQ RegionResize RegionSize RegionSymmetricDifference RegionUnion RegionWithin RegisterExternalEvaluator RegularExpression Regularization RegularlySampledQ RegularPolygon ReIm ReImLabels ReImPlot ReImStyle Reinstall RelationalDatabase RelationGraph Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot RemoteAuthorizationCaching RemoteConnect RemoteConnectionObject RemoteFile RemoteRun RemoteRunProcess Remove RemoveAlphaChannel RemoveAsynchronousTask RemoveAudioStream RemoveBackground RemoveChannelListener RemoveChannelSubscribers Removed RemoveDiacritics RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RemoveUsers RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart RepairMesh Repeated RepeatedNull RepeatedString RepeatedTiming RepeatingElement Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated ReplicateLayer RequiredPhysicalQuantities Resampling ResamplingAlgorithmData ResamplingMethod Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask ReshapeLayer Residue ResizeLayer Resolve ResourceAcquire ResourceData ResourceFunction ResourceObject ResourceRegister ResourceRemove ResourceSearch ResourceSubmissionObject ResourceSubmit ResourceSystemBase ResourceUpdate ResponseForm Rest RestartInterval Restricted Resultant ResumePacket Return ReturnEntersInput ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnReceiptFunction ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseSort ReverseSortBy ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ RiemannXi Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightComposition RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity RollPitchYawAngles RollPitchYawMatrix RomanNumeral Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RSolveValue RudinShapiro RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulePlot RulerUnits Run RunProcess RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilarity' +\n 'SameQ SameTest SampledEntityClass SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SASTriangle SatelliteData SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveConnection SaveDefinitions SavitzkyGolayMatrix SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTask ScheduledTaskActiveQ ScheduledTaskInformation ScheduledTaskInformationData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScientificNotationThreshold ScorerGi ScorerGiPrime ScorerHi ScorerHiPrime ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptForm ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition SearchAdjustment SearchIndexObject SearchIndices SearchQueryString SearchResultObject Sec Sech SechDistribution SecondOrderConeOptimization SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SecuredAuthenticationKey SecuredAuthenticationKeys SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook SelectFirst Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemanticImport SemanticImportString SemanticInterpretation SemialgebraicComponentInstances SemidefiniteOptimization SendMail SendMessage Sequence SequenceAlignment SequenceAttentionLayer SequenceCases SequenceCount SequenceFold SequenceFoldList SequenceForm SequenceHold SequenceLastLayer SequenceMostLayer SequencePosition SequencePredict SequencePredictorFunction SequenceReplace SequenceRestLayer SequenceReverseLayer SequenceSplit Series SeriesCoefficient SeriesData ServiceConnect ServiceDisconnect ServiceExecute ServiceObject ServiceRequest ServiceResponse ServiceSubmit SessionSubmit SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetCloudDirectory SetCookies SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPermissions SetPrecision SetProperty SetSecuredAuthenticationKey SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemModel SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetUsers SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share SharingList Sharpen ShearingMatrix ShearingTransform ShellRegion ShenCastanMatrix ShiftedGompertzDistribution ShiftRegisterSequence Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortTimeFourier ShortTimeFourierData ShortUpArrow Show ShowAutoConvert ShowAutoSpellCheck ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowCodeAssist ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiderealTime SiegelTheta SiegelTukeyTest SierpinskiCurve SierpinskiMesh Sign Signature SignedRankTest SignedRegionDistance SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ SimplePolygonQ SimplePolyhedronQ Simplex Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution SkinStyle Skip SliceContourPlot3D SliceDensityPlot3D SliceDistribution SliceVectorPlot3D Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDecomposition SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SnDispersion Snippet SnubPolyhedron SocialMediaData Socket SocketConnect SocketListen SocketListener SocketObject SocketOpen SocketReadMessage SocketReadyQ Sockets SocketWaitAll SocketWaitNext SoftmaxLayer SokalSneathDissimilarity SolarEclipse SolarSystemFeatureData SolidAngle SolidData SolidRegionQ Solve SolveAlways SolveDelayed Sort SortBy SortedBy SortedEntityClass Sound SoundAndGraphics SoundNote SoundVolume SourceLink Sow Space SpaceCurveData SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution SpatialMedian SpatialTransformationLayer Speak SpeakTextPacket SpearmanRankTest SpearmanRho SpeciesData SpecificityGoal SpectralLineData Spectrogram SpectrogramArray Specularity SpeechRecognize SpeechSynthesize SpellingCorrection SpellingCorrectionList SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SpherePoints SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SphericalShell SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquareMatrixQ SquareRepeatingElement SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave SSSTriangle StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackedDateListPlot StackedListPlot StackInhibit StadiumShape StandardAtmosphereData StandardDeviation StandardDeviationFilter StandardForm Standardize Standardized StandardOceanData StandbyDistribution Star StarClusterData StarData StarGraph StartAsynchronousTask StartExternalSession StartingStepSize StartOfLine StartOfString StartProcess StartScheduledTask StartupSound StartWebSession StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StateTransformationLinearize StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StereochemistryElements StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StoppingPowerData StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamMarkers StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringContainsQ StringCount StringDelete StringDrop StringEndsQ StringExpression StringExtract StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPadLeft StringPadRight StringPart StringPartition StringPosition StringQ StringRepeat StringReplace StringReplaceList StringReplacePart StringReverse StringRiffle StringRotateLeft StringRotateRight StringSkeleton StringSplit StringStartsQ StringTake StringTemplate StringToByteArray StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleData StyleDefinitions StyleForm StyleHints StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subdivide Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subsequences Subset SubsetEqual SubsetMap SubsetQ Subsets SubStar SubstitutionSystem Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubtractSides SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde Success SuchThat Sum SumConvergence SummationLayer Sunday SunPosition Sunrise Sunset SuperDagger SuperMinus SupernovaData SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceArea SurfaceColor SurfaceData SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricKey SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Synonyms Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SynthesizeMissingValues SystemDialogInput SystemException SystemGet SystemHelpPath SystemInformation SystemInformationData SystemInstall SystemModel SystemModeler SystemModelExamples SystemModelLinearize SystemModelParametricSimulate SystemModelPlot SystemModelProgressReporting SystemModelReliability SystemModels SystemModelSimulate SystemModelSimulateSensitivity SystemModelSimulationData SystemOpen SystemOptions SystemProcessData SystemProcesses SystemsConnectionsModel SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelLinearity SystemsModelMerge SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemsModelVectorRelativeOrders SystemStub SystemTest' +\n 'Tab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TableViewBoxBackground TableViewBoxOptions TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeDrop TakeLargest TakeLargestBy TakeList TakeSmallest TakeSmallestBy TakeWhile Tally Tan Tanh TargetDevice TargetFunctions TargetSystem TargetUnits TaskAbort TaskExecute TaskObject TaskRemove TaskResume Tasks TaskSuspend TaskWait TautologyQ TelegraphProcess TemplateApply TemplateArgBox TemplateBox TemplateBoxOptions TemplateEvaluate TemplateExpression TemplateIf TemplateObject TemplateSequence TemplateSlot TemplateSlotSequence TemplateUnevaluated TemplateVerbatim TemplateWith TemporalData TemporalRegularity Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge TestID TestReport TestReportObject TestResultObject Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCases TextCell TextClipboardType TextContents TextData TextElement TextForm TextGrid TextJustification TextLine TextPacket TextParagraph TextPosition TextRecognize TextSearch TextSearchReport TextSentences TextString TextStructure TextStyle TextTranslation Texture TextureCoordinateFunction TextureCoordinateScaling TextWords Therefore ThermodynamicData ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreadingLayer ThreeJSymbol Threshold Through Throw ThueMorse Thumbnail Thursday Ticks TicksStyle TideData Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint TimeDirection TimeFormat TimeGoal TimelinePlot TimeObject TimeObjectQ Times TimesBy TimeSeries TimeSeriesAggregate TimeSeriesForecast TimeSeriesInsert TimeSeriesInvertibility TimeSeriesMap TimeSeriesMapThread TimeSeriesModel TimeSeriesModelFit TimeSeriesResample TimeSeriesRescale TimeSeriesShift TimeSeriesThread TimeSeriesWindow TimeUsed TimeValue TimeWarpingCorrespondence TimeWarpingDistance TimeZone TimeZoneConvert TimeZoneOffset Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate Today ToDiscreteTimeModel ToEntity ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase Tomorrow ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform ToPolarCoordinates TopologicalSort ToRadicals ToRules ToSphericalCoordinates ToString Total TotalHeight TotalLayer TotalVariationFilter TotalWidth TouchPosition TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TrackingFunction TracyWidomDistribution TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TrainingProgressCheckpointing TrainingProgressFunction TrainingProgressMeasurements TrainingProgressReporting TrainingStoppingCriterion TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationClass TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField TransformedProcess TransformedRegion TransitionDirection TransitionDuration TransitionEffect TransitiveClosureGraph TransitiveReductionGraph Translate TranslationOptions TranslationTransform Transliterate Transparent TransparentColor Transpose TransposeLayer TrapSelection TravelDirections TravelDirectionsData TravelDistance TravelDistanceList TravelMethod TravelTime TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle Triangle TriangleCenter TriangleConstruct TriangleMeasurement TriangleWave TriangularDistribution TriangulateMesh Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean TrimmedVariance TropicalStormData True TrueQ TruncatedDistribution TruncatedPolyhedron TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBoxOptions TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow TunnelData Tuples TuranGraph TuringMachine TuttePolynomial TwoWayRule Typed TypeSpecifier' +\n 'UnateQ Uncompress UnconstrainedParameters Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UnderseaFeatureData UndirectedEdge UndirectedGraph UndirectedGraphQ UndoOptions UndoTrackedVariables Unequal UnequalTo Unevaluated UniformDistribution UniformGraphDistribution UniformPolyhedron UniformSumDistribution Uninstall Union UnionPlus Unique UnitaryMatrixQ UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitSystem UnitTriangle UnitVector UnitVectorLayer UnityDimensions UniverseModelData UniversityData UnixTime Unprotect UnregisterExternalEvaluator UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpdateSearchIndex UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize UpperTriangularMatrixQ Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpTo UpValues URL URLBuild URLDecode URLDispatcher URLDownload URLDownloadSubmit URLEncode URLExecute URLExpand URLFetch URLFetchAsynchronous URLParse URLQueryDecode URLQueryEncode URLRead URLResponseTime URLSave URLSaveAsynchronous URLShorten URLSubmit UseGraphicsRange UserDefinedWavelet Using UsingFrontEnd UtilityFunction' +\n 'V2Get ValenceErrorHandling ValidationLength ValidationSet Value ValueBox ValueBoxOptions ValueDimensions ValueForm ValuePreprocessingFunction ValueQ Values ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorAround VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorGreater VectorGreaterEqual VectorLess VectorLessEqual VectorMarkers VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerificationTest VerifyConvergence VerifyDerivedKey VerifyDigitalSignature VerifyInterpretation VerifySecurityCertificates VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexContract VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight VertexWeightedGraphQ Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewProjection ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoiceStyleData VoigtDistribution VolcanoData Volume VonMisesDistribution VoronoiMesh' +\n 'WaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WarpingCorrespondence WarpingDistance WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeatherForecastData WebAudioSearch WebElementObject WeberE WebExecute WebImage WebImageSearch WebSearch WebSessionObject WebSessions WebWindowObject Wedge Wednesday WeibullDistribution WeierstrassE1 WeierstrassE2 WeierstrassE3 WeierstrassEta1 WeierstrassEta2 WeierstrassEta3 WeierstrassHalfPeriods WeierstrassHalfPeriodW1 WeierstrassHalfPeriodW2 WeierstrassHalfPeriodW3 WeierstrassInvariantG2 WeierstrassInvariantG3 WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White WhiteNoiseProcess WhitePoint Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WikipediaData WikipediaSearch WilksW WilksWTest WindDirectionData WindingCount WindingPolygon WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowPersistentStyles WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth WindSpeedData WindVectorData WinsorizedMean WinsorizedVariance WishartMatrixDistribution With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult WolframLanguageData Word WordBoundary WordCharacter WordCloud WordCount WordCounts WordData WordDefinition WordFrequency WordFrequencyData WordList WordOrientation WordSearch WordSelectionFunction WordSeparators WordSpacings WordStem WordTranslation WorkingPrecision WrapAround Write WriteLine WriteString Wronskian' +\n 'XMLElement XMLObject XMLTemplate Xnor Xor XYZColor' +\n 'Yellow Yesterday YuleDissimilarity' +\n 'ZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZIPCodeData ZipfDistribution ZoomCenter ZoomFactor ZTest ZTransform' +\n '$Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AllowExternalChannelFunctions $AssertFunction $Assumptions $AsynchronousTask $AudioInputDevices $AudioOutputDevices $BaseDirectory $BatchInput $BatchOutput $BlockchainBase $BoxForms $ByteOrdering $CacheBaseDirectory $Canceled $ChannelBase $CharacterEncoding $CharacterEncodings $CloudBase $CloudConnected $CloudCreditsAvailable $CloudEvaluation $CloudExpressionBase $CloudObjectNameFormat $CloudObjectURLType $CloudRootDirectory $CloudSymbolBase $CloudUserID $CloudUserUUID $CloudVersion $CloudVersionNumber $CloudWolframEngineVersionNumber $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $Cookies $CookieStore $CreationDate $CurrentLink $CurrentTask $CurrentWebSession $DateStringFormat $DefaultAudioInputDevice $DefaultAudioOutputDevice $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultLocalBase $DefaultMailbox $DefaultNetworkInterface $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $EmbedCodeEnvironments $EmbeddableServices $EntityStores $Epilog $EvaluationCloudBase $EvaluationCloudObject $EvaluationEnvironment $ExportFormats $Failed $FinancialDataSource $FontFamilies $FormatType $FrontEnd $FrontEndSession $GeoEntityTypes $GeoLocation $GeoLocationCity $GeoLocationCountry $GeoLocationPrecision $GeoLocationSource $HistoryLength $HomeDirectory $HTMLExportRules $HTTPCookies $HTTPRequest $IgnoreEOF $ImageFormattingWidth $ImagingDevice $ImagingDevices $ImportFormats $IncomingMailSettings $InitialDirectory $Initialization $InitializationContexts $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $InterpreterTypes $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $LocalBase $LocalSymbolBase $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $MobilePhone $ModuleNumber $NetworkConnected $NetworkInterfaces $NetworkLicense $NewMessage $NewSymbol $Notebooks $NoValue $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $Permissions $PermissionsGroupBase $PersistenceBase $PersistencePath $PipeSupported $PlotTheme $Post $Pre $PreferencesDirectory $PreInitialization $PrePrint $PreRead $PrintForms $PrintLiteral $Printout3DPreviewer $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $PublisherID $RandomState $RecursionLimit $RegisteredDeviceClasses $RegisteredUserName $ReleaseNumber $RequesterAddress $RequesterWolframID $RequesterWolframUUID $ResourceSystemBase $RootDirectory $ScheduledTask $ScriptCommandLine $ScriptInputString $SecuredAuthenticationKeyTokens $ServiceCreditsAvailable $Services $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SourceLink $SSHAuthentication $SummaryBoxDataSizeLimit $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemMemory $SystemShell $SystemTimeZone $SystemWordLength $TemplatePath $TemporaryDirectory $TemporaryPrefix $TestFileName $TextStyle $TimedOut $TimeUnit $TimeZone $TimeZoneEntity $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $UnitSystem $Urgent $UserAddOnsDirectory $UserAgentLanguages $UserAgentMachine $UserAgentName $UserAgentOperatingSystem $UserAgentString $UserAgentVersion $UserBaseDirectory $UserDocumentsDirectory $Username $UserName $UserURLBase $Version $VersionNumber $VoiceStyles $WolframID $WolframUUID',\n contains: [\n hljs.COMMENT('\\\\(\\\\*', '\\\\*\\\\)', {contains: ['self']}),\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE\n ]\n };\n};","module.exports = /*\n Formal syntax is not published, helpful link:\n https://github.com/kornilova-l/matlab-IntelliJ-plugin/blob/master/src/main/grammar/Matlab.bnf\n*/\nfunction(hljs) {\n\n var TRANSPOSE_RE = '(\\'|\\\\.\\')+';\n var TRANSPOSE = {\n relevance: 0,\n contains: [\n { begin: TRANSPOSE_RE }\n ]\n };\n\n return {\n keywords: {\n keyword:\n 'break case catch classdef continue else elseif end enumerated events for function ' +\n 'global if methods otherwise parfor persistent properties return spmd switch try while',\n built_in:\n 'sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan ' +\n 'atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot ' +\n 'cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog ' +\n 'realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal ' +\n 'cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli ' +\n 'besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma ' +\n 'gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms ' +\n 'nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones ' +\n 'eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ' +\n 'ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril ' +\n 'triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute ' +\n 'shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan ' +\n 'isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal ' +\n 'rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table ' +\n 'readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun ' +\n 'legend intersect ismember procrustes hold num2cell '\n },\n illegal: '(//|\"|#|/\\\\*|\\\\s+/\\\\w+)',\n contains: [\n {\n className: 'function',\n beginKeywords: 'function', end: '$',\n contains: [\n hljs.UNDERSCORE_TITLE_MODE,\n {\n className: 'params',\n variants: [\n {begin: '\\\\(', end: '\\\\)'},\n {begin: '\\\\[', end: '\\\\]'}\n ]\n }\n ]\n },\n {\n className: 'built_in',\n begin: /true|false/,\n relevance: 0,\n starts: TRANSPOSE\n },\n {\n begin: '[a-zA-Z][a-zA-Z_0-9]*' + TRANSPOSE_RE,\n relevance: 0\n },\n {\n className: 'number',\n begin: hljs.C_NUMBER_RE,\n relevance: 0,\n starts: TRANSPOSE\n },\n {\n className: 'string',\n begin: '\\'', end: '\\'',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n {begin: '\\'\\''}]\n },\n {\n begin: /\\]|}|\\)/,\n relevance: 0,\n starts: TRANSPOSE\n },\n {\n className: 'string',\n begin: '\"', end: '\"',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n {begin: '\"\"'}\n ],\n starts: TRANSPOSE\n },\n hljs.COMMENT('^\\\\s*\\\\%\\\\{\\\\s*$', '^\\\\s*\\\\%\\\\}\\\\s*$'),\n hljs.COMMENT('\\\\%', '$')\n ]\n };\n};","module.exports = function(hljs) {\n var PERL_KEYWORDS = 'getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ' +\n 'ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime ' +\n 'readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq' +\n 'fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent ' +\n 'shutdown dump chomp connect getsockname die socketpair close flock exists index shmget' +\n 'sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr ' +\n 'unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 ' +\n 'getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline ' +\n 'endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand ' +\n 'mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink ' +\n 'getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr ' +\n 'untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link ' +\n 'getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller ' +\n 'lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and ' +\n 'sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 ' +\n 'chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach ' +\n 'tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir' +\n 'ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe ' +\n 'atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when';\n var SUBST = {\n className: 'subst',\n begin: '[$@]\\\\{', end: '\\\\}',\n keywords: PERL_KEYWORDS\n };\n var METHOD = {\n begin: '->{', end: '}'\n // contains defined later\n };\n var VAR = {\n variants: [\n {begin: /\\$\\d/},\n {begin: /[\\$%@](\\^\\w\\b|#\\w+(::\\w+)*|{\\w+}|\\w+(::\\w*)*)/},\n {begin: /[\\$%@][^\\s\\w{]/, relevance: 0}\n ]\n };\n var STRING_CONTAINS = [hljs.BACKSLASH_ESCAPE, SUBST, VAR];\n var PERL_DEFAULT_CONTAINS = [\n VAR,\n hljs.HASH_COMMENT_MODE,\n hljs.COMMENT(\n '^\\\\=\\\\w',\n '\\\\=cut',\n {\n endsWithParent: true\n }\n ),\n METHOD,\n {\n className: 'string',\n contains: STRING_CONTAINS,\n variants: [\n {\n begin: 'q[qwxr]?\\\\s*\\\\(', end: '\\\\)',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*\\\\[', end: '\\\\]',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*\\\\{', end: '\\\\}',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*\\\\|', end: '\\\\|',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*\\\\<', end: '\\\\>',\n relevance: 5\n },\n {\n begin: 'qw\\\\s+q', end: 'q',\n relevance: 5\n },\n {\n begin: '\\'', end: '\\'',\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n {\n begin: '\"', end: '\"'\n },\n {\n begin: '`', end: '`',\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n {\n begin: '{\\\\w+}',\n contains: [],\n relevance: 0\n },\n {\n begin: '\\-?\\\\w+\\\\s*\\\\=\\\\>',\n contains: [],\n relevance: 0\n }\n ]\n },\n {\n className: 'number',\n begin: '(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b',\n relevance: 0\n },\n { // regexp container\n begin: '(\\\\/\\\\/|' + hljs.RE_STARTERS_RE + '|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*',\n keywords: 'split return print reverse grep',\n relevance: 0,\n contains: [\n hljs.HASH_COMMENT_MODE,\n {\n className: 'regexp',\n begin: '(s|tr|y)/(\\\\\\\\.|[^/])*/(\\\\\\\\.|[^/])*/[a-z]*',\n relevance: 10\n },\n {\n className: 'regexp',\n begin: '(m|qr)?/', end: '/[a-z]*',\n contains: [hljs.BACKSLASH_ESCAPE],\n relevance: 0 // allows empty \"//\" which is a common comment delimiter in other languages\n }\n ]\n },\n {\n className: 'function',\n beginKeywords: 'sub', end: '(\\\\s*\\\\(.*?\\\\))?[;{]', excludeEnd: true,\n relevance: 5,\n contains: [hljs.TITLE_MODE]\n },\n {\n begin: '-\\\\w\\\\b',\n relevance: 0\n },\n {\n begin: \"^__DATA__$\",\n end: \"^__END__$\",\n subLanguage: 'mojolicious',\n contains: [\n {\n begin: \"^@@.*\",\n end: \"$\",\n className: \"comment\"\n }\n ]\n }\n ];\n SUBST.contains = PERL_DEFAULT_CONTAINS;\n METHOD.contains = PERL_DEFAULT_CONTAINS;\n\n return {\n aliases: ['pl', 'pm'],\n lexemes: /[\\w\\.]+/,\n keywords: PERL_KEYWORDS,\n contains: PERL_DEFAULT_CONTAINS\n };\n};","module.exports = function(hljs) {\n var VAR = {\n className: 'variable',\n variants: [\n {begin: /\\$\\d+/},\n {begin: /\\$\\{/, end: /}/},\n {begin: '[\\\\$\\\\@]' + hljs.UNDERSCORE_IDENT_RE}\n ]\n };\n var DEFAULT = {\n endsWithParent: true,\n lexemes: '[a-z/_]+',\n keywords: {\n literal:\n 'on off yes no true false none blocked debug info notice warn error crit ' +\n 'select break last permanent redirect kqueue rtsig epoll poll /dev/poll'\n },\n relevance: 0,\n illegal: '=>',\n contains: [\n hljs.HASH_COMMENT_MODE,\n {\n className: 'string',\n contains: [hljs.BACKSLASH_ESCAPE, VAR],\n variants: [\n {begin: /\"/, end: /\"/},\n {begin: /'/, end: /'/}\n ]\n },\n // this swallows entire URLs to avoid detecting numbers within\n {\n begin: '([a-z]+):/', end: '\\\\s', endsWithParent: true, excludeEnd: true,\n contains: [VAR]\n },\n {\n className: 'regexp',\n contains: [hljs.BACKSLASH_ESCAPE, VAR],\n variants: [\n {begin: \"\\\\s\\\\^\", end: \"\\\\s|{|;\", returnEnd: true},\n // regexp locations (~, ~*)\n {begin: \"~\\\\*?\\\\s+\", end: \"\\\\s|{|;\", returnEnd: true},\n // *.example.com\n {begin: \"\\\\*(\\\\.[a-z\\\\-]+)+\"},\n // sub.example.*\n {begin: \"([a-z\\\\-]+\\\\.)+\\\\*\"}\n ]\n },\n // IP\n {\n className: 'number',\n begin: '\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b'\n },\n // units\n {\n className: 'number',\n begin: '\\\\b\\\\d+[kKmMgGdshdwy]*\\\\b',\n relevance: 0\n },\n VAR\n ]\n };\n\n return {\n aliases: ['nginxconf'],\n contains: [\n hljs.HASH_COMMENT_MODE,\n {\n begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s+{', returnBegin: true,\n end: '{',\n contains: [\n {\n className: 'section',\n begin: hljs.UNDERSCORE_IDENT_RE\n }\n ],\n relevance: 0\n },\n {\n begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s', end: ';|{', returnBegin: true,\n contains: [\n {\n className: 'attribute',\n begin: hljs.UNDERSCORE_IDENT_RE,\n starts: DEFAULT\n }\n ],\n relevance: 0\n }\n ],\n illegal: '[^\\\\s\\\\}]'\n };\n};","module.exports = function(hljs) {\n var NIX_KEYWORDS = {\n keyword:\n 'rec with let in inherit assert if else then',\n literal:\n 'true false or and null',\n built_in:\n 'import abort baseNameOf dirOf isNull builtins map removeAttrs throw ' +\n 'toString derivation'\n };\n var ANTIQUOTE = {\n className: 'subst',\n begin: /\\$\\{/,\n end: /}/,\n keywords: NIX_KEYWORDS\n };\n var ATTRS = {\n begin: /[a-zA-Z0-9-_]+(\\s*=)/, returnBegin: true,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: /\\S+/\n }\n ]\n };\n var STRING = {\n className: 'string',\n contains: [ANTIQUOTE],\n variants: [\n {begin: \"''\", end: \"''\"},\n {begin: '\"', end: '\"'}\n ]\n };\n var EXPRESSIONS = [\n hljs.NUMBER_MODE,\n hljs.HASH_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n ATTRS\n ];\n ANTIQUOTE.contains = EXPRESSIONS;\n return {\n aliases: [\"nixos\"],\n keywords: NIX_KEYWORDS,\n contains: EXPRESSIONS\n };\n};","module.exports = function(hljs) {\n var API_CLASS = {\n className: 'built_in',\n begin: '\\\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\\\w+',\n };\n var OBJC_KEYWORDS = {\n keyword:\n 'int float while char export sizeof typedef const struct for union ' +\n 'unsigned long volatile static bool mutable if do return goto void ' +\n 'enum else break extern asm case short default double register explicit ' +\n 'signed typename this switch continue wchar_t inline readonly assign ' +\n 'readwrite self @synchronized id typeof ' +\n 'nonatomic super unichar IBOutlet IBAction strong weak copy ' +\n 'in out inout bycopy byref oneway __strong __weak __block __autoreleasing ' +\n '@private @protected @public @try @property @end @throw @catch @finally ' +\n '@autoreleasepool @synthesize @dynamic @selector @optional @required ' +\n '@encode @package @import @defs @compatibility_alias ' +\n '__bridge __bridge_transfer __bridge_retained __bridge_retain ' +\n '__covariant __contravariant __kindof ' +\n '_Nonnull _Nullable _Null_unspecified ' +\n '__FUNCTION__ __PRETTY_FUNCTION__ __attribute__ ' +\n 'getter setter retain unsafe_unretained ' +\n 'nonnull nullable null_unspecified null_resettable class instancetype ' +\n 'NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER ' +\n 'NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED ' +\n 'NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE ' +\n 'NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END ' +\n 'NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW ' +\n 'NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN',\n literal:\n 'false true FALSE TRUE nil YES NO NULL',\n built_in:\n 'BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once'\n };\n var LEXEMES = /[a-zA-Z@][a-zA-Z0-9_]*/;\n var CLASS_KEYWORDS = '@interface @class @protocol @implementation';\n return {\n aliases: ['mm', 'objc', 'obj-c'],\n keywords: OBJC_KEYWORDS,\n lexemes: LEXEMES,\n illegal: '</',\n contains: [\n API_CLASS,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_NUMBER_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n {\n className: 'string',\n variants: [\n {\n begin: '@\"', end: '\"',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE]\n }\n ]\n },\n {\n className: 'meta',\n begin: /#\\s*[a-z]+\\b/, end: /$/,\n keywords: {\n 'meta-keyword':\n 'if else elif endif define undef warning error line ' +\n 'pragma ifdef ifndef include'\n },\n contains: [\n {\n begin: /\\\\\\n/, relevance: 0\n },\n hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'meta-string'}),\n {\n className: 'meta-string',\n begin: /<.*?>/, end: /$/,\n illegal: '\\\\n',\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n className: 'class',\n begin: '(' + CLASS_KEYWORDS.split(' ').join('|') + ')\\\\b', end: '({|$)', excludeEnd: true,\n keywords: CLASS_KEYWORDS, lexemes: LEXEMES,\n contains: [\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n {\n begin: '\\\\.'+hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n }\n ]\n };\n};","module.exports = function(hljs) {\n /* missing support for heredoc-like string (OCaml 4.0.2+) */\n return {\n aliases: ['ml'],\n keywords: {\n keyword:\n 'and as assert asr begin class constraint do done downto else end ' +\n 'exception external for fun function functor if in include ' +\n 'inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method ' +\n 'mod module mutable new object of open! open or private rec sig struct ' +\n 'then to try type val! val virtual when while with ' +\n /* camlp4 */\n 'parser value',\n built_in:\n /* built-in types */\n 'array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit ' +\n /* (some) types in Pervasives */\n 'in_channel out_channel ref',\n literal:\n 'true false'\n },\n illegal: /\\/\\/|>>/,\n lexemes: '[a-z_]\\\\w*!?',\n contains: [\n {\n className: 'literal',\n begin: '\\\\[(\\\\|\\\\|)?\\\\]|\\\\(\\\\)',\n relevance: 0\n },\n hljs.COMMENT(\n '\\\\(\\\\*',\n '\\\\*\\\\)',\n {\n contains: ['self']\n }\n ),\n { /* type variable */\n className: 'symbol',\n begin: '\\'[A-Za-z_](?!\\')[\\\\w\\']*'\n /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */\n },\n { /* polymorphic variant */\n className: 'type',\n begin: '`[A-Z][\\\\w\\']*'\n },\n { /* module or constructor */\n className: 'type',\n begin: '\\\\b[A-Z][\\\\w\\']*',\n relevance: 0\n },\n { /* don't color identifiers, but safely catch all identifiers with '*/\n begin: '[a-z_]\\\\w*\\'[\\\\w\\']*', relevance: 0\n },\n hljs.inherit(hljs.APOS_STRING_MODE, {className: 'string', relevance: 0}),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),\n {\n className: 'number',\n begin:\n '\\\\b(0[xX][a-fA-F0-9_]+[Lln]?|' +\n '0[oO][0-7_]+[Lln]?|' +\n '0[bB][01_]+[Lln]?|' +\n '[0-9][0-9_]*([Lln]|(\\\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',\n relevance: 0\n },\n {\n begin: /[-=]>/ // relevance booster\n }\n ]\n }\n};","module.exports = function(hljs) {\n var COMMENT_MODE = hljs.COMMENT('--', '$');\n var UNQUOTED_IDENT = '[a-zA-Z_][a-zA-Z_0-9$]*';\n var DOLLAR_STRING = '\\\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\\\$';\n var LABEL = '<<\\\\s*' + UNQUOTED_IDENT + '\\\\s*>>';\n\n var SQL_KW =\n // https://www.postgresql.org/docs/11/static/sql-keywords-appendix.html\n // https://www.postgresql.org/docs/11/static/sql-commands.html\n // SQL commands (starting words)\n 'ABORT ALTER ANALYZE BEGIN CALL CHECKPOINT|10 CLOSE CLUSTER COMMENT COMMIT COPY CREATE DEALLOCATE DECLARE ' +\n 'DELETE DISCARD DO DROP END EXECUTE EXPLAIN FETCH GRANT IMPORT INSERT LISTEN LOAD LOCK MOVE NOTIFY ' +\n 'PREPARE REASSIGN|10 REFRESH REINDEX RELEASE RESET REVOKE ROLLBACK SAVEPOINT SECURITY SELECT SET SHOW ' +\n 'START TRUNCATE UNLISTEN|10 UPDATE VACUUM|10 VALUES ' +\n // SQL commands (others)\n 'AGGREGATE COLLATION CONVERSION|10 DATABASE DEFAULT PRIVILEGES DOMAIN TRIGGER EXTENSION FOREIGN ' +\n 'WRAPPER|10 TABLE FUNCTION GROUP LANGUAGE LARGE OBJECT MATERIALIZED VIEW OPERATOR CLASS ' +\n 'FAMILY POLICY PUBLICATION|10 ROLE RULE SCHEMA SEQUENCE SERVER STATISTICS SUBSCRIPTION SYSTEM ' +\n 'TABLESPACE CONFIGURATION DICTIONARY PARSER TEMPLATE TYPE USER MAPPING PREPARED ACCESS ' +\n 'METHOD CAST AS TRANSFORM TRANSACTION OWNED TO INTO SESSION AUTHORIZATION ' +\n 'INDEX PROCEDURE ASSERTION ' +\n // additional reserved key words\n 'ALL ANALYSE AND ANY ARRAY ASC ASYMMETRIC|10 BOTH CASE CHECK ' +\n 'COLLATE COLUMN CONCURRENTLY|10 CONSTRAINT CROSS ' +\n 'DEFERRABLE RANGE ' +\n 'DESC DISTINCT ELSE EXCEPT FOR FREEZE|10 FROM FULL HAVING ' +\n 'ILIKE IN INITIALLY INNER INTERSECT IS ISNULL JOIN LATERAL LEADING LIKE LIMIT ' +\n 'NATURAL NOT NOTNULL NULL OFFSET ON ONLY OR ORDER OUTER OVERLAPS PLACING PRIMARY ' +\n 'REFERENCES RETURNING SIMILAR SOME SYMMETRIC TABLESAMPLE THEN ' +\n 'TRAILING UNION UNIQUE USING VARIADIC|10 VERBOSE WHEN WHERE WINDOW WITH ' +\n // some of non-reserved (which are used in clauses or as PL/pgSQL keyword)\n 'BY RETURNS INOUT OUT SETOF|10 IF STRICT CURRENT CONTINUE OWNER LOCATION OVER PARTITION WITHIN ' +\n 'BETWEEN ESCAPE EXTERNAL INVOKER DEFINER WORK RENAME VERSION CONNECTION CONNECT ' +\n 'TABLES TEMP TEMPORARY FUNCTIONS SEQUENCES TYPES SCHEMAS OPTION CASCADE RESTRICT ADD ADMIN ' +\n 'EXISTS VALID VALIDATE ENABLE DISABLE REPLICA|10 ALWAYS PASSING COLUMNS PATH ' +\n 'REF VALUE OVERRIDING IMMUTABLE STABLE VOLATILE BEFORE AFTER EACH ROW PROCEDURAL ' +\n 'ROUTINE NO HANDLER VALIDATOR OPTIONS STORAGE OIDS|10 WITHOUT INHERIT DEPENDS CALLED ' +\n 'INPUT LEAKPROOF|10 COST ROWS NOWAIT SEARCH UNTIL ENCRYPTED|10 PASSWORD CONFLICT|10 ' +\n 'INSTEAD INHERITS CHARACTERISTICS WRITE CURSOR ALSO STATEMENT SHARE EXCLUSIVE INLINE ' +\n 'ISOLATION REPEATABLE READ COMMITTED SERIALIZABLE UNCOMMITTED LOCAL GLOBAL SQL PROCEDURES ' +\n 'RECURSIVE SNAPSHOT ROLLUP CUBE TRUSTED|10 INCLUDE FOLLOWING PRECEDING UNBOUNDED RANGE GROUPS ' +\n 'UNENCRYPTED|10 SYSID FORMAT DELIMITER HEADER QUOTE ENCODING FILTER OFF ' +\n // some parameters of VACUUM/ANALYZE/EXPLAIN\n 'FORCE_QUOTE FORCE_NOT_NULL FORCE_NULL COSTS BUFFERS TIMING SUMMARY DISABLE_PAGE_SKIPPING ' +\n //\n 'RESTART CYCLE GENERATED IDENTITY DEFERRED IMMEDIATE LEVEL LOGGED UNLOGGED ' +\n 'OF NOTHING NONE EXCLUDE ATTRIBUTE ' +\n // from GRANT (not keywords actually)\n 'USAGE ROUTINES ' +\n // actually literals, but look better this way (due to IS TRUE, IS FALSE, ISNULL etc)\n 'TRUE FALSE NAN INFINITY ';\n\n var ROLE_ATTRS = // only those not in keywrods already\n 'SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE INHERIT NOINHERIT ' +\n 'LOGIN NOLOGIN REPLICATION NOREPLICATION BYPASSRLS NOBYPASSRLS ';\n\n var PLPGSQL_KW =\n 'ALIAS BEGIN CONSTANT DECLARE END EXCEPTION RETURN PERFORM|10 RAISE GET DIAGNOSTICS ' +\n 'STACKED|10 FOREACH LOOP ELSIF EXIT WHILE REVERSE SLICE DEBUG LOG INFO NOTICE WARNING ASSERT ' +\n 'OPEN ';\n\n var TYPES =\n // https://www.postgresql.org/docs/11/static/datatype.html\n 'BIGINT INT8 BIGSERIAL SERIAL8 BIT VARYING VARBIT BOOLEAN BOOL BOX BYTEA CHARACTER CHAR VARCHAR ' +\n 'CIDR CIRCLE DATE DOUBLE PRECISION FLOAT8 FLOAT INET INTEGER INT INT4 INTERVAL JSON JSONB LINE LSEG|10 ' +\n 'MACADDR MACADDR8 MONEY NUMERIC DEC DECIMAL PATH POINT POLYGON REAL FLOAT4 SMALLINT INT2 ' +\n 'SMALLSERIAL|10 SERIAL2|10 SERIAL|10 SERIAL4|10 TEXT TIME ZONE TIMETZ|10 TIMESTAMP TIMESTAMPTZ|10 TSQUERY|10 TSVECTOR|10 ' +\n 'TXID_SNAPSHOT|10 UUID XML NATIONAL NCHAR ' +\n 'INT4RANGE|10 INT8RANGE|10 NUMRANGE|10 TSRANGE|10 TSTZRANGE|10 DATERANGE|10 ' +\n // pseudotypes\n 'ANYELEMENT ANYARRAY ANYNONARRAY ANYENUM ANYRANGE CSTRING INTERNAL ' +\n 'RECORD PG_DDL_COMMAND VOID UNKNOWN OPAQUE REFCURSOR ' +\n // spec. type\n 'NAME ' +\n // OID-types\n 'OID REGPROC|10 REGPROCEDURE|10 REGOPER|10 REGOPERATOR|10 REGCLASS|10 REGTYPE|10 REGROLE|10 ' +\n 'REGNAMESPACE|10 REGCONFIG|10 REGDICTIONARY|10 ';// +\n // some types from standard extensions\n 'HSTORE|10 LO LTREE|10 ';\n\n var TYPES_RE =\n TYPES.trim()\n .split(' ')\n .map( function(val) { return val.split('|')[0]; } )\n .join('|');\n\n var SQL_BI =\n 'CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURRENT_CATALOG|10 CURRENT_DATE LOCALTIME LOCALTIMESTAMP ' +\n 'CURRENT_ROLE|10 CURRENT_SCHEMA|10 SESSION_USER PUBLIC ';\n\n var PLPGSQL_BI =\n 'FOUND NEW OLD TG_NAME|10 TG_WHEN|10 TG_LEVEL|10 TG_OP|10 TG_RELID|10 TG_RELNAME|10 ' +\n 'TG_TABLE_NAME|10 TG_TABLE_SCHEMA|10 TG_NARGS|10 TG_ARGV|10 TG_EVENT|10 TG_TAG|10 ' +\n // get diagnostics\n 'ROW_COUNT RESULT_OID|10 PG_CONTEXT|10 RETURNED_SQLSTATE COLUMN_NAME CONSTRAINT_NAME ' +\n 'PG_DATATYPE_NAME|10 MESSAGE_TEXT TABLE_NAME SCHEMA_NAME PG_EXCEPTION_DETAIL|10 ' +\n 'PG_EXCEPTION_HINT|10 PG_EXCEPTION_CONTEXT|10 ';\n\n var PLPGSQL_EXCEPTIONS =\n // exceptions https://www.postgresql.org/docs/current/static/errcodes-appendix.html\n 'SQLSTATE SQLERRM|10 ' +\n 'SUCCESSFUL_COMPLETION WARNING DYNAMIC_RESULT_SETS_RETURNED IMPLICIT_ZERO_BIT_PADDING ' +\n 'NULL_VALUE_ELIMINATED_IN_SET_FUNCTION PRIVILEGE_NOT_GRANTED PRIVILEGE_NOT_REVOKED ' +\n 'STRING_DATA_RIGHT_TRUNCATION DEPRECATED_FEATURE NO_DATA NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED ' +\n 'SQL_STATEMENT_NOT_YET_COMPLETE CONNECTION_EXCEPTION CONNECTION_DOES_NOT_EXIST CONNECTION_FAILURE ' +\n 'SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION ' +\n 'TRANSACTION_RESOLUTION_UNKNOWN PROTOCOL_VIOLATION TRIGGERED_ACTION_EXCEPTION FEATURE_NOT_SUPPORTED ' +\n 'INVALID_TRANSACTION_INITIATION LOCATOR_EXCEPTION INVALID_LOCATOR_SPECIFICATION INVALID_GRANTOR ' +\n 'INVALID_GRANT_OPERATION INVALID_ROLE_SPECIFICATION DIAGNOSTICS_EXCEPTION ' +\n 'STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER CASE_NOT_FOUND CARDINALITY_VIOLATION ' +\n 'DATA_EXCEPTION ARRAY_SUBSCRIPT_ERROR CHARACTER_NOT_IN_REPERTOIRE DATETIME_FIELD_OVERFLOW ' +\n 'DIVISION_BY_ZERO ERROR_IN_ASSIGNMENT ESCAPE_CHARACTER_CONFLICT INDICATOR_OVERFLOW ' +\n 'INTERVAL_FIELD_OVERFLOW INVALID_ARGUMENT_FOR_LOGARITHM INVALID_ARGUMENT_FOR_NTILE_FUNCTION ' +\n 'INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION INVALID_ARGUMENT_FOR_POWER_FUNCTION ' +\n 'INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION INVALID_CHARACTER_VALUE_FOR_CAST ' +\n 'INVALID_DATETIME_FORMAT INVALID_ESCAPE_CHARACTER INVALID_ESCAPE_OCTET INVALID_ESCAPE_SEQUENCE ' +\n 'NONSTANDARD_USE_OF_ESCAPE_CHARACTER INVALID_INDICATOR_PARAMETER_VALUE INVALID_PARAMETER_VALUE ' +\n 'INVALID_REGULAR_EXPRESSION INVALID_ROW_COUNT_IN_LIMIT_CLAUSE ' +\n 'INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE INVALID_TABLESAMPLE_ARGUMENT INVALID_TABLESAMPLE_REPEAT ' +\n 'INVALID_TIME_ZONE_DISPLACEMENT_VALUE INVALID_USE_OF_ESCAPE_CHARACTER MOST_SPECIFIC_TYPE_MISMATCH ' +\n 'NULL_VALUE_NOT_ALLOWED NULL_VALUE_NO_INDICATOR_PARAMETER NUMERIC_VALUE_OUT_OF_RANGE ' +\n 'SEQUENCE_GENERATOR_LIMIT_EXCEEDED STRING_DATA_LENGTH_MISMATCH STRING_DATA_RIGHT_TRUNCATION ' +\n 'SUBSTRING_ERROR TRIM_ERROR UNTERMINATED_C_STRING ZERO_LENGTH_CHARACTER_STRING ' +\n 'FLOATING_POINT_EXCEPTION INVALID_TEXT_REPRESENTATION INVALID_BINARY_REPRESENTATION ' +\n 'BAD_COPY_FILE_FORMAT UNTRANSLATABLE_CHARACTER NOT_AN_XML_DOCUMENT INVALID_XML_DOCUMENT ' +\n 'INVALID_XML_CONTENT INVALID_XML_COMMENT INVALID_XML_PROCESSING_INSTRUCTION ' +\n 'INTEGRITY_CONSTRAINT_VIOLATION RESTRICT_VIOLATION NOT_NULL_VIOLATION FOREIGN_KEY_VIOLATION ' +\n 'UNIQUE_VIOLATION CHECK_VIOLATION EXCLUSION_VIOLATION INVALID_CURSOR_STATE ' +\n 'INVALID_TRANSACTION_STATE ACTIVE_SQL_TRANSACTION BRANCH_TRANSACTION_ALREADY_ACTIVE ' +\n 'HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION ' +\n 'INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION ' +\n 'NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION READ_ONLY_SQL_TRANSACTION ' +\n 'SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED NO_ACTIVE_SQL_TRANSACTION ' +\n 'IN_FAILED_SQL_TRANSACTION IDLE_IN_TRANSACTION_SESSION_TIMEOUT INVALID_SQL_STATEMENT_NAME ' +\n 'TRIGGERED_DATA_CHANGE_VIOLATION INVALID_AUTHORIZATION_SPECIFICATION INVALID_PASSWORD ' +\n 'DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST DEPENDENT_OBJECTS_STILL_EXIST ' +\n 'INVALID_TRANSACTION_TERMINATION SQL_ROUTINE_EXCEPTION FUNCTION_EXECUTED_NO_RETURN_STATEMENT ' +\n 'MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED ' +\n 'READING_SQL_DATA_NOT_PERMITTED INVALID_CURSOR_NAME EXTERNAL_ROUTINE_EXCEPTION ' +\n 'CONTAINING_SQL_NOT_PERMITTED MODIFYING_SQL_DATA_NOT_PERMITTED ' +\n 'PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED ' +\n 'EXTERNAL_ROUTINE_INVOCATION_EXCEPTION INVALID_SQLSTATE_RETURNED NULL_VALUE_NOT_ALLOWED ' +\n 'TRIGGER_PROTOCOL_VIOLATED SRF_PROTOCOL_VIOLATED EVENT_TRIGGER_PROTOCOL_VIOLATED ' +\n 'SAVEPOINT_EXCEPTION INVALID_SAVEPOINT_SPECIFICATION INVALID_CATALOG_NAME ' +\n 'INVALID_SCHEMA_NAME TRANSACTION_ROLLBACK TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION ' +\n 'SERIALIZATION_FAILURE STATEMENT_COMPLETION_UNKNOWN DEADLOCK_DETECTED ' +\n 'SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION SYNTAX_ERROR INSUFFICIENT_PRIVILEGE CANNOT_COERCE ' +\n 'GROUPING_ERROR WINDOWING_ERROR INVALID_RECURSION INVALID_FOREIGN_KEY INVALID_NAME ' +\n 'NAME_TOO_LONG RESERVED_NAME DATATYPE_MISMATCH INDETERMINATE_DATATYPE COLLATION_MISMATCH ' +\n 'INDETERMINATE_COLLATION WRONG_OBJECT_TYPE GENERATED_ALWAYS UNDEFINED_COLUMN ' +\n 'UNDEFINED_FUNCTION UNDEFINED_TABLE UNDEFINED_PARAMETER UNDEFINED_OBJECT ' +\n 'DUPLICATE_COLUMN DUPLICATE_CURSOR DUPLICATE_DATABASE DUPLICATE_FUNCTION ' +\n 'DUPLICATE_PREPARED_STATEMENT DUPLICATE_SCHEMA DUPLICATE_TABLE DUPLICATE_ALIAS ' +\n 'DUPLICATE_OBJECT AMBIGUOUS_COLUMN AMBIGUOUS_FUNCTION AMBIGUOUS_PARAMETER AMBIGUOUS_ALIAS ' +\n 'INVALID_COLUMN_REFERENCE INVALID_COLUMN_DEFINITION INVALID_CURSOR_DEFINITION ' +\n 'INVALID_DATABASE_DEFINITION INVALID_FUNCTION_DEFINITION ' +\n 'INVALID_PREPARED_STATEMENT_DEFINITION INVALID_SCHEMA_DEFINITION INVALID_TABLE_DEFINITION ' +\n 'INVALID_OBJECT_DEFINITION WITH_CHECK_OPTION_VIOLATION INSUFFICIENT_RESOURCES DISK_FULL ' +\n 'OUT_OF_MEMORY TOO_MANY_CONNECTIONS CONFIGURATION_LIMIT_EXCEEDED PROGRAM_LIMIT_EXCEEDED ' +\n 'STATEMENT_TOO_COMPLEX TOO_MANY_COLUMNS TOO_MANY_ARGUMENTS OBJECT_NOT_IN_PREREQUISITE_STATE ' +\n 'OBJECT_IN_USE CANT_CHANGE_RUNTIME_PARAM LOCK_NOT_AVAILABLE OPERATOR_INTERVENTION ' +\n 'QUERY_CANCELED ADMIN_SHUTDOWN CRASH_SHUTDOWN CANNOT_CONNECT_NOW DATABASE_DROPPED ' +\n 'SYSTEM_ERROR IO_ERROR UNDEFINED_FILE DUPLICATE_FILE SNAPSHOT_TOO_OLD CONFIG_FILE_ERROR ' +\n 'LOCK_FILE_EXISTS FDW_ERROR FDW_COLUMN_NAME_NOT_FOUND FDW_DYNAMIC_PARAMETER_VALUE_NEEDED ' +\n 'FDW_FUNCTION_SEQUENCE_ERROR FDW_INCONSISTENT_DESCRIPTOR_INFORMATION ' +\n 'FDW_INVALID_ATTRIBUTE_VALUE FDW_INVALID_COLUMN_NAME FDW_INVALID_COLUMN_NUMBER ' +\n 'FDW_INVALID_DATA_TYPE FDW_INVALID_DATA_TYPE_DESCRIPTORS ' +\n 'FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER FDW_INVALID_HANDLE FDW_INVALID_OPTION_INDEX ' +\n 'FDW_INVALID_OPTION_NAME FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH ' +\n 'FDW_INVALID_STRING_FORMAT FDW_INVALID_USE_OF_NULL_POINTER FDW_TOO_MANY_HANDLES ' +\n 'FDW_OUT_OF_MEMORY FDW_NO_SCHEMAS FDW_OPTION_NAME_NOT_FOUND FDW_REPLY_HANDLE ' +\n 'FDW_SCHEMA_NOT_FOUND FDW_TABLE_NOT_FOUND FDW_UNABLE_TO_CREATE_EXECUTION ' +\n 'FDW_UNABLE_TO_CREATE_REPLY FDW_UNABLE_TO_ESTABLISH_CONNECTION PLPGSQL_ERROR ' +\n 'RAISE_EXCEPTION NO_DATA_FOUND TOO_MANY_ROWS ASSERT_FAILURE INTERNAL_ERROR DATA_CORRUPTED ' +\n 'INDEX_CORRUPTED ';\n\n var FUNCTIONS =\n // https://www.postgresql.org/docs/11/static/functions-aggregate.html\n 'ARRAY_AGG AVG BIT_AND BIT_OR BOOL_AND BOOL_OR COUNT EVERY JSON_AGG JSONB_AGG JSON_OBJECT_AGG ' +\n 'JSONB_OBJECT_AGG MAX MIN MODE STRING_AGG SUM XMLAGG ' +\n 'CORR COVAR_POP COVAR_SAMP REGR_AVGX REGR_AVGY REGR_COUNT REGR_INTERCEPT REGR_R2 REGR_SLOPE ' +\n 'REGR_SXX REGR_SXY REGR_SYY STDDEV STDDEV_POP STDDEV_SAMP VARIANCE VAR_POP VAR_SAMP ' +\n 'PERCENTILE_CONT PERCENTILE_DISC ' +\n // https://www.postgresql.org/docs/11/static/functions-window.html\n 'ROW_NUMBER RANK DENSE_RANK PERCENT_RANK CUME_DIST NTILE LAG LEAD FIRST_VALUE LAST_VALUE NTH_VALUE ' +\n // https://www.postgresql.org/docs/11/static/functions-comparison.html\n 'NUM_NONNULLS NUM_NULLS ' +\n // https://www.postgresql.org/docs/11/static/functions-math.html\n 'ABS CBRT CEIL CEILING DEGREES DIV EXP FLOOR LN LOG MOD PI POWER RADIANS ROUND SCALE SIGN SQRT ' +\n 'TRUNC WIDTH_BUCKET ' +\n 'RANDOM SETSEED ' +\n 'ACOS ACOSD ASIN ASIND ATAN ATAND ATAN2 ATAN2D COS COSD COT COTD SIN SIND TAN TAND ' +\n // https://www.postgresql.org/docs/11/static/functions-string.html\n 'BIT_LENGTH CHAR_LENGTH CHARACTER_LENGTH LOWER OCTET_LENGTH OVERLAY POSITION SUBSTRING TREAT TRIM UPPER ' +\n 'ASCII BTRIM CHR CONCAT CONCAT_WS CONVERT CONVERT_FROM CONVERT_TO DECODE ENCODE INITCAP' +\n 'LEFT LENGTH LPAD LTRIM MD5 PARSE_IDENT PG_CLIENT_ENCODING QUOTE_IDENT|10 QUOTE_LITERAL|10 ' +\n 'QUOTE_NULLABLE|10 REGEXP_MATCH REGEXP_MATCHES REGEXP_REPLACE REGEXP_SPLIT_TO_ARRAY ' +\n 'REGEXP_SPLIT_TO_TABLE REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPLIT_PART STRPOS SUBSTR ' +\n 'TO_ASCII TO_HEX TRANSLATE ' +\n // https://www.postgresql.org/docs/11/static/functions-binarystring.html\n 'OCTET_LENGTH GET_BIT GET_BYTE SET_BIT SET_BYTE ' +\n // https://www.postgresql.org/docs/11/static/functions-formatting.html\n 'TO_CHAR TO_DATE TO_NUMBER TO_TIMESTAMP ' +\n // https://www.postgresql.org/docs/11/static/functions-datetime.html\n 'AGE CLOCK_TIMESTAMP|10 DATE_PART DATE_TRUNC ISFINITE JUSTIFY_DAYS JUSTIFY_HOURS JUSTIFY_INTERVAL ' +\n 'MAKE_DATE MAKE_INTERVAL|10 MAKE_TIME MAKE_TIMESTAMP|10 MAKE_TIMESTAMPTZ|10 NOW STATEMENT_TIMESTAMP|10 ' +\n 'TIMEOFDAY TRANSACTION_TIMESTAMP|10 ' +\n // https://www.postgresql.org/docs/11/static/functions-enum.html\n 'ENUM_FIRST ENUM_LAST ENUM_RANGE ' +\n // https://www.postgresql.org/docs/11/static/functions-geometry.html\n 'AREA CENTER DIAMETER HEIGHT ISCLOSED ISOPEN NPOINTS PCLOSE POPEN RADIUS WIDTH ' +\n 'BOX BOUND_BOX CIRCLE LINE LSEG PATH POLYGON ' +\n // https://www.postgresql.org/docs/11/static/functions-net.html\n 'ABBREV BROADCAST HOST HOSTMASK MASKLEN NETMASK NETWORK SET_MASKLEN TEXT INET_SAME_FAMILY' +\n 'INET_MERGE MACADDR8_SET7BIT ' +\n // https://www.postgresql.org/docs/11/static/functions-textsearch.html\n 'ARRAY_TO_TSVECTOR GET_CURRENT_TS_CONFIG NUMNODE PLAINTO_TSQUERY PHRASETO_TSQUERY WEBSEARCH_TO_TSQUERY ' +\n 'QUERYTREE SETWEIGHT STRIP TO_TSQUERY TO_TSVECTOR JSON_TO_TSVECTOR JSONB_TO_TSVECTOR TS_DELETE ' +\n 'TS_FILTER TS_HEADLINE TS_RANK TS_RANK_CD TS_REWRITE TSQUERY_PHRASE TSVECTOR_TO_ARRAY ' +\n 'TSVECTOR_UPDATE_TRIGGER TSVECTOR_UPDATE_TRIGGER_COLUMN ' +\n // https://www.postgresql.org/docs/11/static/functions-xml.html\n 'XMLCOMMENT XMLCONCAT XMLELEMENT XMLFOREST XMLPI XMLROOT ' +\n 'XMLEXISTS XML_IS_WELL_FORMED XML_IS_WELL_FORMED_DOCUMENT XML_IS_WELL_FORMED_CONTENT ' +\n 'XPATH XPATH_EXISTS XMLTABLE XMLNAMESPACES ' +\n 'TABLE_TO_XML TABLE_TO_XMLSCHEMA TABLE_TO_XML_AND_XMLSCHEMA ' +\n 'QUERY_TO_XML QUERY_TO_XMLSCHEMA QUERY_TO_XML_AND_XMLSCHEMA ' +\n 'CURSOR_TO_XML CURSOR_TO_XMLSCHEMA ' +\n 'SCHEMA_TO_XML SCHEMA_TO_XMLSCHEMA SCHEMA_TO_XML_AND_XMLSCHEMA ' +\n 'DATABASE_TO_XML DATABASE_TO_XMLSCHEMA DATABASE_TO_XML_AND_XMLSCHEMA ' +\n 'XMLATTRIBUTES ' +\n // https://www.postgresql.org/docs/11/static/functions-json.html\n 'TO_JSON TO_JSONB ARRAY_TO_JSON ROW_TO_JSON JSON_BUILD_ARRAY JSONB_BUILD_ARRAY JSON_BUILD_OBJECT ' +\n 'JSONB_BUILD_OBJECT JSON_OBJECT JSONB_OBJECT JSON_ARRAY_LENGTH JSONB_ARRAY_LENGTH JSON_EACH ' +\n 'JSONB_EACH JSON_EACH_TEXT JSONB_EACH_TEXT JSON_EXTRACT_PATH JSONB_EXTRACT_PATH ' +\n 'JSON_OBJECT_KEYS JSONB_OBJECT_KEYS JSON_POPULATE_RECORD JSONB_POPULATE_RECORD JSON_POPULATE_RECORDSET ' +\n 'JSONB_POPULATE_RECORDSET JSON_ARRAY_ELEMENTS JSONB_ARRAY_ELEMENTS JSON_ARRAY_ELEMENTS_TEXT ' +\n 'JSONB_ARRAY_ELEMENTS_TEXT JSON_TYPEOF JSONB_TYPEOF JSON_TO_RECORD JSONB_TO_RECORD JSON_TO_RECORDSET ' +\n 'JSONB_TO_RECORDSET JSON_STRIP_NULLS JSONB_STRIP_NULLS JSONB_SET JSONB_INSERT JSONB_PRETTY ' +\n // https://www.postgresql.org/docs/11/static/functions-sequence.html\n 'CURRVAL LASTVAL NEXTVAL SETVAL ' +\n // https://www.postgresql.org/docs/11/static/functions-conditional.html\n 'COALESCE NULLIF GREATEST LEAST ' +\n // https://www.postgresql.org/docs/11/static/functions-array.html\n 'ARRAY_APPEND ARRAY_CAT ARRAY_NDIMS ARRAY_DIMS ARRAY_FILL ARRAY_LENGTH ARRAY_LOWER ARRAY_POSITION ' +\n 'ARRAY_POSITIONS ARRAY_PREPEND ARRAY_REMOVE ARRAY_REPLACE ARRAY_TO_STRING ARRAY_UPPER CARDINALITY ' +\n 'STRING_TO_ARRAY UNNEST ' +\n // https://www.postgresql.org/docs/11/static/functions-range.html\n 'ISEMPTY LOWER_INC UPPER_INC LOWER_INF UPPER_INF RANGE_MERGE ' +\n // https://www.postgresql.org/docs/11/static/functions-srf.html\n 'GENERATE_SERIES GENERATE_SUBSCRIPTS ' +\n // https://www.postgresql.org/docs/11/static/functions-info.html\n 'CURRENT_DATABASE CURRENT_QUERY CURRENT_SCHEMA|10 CURRENT_SCHEMAS|10 INET_CLIENT_ADDR INET_CLIENT_PORT ' +\n 'INET_SERVER_ADDR INET_SERVER_PORT ROW_SECURITY_ACTIVE FORMAT_TYPE ' +\n 'TO_REGCLASS TO_REGPROC TO_REGPROCEDURE TO_REGOPER TO_REGOPERATOR TO_REGTYPE TO_REGNAMESPACE TO_REGROLE ' +\n 'COL_DESCRIPTION OBJ_DESCRIPTION SHOBJ_DESCRIPTION ' +\n 'TXID_CURRENT TXID_CURRENT_IF_ASSIGNED TXID_CURRENT_SNAPSHOT TXID_SNAPSHOT_XIP TXID_SNAPSHOT_XMAX ' +\n 'TXID_SNAPSHOT_XMIN TXID_VISIBLE_IN_SNAPSHOT TXID_STATUS ' +\n // https://www.postgresql.org/docs/11/static/functions-admin.html\n 'CURRENT_SETTING SET_CONFIG BRIN_SUMMARIZE_NEW_VALUES BRIN_SUMMARIZE_RANGE BRIN_DESUMMARIZE_RANGE ' +\n 'GIN_CLEAN_PENDING_LIST ' +\n // https://www.postgresql.org/docs/11/static/functions-trigger.html\n 'SUPPRESS_REDUNDANT_UPDATES_TRIGGER ' +\n // ihttps://www.postgresql.org/docs/devel/static/lo-funcs.html\n 'LO_FROM_BYTEA LO_PUT LO_GET LO_CREAT LO_CREATE LO_UNLINK LO_IMPORT LO_EXPORT LOREAD LOWRITE ' +\n //\n 'GROUPING CAST ';\n\n var FUNCTIONS_RE =\n FUNCTIONS.trim()\n .split(' ')\n .map( function(val) { return val.split('|')[0]; } )\n .join('|');\n\n return {\n aliases: ['postgres','postgresql'],\n case_insensitive: true,\n keywords: {\n keyword:\n SQL_KW + PLPGSQL_KW + ROLE_ATTRS,\n built_in:\n SQL_BI + PLPGSQL_BI + PLPGSQL_EXCEPTIONS,\n },\n // Forbid some cunstructs from other languages to improve autodetect. In fact\n // \"[a-z]:\" is legal (as part of array slice), but improbabal.\n illegal: /:==|\\W\\s*\\(\\*|(^|\\s)\\$[a-z]|{{|[a-z]:\\s*$|\\.\\.\\.|TO:|DO:/,\n contains: [\n // special handling of some words, which are reserved only in some contexts\n {\n className: 'keyword',\n variants: [\n { begin: /\\bTEXT\\s*SEARCH\\b/ },\n { begin: /\\b(PRIMARY|FOREIGN|FOR(\\s+NO)?)\\s+KEY\\b/ },\n { begin: /\\bPARALLEL\\s+(UNSAFE|RESTRICTED|SAFE)\\b/ },\n { begin: /\\bSTORAGE\\s+(PLAIN|EXTERNAL|EXTENDED|MAIN)\\b/ },\n { begin: /\\bMATCH\\s+(FULL|PARTIAL|SIMPLE)\\b/ },\n { begin: /\\bNULLS\\s+(FIRST|LAST)\\b/ },\n { begin: /\\bEVENT\\s+TRIGGER\\b/ },\n { begin: /\\b(MAPPING|OR)\\s+REPLACE\\b/ },\n { begin: /\\b(FROM|TO)\\s+(PROGRAM|STDIN|STDOUT)\\b/ },\n { begin: /\\b(SHARE|EXCLUSIVE)\\s+MODE\\b/ },\n { begin: /\\b(LEFT|RIGHT)\\s+(OUTER\\s+)?JOIN\\b/ },\n { begin: /\\b(FETCH|MOVE)\\s+(NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE|FORWARD|BACKWARD)\\b/ },\n { begin: /\\bPRESERVE\\s+ROWS\\b/ },\n { begin: /\\bDISCARD\\s+PLANS\\b/ },\n { begin: /\\bREFERENCING\\s+(OLD|NEW)\\b/ },\n { begin: /\\bSKIP\\s+LOCKED\\b/ },\n { begin: /\\bGROUPING\\s+SETS\\b/ },\n { begin: /\\b(BINARY|INSENSITIVE|SCROLL|NO\\s+SCROLL)\\s+(CURSOR|FOR)\\b/ },\n { begin: /\\b(WITH|WITHOUT)\\s+HOLD\\b/ },\n { begin: /\\bWITH\\s+(CASCADED|LOCAL)\\s+CHECK\\s+OPTION\\b/ },\n { begin: /\\bEXCLUDE\\s+(TIES|NO\\s+OTHERS)\\b/ },\n { begin: /\\bFORMAT\\s+(TEXT|XML|JSON|YAML)\\b/ },\n { begin: /\\bSET\\s+((SESSION|LOCAL)\\s+)?NAMES\\b/ },\n { begin: /\\bIS\\s+(NOT\\s+)?UNKNOWN\\b/ },\n { begin: /\\bSECURITY\\s+LABEL\\b/ },\n { begin: /\\bSTANDALONE\\s+(YES|NO|NO\\s+VALUE)\\b/ },\n { begin: /\\bWITH\\s+(NO\\s+)?DATA\\b/ },\n { begin: /\\b(FOREIGN|SET)\\s+DATA\\b/ },\n { begin: /\\bSET\\s+(CATALOG|CONSTRAINTS)\\b/ },\n { begin: /\\b(WITH|FOR)\\s+ORDINALITY\\b/ },\n { begin: /\\bIS\\s+(NOT\\s+)?DOCUMENT\\b/ },\n { begin: /\\bXML\\s+OPTION\\s+(DOCUMENT|CONTENT)\\b/ },\n { begin: /\\b(STRIP|PRESERVE)\\s+WHITESPACE\\b/ },\n { begin: /\\bNO\\s+(ACTION|MAXVALUE|MINVALUE)\\b/ },\n { begin: /\\bPARTITION\\s+BY\\s+(RANGE|LIST|HASH)\\b/ },\n { begin: /\\bAT\\s+TIME\\s+ZONE\\b/ },\n { begin: /\\bGRANTED\\s+BY\\b/ },\n { begin: /\\bRETURN\\s+(QUERY|NEXT)\\b/ },\n { begin: /\\b(ATTACH|DETACH)\\s+PARTITION\\b/ },\n { begin: /\\bFORCE\\s+ROW\\s+LEVEL\\s+SECURITY\\b/ },\n { begin: /\\b(INCLUDING|EXCLUDING)\\s+(COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|INDEXES|STATISTICS|STORAGE|ALL)\\b/ },\n { begin: /\\bAS\\s+(ASSIGNMENT|IMPLICIT|PERMISSIVE|RESTRICTIVE|ENUM|RANGE)\\b/ }\n ]\n },\n // functions named as keywords, followed by '('\n {\n begin: /\\b(FORMAT|FAMILY|VERSION)\\s*\\(/,\n //keywords: { built_in: 'FORMAT FAMILY VERSION' }\n },\n // INCLUDE ( ... ) in index_parameters in CREATE TABLE\n {\n begin: /\\bINCLUDE\\s*\\(/,\n keywords: 'INCLUDE'\n },\n // not highlight RANGE if not in frame_clause (not 100% correct, but seems satisfactory)\n {\n begin: /\\bRANGE(?!\\s*(BETWEEN|UNBOUNDED|CURRENT|[-0-9]+))/\n },\n // disable highlighting in commands CREATE AGGREGATE/COLLATION/DATABASE/OPERTOR/TEXT SEARCH .../TYPE\n // and in PL/pgSQL RAISE ... USING\n {\n begin: /\\b(VERSION|OWNER|TEMPLATE|TABLESPACE|CONNECTION\\s+LIMIT|PROCEDURE|RESTRICT|JOIN|PARSER|COPY|START|END|COLLATION|INPUT|ANALYZE|STORAGE|LIKE|DEFAULT|DELIMITER|ENCODING|COLUMN|CONSTRAINT|TABLE|SCHEMA)\\s*=/\n },\n // PG_smth; HAS_some_PRIVILEGE\n {\n //className: 'built_in',\n begin: /\\b(PG_\\w+?|HAS_[A-Z_]+_PRIVILEGE)\\b/,\n relevance: 10\n },\n // extract\n {\n begin: /\\bEXTRACT\\s*\\(/,\n end: /\\bFROM\\b/,\n returnEnd: true,\n keywords: {\n //built_in: 'EXTRACT',\n type: 'CENTURY DAY DECADE DOW DOY EPOCH HOUR ISODOW ISOYEAR MICROSECONDS ' +\n 'MILLENNIUM MILLISECONDS MINUTE MONTH QUARTER SECOND TIMEZONE TIMEZONE_HOUR ' +\n 'TIMEZONE_MINUTE WEEK YEAR'\n }\n },\n // xmlelement, xmlpi - special NAME\n {\n begin: /\\b(XMLELEMENT|XMLPI)\\s*\\(\\s*NAME/,\n keywords: {\n //built_in: 'XMLELEMENT XMLPI',\n keyword: 'NAME'\n }\n },\n // xmlparse, xmlserialize\n {\n begin: /\\b(XMLPARSE|XMLSERIALIZE)\\s*\\(\\s*(DOCUMENT|CONTENT)/,\n keywords: {\n //built_in: 'XMLPARSE XMLSERIALIZE',\n keyword: 'DOCUMENT CONTENT'\n }\n },\n // Sequences. We actually skip everything between CACHE|INCREMENT|MAXVALUE|MINVALUE and\n // nearest following numeric constant. Without with trick we find a lot of \"keywords\"\n // in 'avrasm' autodetection test...\n {\n beginKeywords: 'CACHE INCREMENT MAXVALUE MINVALUE',\n end: hljs.C_NUMBER_RE,\n returnEnd: true,\n keywords: 'BY CACHE INCREMENT MAXVALUE MINVALUE'\n },\n // WITH|WITHOUT TIME ZONE as part of datatype\n {\n className: 'type',\n begin: /\\b(WITH|WITHOUT)\\s+TIME\\s+ZONE\\b/\n },\n // INTERVAL optional fields\n {\n className: 'type',\n begin: /\\bINTERVAL\\s+(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)(\\s+TO\\s+(MONTH|HOUR|MINUTE|SECOND))?\\b/\n },\n // Pseudo-types which allowed only as return type\n {\n begin: /\\bRETURNS\\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\\b/,\n keywords: {\n keyword: 'RETURNS',\n type: 'LANGUAGE_HANDLER TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER TSM_HANDLER'\n }\n },\n // Known functions - only when followed by '('\n {\n begin: '\\\\b(' + FUNCTIONS_RE + ')\\\\s*\\\\('\n //keywords: { built_in: FUNCTIONS }\n },\n // Types\n {\n begin: '\\\\.(' + TYPES_RE + ')\\\\b' // prevent highlight as type, say, 'oid' in 'pgclass.oid'\n },\n {\n begin: '\\\\b(' + TYPES_RE + ')\\\\s+PATH\\\\b', // in XMLTABLE\n keywords: {\n keyword: 'PATH', // hopefully no one would use PATH type in XMLTABLE...\n type: TYPES.replace('PATH ','')\n }\n },\n {\n className: 'type',\n begin: '\\\\b(' + TYPES_RE + ')\\\\b'\n },\n // Strings, see https://www.postgresql.org/docs/11/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS\n {\n className: 'string',\n begin: '\\'', end: '\\'',\n contains: [{begin: '\\'\\''}]\n },\n {\n className: 'string',\n begin: '(e|E|u&|U&)\\'', end: '\\'',\n contains: [{begin: '\\\\\\\\.'}],\n relevance: 10\n },\n {\n begin: DOLLAR_STRING,\n endSameAsBegin: true,\n contains: [\n {\n // actually we want them all except SQL; listed are those with known implementations\n // and XML + JSON just in case\n subLanguage: ['pgsql','perl','python','tcl','r','lua','java','php','ruby','bash','scheme','xml','json'],\n endsWithParent: true\n }\n ]\n },\n // identifiers in quotes\n {\n begin: '\"', end: '\"',\n contains: [{begin: '\"\"'}]\n },\n // numbers\n hljs.C_NUMBER_MODE,\n // comments\n hljs.C_BLOCK_COMMENT_MODE,\n COMMENT_MODE,\n // PL/pgSQL staff\n // %ROWTYPE, %TYPE, $n\n {\n className: 'meta',\n variants: [\n {begin: '%(ROW)?TYPE', relevance: 10}, // %TYPE, %ROWTYPE\n {begin: '\\\\$\\\\d+'}, // $n\n {begin: '^#\\\\w', end: '$'} // #compiler option\n ]\n },\n // <<labeles>>\n {\n className: 'symbol',\n begin: LABEL,\n relevance: 10\n }\n ]\n };\n};","module.exports = function(hljs) {\n var VARIABLE = {\n begin: '\\\\$+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*'\n };\n var PREPROCESSOR = {\n className: 'meta', begin: /<\\?(php)?|\\?>/\n };\n var STRING = {\n className: 'string',\n contains: [hljs.BACKSLASH_ESCAPE, PREPROCESSOR],\n variants: [\n {\n begin: 'b\"', end: '\"'\n },\n {\n begin: 'b\\'', end: '\\''\n },\n hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null})\n ]\n };\n var NUMBER = {variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]};\n return {\n aliases: ['php', 'php3', 'php4', 'php5', 'php6', 'php7'],\n case_insensitive: true,\n keywords:\n 'and include_once list abstract global private echo interface as static endswitch ' +\n 'array null if endwhile or const for endforeach self var while isset public ' +\n 'protected exit foreach throw elseif include __FILE__ empty require_once do xor ' +\n 'return parent clone use __CLASS__ __LINE__ else break print eval new ' +\n 'catch __METHOD__ case exception default die require __FUNCTION__ ' +\n 'enddeclare final try switch continue endfor endif declare unset true false ' +\n 'trait goto instanceof insteadof __DIR__ __NAMESPACE__ ' +\n 'yield finally',\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.COMMENT('//', '$', {contains: [PREPROCESSOR]}),\n hljs.COMMENT(\n '/\\\\*',\n '\\\\*/',\n {\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n }\n ]\n }\n ),\n hljs.COMMENT(\n '__halt_compiler.+?;',\n false,\n {\n endsWithParent: true,\n keywords: '__halt_compiler',\n lexemes: hljs.UNDERSCORE_IDENT_RE\n }\n ),\n {\n className: 'string',\n begin: /<<<['\"]?\\w+['\"]?$/, end: /^\\w+;?$/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n {\n className: 'subst',\n variants: [\n {begin: /\\$\\w+/},\n {begin: /\\{\\$/, end: /\\}/}\n ]\n }\n ]\n },\n PREPROCESSOR,\n {\n className: 'keyword', begin: /\\$this\\b/\n },\n VARIABLE,\n {\n // swallow composed identifiers to avoid parsing them as keywords\n begin: /(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/\n },\n {\n className: 'function',\n beginKeywords: 'function', end: /[;{]/, excludeEnd: true,\n illegal: '\\\\$|\\\\[|%',\n contains: [\n hljs.UNDERSCORE_TITLE_MODE,\n {\n className: 'params',\n begin: '\\\\(', end: '\\\\)',\n contains: [\n 'self',\n VARIABLE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n NUMBER\n ]\n }\n ]\n },\n {\n className: 'class',\n beginKeywords: 'class interface', end: '{', excludeEnd: true,\n illegal: /[:\\(\\$\"]/,\n contains: [\n {beginKeywords: 'extends implements'},\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n {\n beginKeywords: 'namespace', end: ';',\n illegal: /[\\.']/,\n contains: [hljs.UNDERSCORE_TITLE_MODE]\n },\n {\n beginKeywords: 'use', end: ';',\n contains: [hljs.UNDERSCORE_TITLE_MODE]\n },\n {\n begin: '=>' // No markup, just a relevance booster\n },\n STRING,\n NUMBER\n ]\n };\n};","module.exports = function(hljs) {\n return {\n disableAutodetect: true\n };\n};","module.exports = function(hljs){\n\n var TYPES =\n [\"string\", \"char\", \"byte\", \"int\", \"long\", \"bool\", \"decimal\", \"single\",\n \"double\", \"DateTime\", \"xml\", \"array\", \"hashtable\", \"void\"];\n\n // https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx\n var VALID_VERBS =\n 'Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|' +\n 'Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|' +\n 'Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|' +\n 'Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|' +\n 'ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|' +\n 'Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|' +\n 'Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|' +\n 'Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|' +\n 'Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|' +\n 'Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|' +\n 'Unprotect|Use|ForEach|Sort|Tee|Where';\n\n var COMPARISON_OPERATORS =\n '-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|' +\n '-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|' +\n '-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|' +\n '-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|' +\n '-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|' +\n '-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|' +\n '-split|-wildcard|-xor';\n\n var KEYWORDS = {\n keyword: 'if else foreach return do while until elseif begin for trap data dynamicparam ' +\n 'end break throw param continue finally in switch exit filter try process catch ' +\n 'hidden static parameter'\n // TODO: 'validate[A-Z]+' can't work in keywords\n };\n\n var TITLE_NAME_RE = /\\w[\\w\\d]*((-)[\\w\\d]+)*/;\n\n var BACKTICK_ESCAPE = {\n begin: '`[\\\\s\\\\S]',\n relevance: 0\n };\n\n var VAR = {\n className: 'variable',\n variants: [\n { begin: /\\$\\B/ },\n { className: 'keyword', begin: /\\$this/ },\n { begin: /\\$[\\w\\d][\\w\\d_:]*/ }\n ]\n };\n\n var LITERAL = {\n className: 'literal',\n begin: /\\$(null|true|false)\\b/\n };\n\n var QUOTE_STRING = {\n className: \"string\",\n variants: [{ begin: /\"/, end: /\"/ }, { begin: /@\"/, end: /^\"@/ }],\n contains: [\n BACKTICK_ESCAPE,\n VAR,\n {\n className: 'variable',\n begin: /\\$[A-z]/, end: /[^A-z]/\n }\n ]\n };\n\n var APOS_STRING = {\n className: 'string',\n variants: [\n { begin: /'/, end: /'/ },\n { begin: /@'/, end: /^'@/ }\n ]\n };\n\n var PS_HELPTAGS = {\n className: \"doctag\",\n variants: [\n /* no paramater help tags */\n {\n begin: /\\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/\n },\n /* one parameter help tags */\n { begin: /\\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\\s+\\S+/ }\n ]\n };\n\n var PS_COMMENT = hljs.inherit(\n hljs.COMMENT(null, null),\n {\n variants: [\n /* single-line comment */\n { begin: /#/, end: /$/ },\n /* multi-line comment */\n { begin: /<#/, end: /#>/ }\n ],\n contains: [PS_HELPTAGS]\n }\n );\n\n var CMDLETS = {\n className: 'built_in',\n variants: [\n { begin: '('.concat(VALID_VERBS, ')+(-)[\\\\w\\\\d]+') }\n ]\n };\n\n var PS_CLASS = {\n className: 'class',\n beginKeywords: 'class enum', end: /\\s*[{]/, excludeEnd: true,\n relevance: 0,\n contains: [hljs.TITLE_MODE]\n };\n\n var PS_FUNCTION = {\n className: 'function',\n begin: /function\\s+/, end: /\\s*\\{|$/,\n excludeEnd: true,\n returnBegin: true,\n relevance: 0,\n contains: [\n { begin: \"function\", relevance: 0, className: \"keyword\" },\n { className: \"title\",\n begin: TITLE_NAME_RE, relevance:0 },\n { begin: /\\(/, end: /\\)/, className: \"params\",\n relevance: 0,\n contains: [VAR] }\n // CMDLETS\n ]\n };\n\n // Using statment, plus type, plus assembly name.\n var PS_USING = {\n begin: /using\\s/, end: /$/,\n returnBegin: true,\n contains: [\n QUOTE_STRING,\n APOS_STRING,\n { className: 'keyword', begin: /(using|assembly|command|module|namespace|type)/ }\n ]\n };\n\n // Comperison operators & function named parameters.\n var PS_ARGUMENTS = {\n variants: [\n // PS literals are pretty verbose so it's a good idea to accent them a bit.\n { className: 'operator', begin: '('.concat(COMPARISON_OPERATORS, ')\\\\b') },\n { className: 'literal', begin: /(-)[\\w\\d]+/, relevance:0 }\n ]\n };\n\n var STATIC_MEMBER = {\n className: 'selector-tag',\n begin: /::\\w+\\b/, end: /$/,\n returnBegin: true,\n contains: [\n { className: 'attribute', begin: /\\w+/, endsParent: true }\n ]\n };\n\n var HASH_SIGNS = {\n className: 'selector-tag',\n begin: /\\@\\B/,\n relevance: 0\n };\n\n var PS_NEW_OBJECT_TYPE = {\n className: 'built_in',\n begin: /New-Object\\s+\\w/, end: /$/,\n returnBegin: true,\n contains: [\n { begin: /New-Object\\s+/, relevance: 0 },\n { className: 'meta', begin: /([\\w\\.])+/, endsParent: true }\n ]\n };\n\n // It's a very general rule so I'll narrow it a bit with some strict boundaries\n // to avoid any possible false-positive collisions!\n var PS_METHODS = {\n className: 'function',\n begin: /\\[.*\\]\\s*[\\w]+[ ]??\\(/, end: /$/,\n returnBegin: true,\n relevance: 0,\n contains: [\n {\n className: 'keyword', begin: '('.concat(\n KEYWORDS.keyword.toString().replace(/\\s/g, '|'\n ), ')\\\\b'),\n endsParent: true,\n relevance: 0\n },\n hljs.inherit(hljs.TITLE_MODE, { endsParent: true })\n ]\n };\n\n var GENTLEMANS_SET = [\n // STATIC_MEMBER,\n PS_METHODS,\n PS_COMMENT,\n BACKTICK_ESCAPE,\n hljs.NUMBER_MODE,\n QUOTE_STRING,\n APOS_STRING,\n // PS_NEW_OBJECT_TYPE,\n CMDLETS,\n VAR,\n LITERAL,\n HASH_SIGNS\n ];\n\n var PS_TYPE = {\n begin: /\\[/, end: /\\]/,\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0,\n contains: [].concat(\n 'self',\n GENTLEMANS_SET,\n { begin: \"(\" + TYPES.join(\"|\") + \")\", className: \"built_in\", relevance:0 },\n { className: 'type', begin: /[\\.\\w\\d]+/, relevance: 0 }\n )\n };\n\n PS_METHODS.contains.unshift(PS_TYPE)\n\n return {\n aliases: [\"ps\", \"ps1\"],\n lexemes: /-?[A-z\\.\\-]+/,\n case_insensitive: true,\n keywords: KEYWORDS,\n contains: GENTLEMANS_SET.concat(\n PS_CLASS,\n PS_FUNCTION,\n PS_USING,\n PS_ARGUMENTS,\n PS_TYPE\n )\n };\n};","module.exports = function(hljs) {\n\n var ATOM = {\n\n begin: /[a-z][A-Za-z0-9_]*/,\n relevance: 0\n };\n\n var VAR = {\n\n className: 'symbol',\n variants: [\n {begin: /[A-Z][a-zA-Z0-9_]*/},\n {begin: /_[A-Za-z0-9_]*/},\n ],\n relevance: 0\n };\n\n var PARENTED = {\n\n begin: /\\(/,\n end: /\\)/,\n relevance: 0\n };\n\n var LIST = {\n\n begin: /\\[/,\n end: /\\]/\n };\n\n var LINE_COMMENT = {\n\n className: 'comment',\n begin: /%/, end: /$/,\n contains: [hljs.PHRASAL_WORDS_MODE]\n };\n\n var BACKTICK_STRING = {\n\n className: 'string',\n begin: /`/, end: /`/,\n contains: [hljs.BACKSLASH_ESCAPE]\n };\n\n var CHAR_CODE = {\n\n className: 'string', // 0'a etc.\n begin: /0\\'(\\\\\\'|.)/\n };\n\n var SPACE_CODE = {\n\n className: 'string',\n begin: /0\\'\\\\s/ // 0'\\s\n };\n\n var PRED_OP = { // relevance booster\n begin: /:-/\n };\n\n var inner = [\n\n ATOM,\n VAR,\n PARENTED,\n PRED_OP,\n LIST,\n LINE_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n BACKTICK_STRING,\n CHAR_CODE,\n SPACE_CODE,\n hljs.C_NUMBER_MODE\n ];\n\n PARENTED.contains = inner;\n LIST.contains = inner;\n\n return {\n contains: inner.concat([\n {begin: /\\.$/} // relevance booster\n ])\n };\n};","module.exports = function(hljs) {\n var KEYWORDS = {\n keyword:\n 'and elif is global as in if from raise for except finally print import pass return ' +\n 'exec else break not with class assert yield try while continue del or def lambda ' +\n 'async await nonlocal|10',\n built_in:\n 'Ellipsis NotImplemented',\n literal: 'False None True'\n };\n var PROMPT = {\n className: 'meta', begin: /^(>>>|\\.\\.\\.) /\n };\n var SUBST = {\n className: 'subst',\n begin: /\\{/, end: /\\}/,\n keywords: KEYWORDS,\n illegal: /#/\n };\n var LITERAL_BRACKET = {\n begin: /\\{\\{/,\n relevance: 0\n };\n var STRING = {\n className: 'string',\n contains: [hljs.BACKSLASH_ESCAPE],\n variants: [\n {\n begin: /(u|b)?r?'''/, end: /'''/,\n contains: [hljs.BACKSLASH_ESCAPE, PROMPT],\n relevance: 10\n },\n {\n begin: /(u|b)?r?\"\"\"/, end: /\"\"\"/,\n contains: [hljs.BACKSLASH_ESCAPE, PROMPT],\n relevance: 10\n },\n {\n begin: /(fr|rf|f)'''/, end: /'''/,\n contains: [hljs.BACKSLASH_ESCAPE, PROMPT, LITERAL_BRACKET, SUBST]\n },\n {\n begin: /(fr|rf|f)\"\"\"/, end: /\"\"\"/,\n contains: [hljs.BACKSLASH_ESCAPE, PROMPT, LITERAL_BRACKET, SUBST]\n },\n {\n begin: /(u|r|ur)'/, end: /'/,\n relevance: 10\n },\n {\n begin: /(u|r|ur)\"/, end: /\"/,\n relevance: 10\n },\n {\n begin: /(b|br)'/, end: /'/\n },\n {\n begin: /(b|br)\"/, end: /\"/\n },\n {\n begin: /(fr|rf|f)'/, end: /'/,\n contains: [hljs.BACKSLASH_ESCAPE, LITERAL_BRACKET, SUBST]\n },\n {\n begin: /(fr|rf|f)\"/, end: /\"/,\n contains: [hljs.BACKSLASH_ESCAPE, LITERAL_BRACKET, SUBST]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n };\n var NUMBER = {\n className: 'number', relevance: 0,\n variants: [\n {begin: hljs.BINARY_NUMBER_RE + '[lLjJ]?'},\n {begin: '\\\\b(0o[0-7]+)[lLjJ]?'},\n {begin: hljs.C_NUMBER_RE + '[lLjJ]?'}\n ]\n };\n var PARAMS = {\n className: 'params',\n begin: /\\(/, end: /\\)/,\n contains: ['self', PROMPT, NUMBER, STRING, hljs.HASH_COMMENT_MODE]\n };\n SUBST.contains = [STRING, NUMBER, PROMPT];\n return {\n aliases: ['py', 'gyp', 'ipython'],\n keywords: KEYWORDS,\n illegal: /(<\\/|->|\\?)|=>/,\n contains: [\n PROMPT,\n NUMBER,\n // eat \"if\" prior to string so that it won't accidentally be\n // labeled as an f-string as in:\n { beginKeywords: \"if\", relevance: 0 },\n STRING,\n hljs.HASH_COMMENT_MODE,\n {\n variants: [\n {className: 'function', beginKeywords: 'def'},\n {className: 'class', beginKeywords: 'class'}\n ],\n end: /:/,\n illegal: /[${=;\\n,]/,\n contains: [\n hljs.UNDERSCORE_TITLE_MODE,\n PARAMS,\n {\n begin: /->/, endsWithParent: true,\n keywords: 'None'\n }\n ]\n },\n {\n className: 'meta',\n begin: /^[\\t ]*@/, end: /$/\n },\n {\n begin: /\\b(print|exec)\\(/ // don’t highlight keywords-turned-functions in Python 3\n }\n ]\n };\n};","module.exports = function(hljs) {\n var IDENT_RE = '([a-zA-Z]|\\\\.[a-zA-Z.])[a-zA-Z0-9._]*';\n\n return {\n contains: [\n hljs.HASH_COMMENT_MODE,\n {\n begin: IDENT_RE,\n lexemes: IDENT_RE,\n keywords: {\n keyword:\n 'function if in break next repeat else for return switch while try tryCatch ' +\n 'stop warning require library attach detach source setMethod setGeneric ' +\n 'setGroupGeneric setClass ...',\n literal:\n 'NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 ' +\n 'NA_complex_|10'\n },\n relevance: 0\n },\n {\n // hex value\n className: 'number',\n begin: \"0[xX][0-9a-fA-F]+[Li]?\\\\b\",\n relevance: 0\n },\n {\n // explicit integer\n className: 'number',\n begin: \"\\\\d+(?:[eE][+\\\\-]?\\\\d*)?L\\\\b\",\n relevance: 0\n },\n {\n // number with trailing decimal\n className: 'number',\n begin: \"\\\\d+\\\\.(?!\\\\d)(?:i\\\\b)?\",\n relevance: 0\n },\n {\n // number\n className: 'number',\n begin: \"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\",\n relevance: 0\n },\n {\n // number with leading decimal\n className: 'number',\n begin: \"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\",\n relevance: 0\n },\n\n {\n // escaped identifier\n begin: '`',\n end: '`',\n relevance: 0\n },\n\n {\n className: 'string',\n contains: [hljs.BACKSLASH_ESCAPE],\n variants: [\n {begin: '\"', end: '\"'},\n {begin: \"'\", end: \"'\"}\n ]\n }\n ]\n };\n};","module.exports = function(hljs) {\n function orReValues(ops){\n return ops\n .map(function(op) {\n return op\n .split('')\n .map(function(char) {\n return '\\\\' + char;\n })\n .join('');\n })\n .join('|');\n }\n\n var RE_IDENT = '~?[a-z$_][0-9a-zA-Z$_]*';\n var RE_MODULE_IDENT = '`?[A-Z$_][0-9a-zA-Z$_]*';\n\n var RE_PARAM_TYPEPARAM = '\\'?[a-z$_][0-9a-z$_]*';\n var RE_PARAM_TYPE = '\\s*:\\s*[a-z$_][0-9a-z$_]*(\\(\\s*(' + RE_PARAM_TYPEPARAM + '\\s*(,' + RE_PARAM_TYPEPARAM + ')*)?\\s*\\))?';\n var RE_PARAM = RE_IDENT + '(' + RE_PARAM_TYPE + ')?(' + RE_PARAM_TYPE + ')?';\n var RE_OPERATOR = \"(\" + orReValues(['||', '&&', '++', '**', '+.', '*', '/', '*.', '/.', '...', '|>']) + \"|==|===)\";\n var RE_OPERATOR_SPACED = \"\\\\s+\" + RE_OPERATOR + \"\\\\s+\";\n\n var KEYWORDS = {\n keyword:\n 'and as asr assert begin class constraint do done downto else end exception external' +\n 'for fun function functor if in include inherit initializer' +\n 'land lazy let lor lsl lsr lxor match method mod module mutable new nonrec' +\n 'object of open or private rec sig struct then to try type val virtual when while with',\n built_in:\n 'array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 ref string unit ',\n literal:\n 'true false'\n };\n\n var RE_NUMBER = '\\\\b(0[xX][a-fA-F0-9_]+[Lln]?|' +\n '0[oO][0-7_]+[Lln]?|' +\n '0[bB][01_]+[Lln]?|' +\n '[0-9][0-9_]*([Lln]|(\\\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)';\n\n var NUMBER_MODE = {\n className: 'number',\n relevance: 0,\n variants: [\n {\n begin: RE_NUMBER\n },\n {\n begin: '\\\\(\\\\-' + RE_NUMBER + '\\\\)'\n }\n ]\n };\n\n var OPERATOR_MODE = {\n className: 'operator',\n relevance: 0,\n begin: RE_OPERATOR\n };\n var LIST_CONTENTS_MODES = [\n {\n className: 'identifier',\n relevance: 0,\n begin: RE_IDENT\n },\n OPERATOR_MODE,\n NUMBER_MODE\n ];\n\n var MODULE_ACCESS_CONTENTS = [\n hljs.QUOTE_STRING_MODE,\n OPERATOR_MODE,\n {\n className: 'module',\n begin: \"\\\\b\" + RE_MODULE_IDENT, returnBegin: true,\n end: \"\\.\",\n contains: [\n {\n className: 'identifier',\n begin: RE_MODULE_IDENT,\n relevance: 0\n }\n ]\n }\n ];\n\n var PARAMS_CONTENTS = [\n {\n className: 'module',\n begin: \"\\\\b\" + RE_MODULE_IDENT, returnBegin: true,\n end: \"\\.\",\n relevance: 0,\n contains: [\n {\n className: 'identifier',\n begin: RE_MODULE_IDENT,\n relevance: 0\n }\n ]\n }\n ];\n\n var PARAMS_MODE = {\n begin: RE_IDENT,\n end: '(,|\\\\n|\\\\))',\n relevance: 0,\n contains: [\n OPERATOR_MODE,\n {\n className: 'typing',\n begin: ':',\n end: '(,|\\\\n)',\n returnBegin: true,\n relevance: 0,\n contains: PARAMS_CONTENTS\n }\n ]\n };\n\n var FUNCTION_BLOCK_MODE = {\n className: 'function',\n relevance: 0,\n keywords: KEYWORDS,\n variants: [\n {\n begin: '\\\\s(\\\\(\\\\.?.*?\\\\)|' + RE_IDENT + ')\\\\s*=>',\n end: '\\\\s*=>',\n returnBegin: true,\n relevance: 0,\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: RE_IDENT\n },\n {\n begin: RE_PARAM\n },\n {\n begin: /\\(\\s*\\)/,\n }\n ]\n }\n ]\n },\n {\n begin: '\\\\s\\\\(\\\\.?[^;\\\\|]*\\\\)\\\\s*=>',\n end: '\\\\s=>',\n returnBegin: true,\n relevance: 0,\n contains: [\n {\n className: 'params',\n relevance: 0,\n variants: [\n PARAMS_MODE\n ]\n }\n ]\n },\n {\n begin: '\\\\(\\\\.\\\\s' + RE_IDENT + '\\\\)\\\\s*=>'\n }\n ]\n };\n MODULE_ACCESS_CONTENTS.push(FUNCTION_BLOCK_MODE);\n\n var CONSTRUCTOR_MODE = {\n className: 'constructor',\n begin: RE_MODULE_IDENT + '\\\\(',\n end: '\\\\)',\n illegal: '\\\\n',\n keywords: KEYWORDS,\n contains: [\n hljs.QUOTE_STRING_MODE,\n OPERATOR_MODE,\n {\n className: 'params',\n begin: '\\\\b' + RE_IDENT\n }\n ]\n };\n\n var PATTERN_MATCH_BLOCK_MODE = {\n className: 'pattern-match',\n begin: '\\\\|',\n returnBegin: true,\n keywords: KEYWORDS,\n end: '=>',\n relevance: 0,\n contains: [\n CONSTRUCTOR_MODE,\n OPERATOR_MODE,\n {\n relevance: 0,\n className: 'constructor',\n begin: RE_MODULE_IDENT\n }\n ]\n };\n\n var MODULE_ACCESS_MODE = {\n className: 'module-access',\n keywords: KEYWORDS,\n returnBegin: true,\n variants: [\n {\n begin: \"\\\\b(\" + RE_MODULE_IDENT + \"\\\\.)+\" + RE_IDENT\n },\n {\n begin: \"\\\\b(\" + RE_MODULE_IDENT + \"\\\\.)+\\\\(\",\n end: \"\\\\)\",\n returnBegin: true,\n contains: [\n FUNCTION_BLOCK_MODE,\n {\n begin: '\\\\(',\n end: '\\\\)',\n skip: true\n }\n ].concat(MODULE_ACCESS_CONTENTS)\n },\n {\n begin: \"\\\\b(\" + RE_MODULE_IDENT + \"\\\\.)+{\",\n end: \"}\"\n }\n ],\n contains: MODULE_ACCESS_CONTENTS\n };\n\n PARAMS_CONTENTS.push(MODULE_ACCESS_MODE);\n\n return {\n aliases: ['re'],\n keywords: KEYWORDS,\n illegal: '(:\\\\-|:=|\\\\${|\\\\+=)',\n contains: [\n hljs.COMMENT('/\\\\*', '\\\\*/', { illegal: '^(\\\\#,\\\\/\\\\/)' }),\n {\n className: 'character',\n begin: '\\'(\\\\\\\\[^\\']+|[^\\'])\\'',\n illegal: '\\\\n',\n relevance: 0\n },\n hljs.QUOTE_STRING_MODE,\n {\n className: 'literal',\n begin: '\\\\(\\\\)',\n relevance: 0\n },\n {\n className: 'literal',\n begin: '\\\\[\\\\|',\n end: '\\\\|\\\\]',\n relevance: 0,\n contains: LIST_CONTENTS_MODES\n },\n {\n className: 'literal',\n begin: '\\\\[',\n end: '\\\\]',\n relevance: 0,\n contains: LIST_CONTENTS_MODES\n },\n CONSTRUCTOR_MODE,\n {\n className: 'operator',\n begin: RE_OPERATOR_SPACED,\n illegal: '\\\\-\\\\->',\n relevance: 0\n },\n NUMBER_MODE,\n hljs.C_LINE_COMMENT_MODE,\n PATTERN_MATCH_BLOCK_MODE,\n FUNCTION_BLOCK_MODE,\n {\n className: 'module-def',\n begin: \"\\\\bmodule\\\\s+\" + RE_IDENT + \"\\\\s+\" + RE_MODULE_IDENT + \"\\\\s+=\\\\s+{\",\n end: \"}\",\n returnBegin: true,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n {\n className: 'module',\n relevance: 0,\n begin: RE_MODULE_IDENT\n },\n {\n begin: '{',\n end: '}',\n skip: true\n }\n ].concat(MODULE_ACCESS_CONTENTS)\n },\n MODULE_ACCESS_MODE\n ]\n };\n};","module.exports = function(hljs) {\n var RUBY_METHOD_RE = '[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?';\n var RUBY_KEYWORDS = {\n keyword:\n 'and then defined module in return redo if BEGIN retry end for self when ' +\n 'next until do begin unless END rescue else break undef not super class case ' +\n 'require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor',\n literal:\n 'true false nil'\n };\n var YARDOCTAG = {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n };\n var IRB_OBJECT = {\n begin: '#<', end: '>'\n };\n var COMMENT_MODES = [\n hljs.COMMENT(\n '#',\n '$',\n {\n contains: [YARDOCTAG]\n }\n ),\n hljs.COMMENT(\n '^\\\\=begin',\n '^\\\\=end',\n {\n contains: [YARDOCTAG],\n relevance: 10\n }\n ),\n hljs.COMMENT('^__END__', '\\\\n$')\n ];\n var SUBST = {\n className: 'subst',\n begin: '#\\\\{', end: '}',\n keywords: RUBY_KEYWORDS\n };\n var STRING = {\n className: 'string',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST],\n variants: [\n {begin: /'/, end: /'/},\n {begin: /\"/, end: /\"/},\n {begin: /`/, end: /`/},\n {begin: '%[qQwWx]?\\\\(', end: '\\\\)'},\n {begin: '%[qQwWx]?\\\\[', end: '\\\\]'},\n {begin: '%[qQwWx]?{', end: '}'},\n {begin: '%[qQwWx]?<', end: '>'},\n {begin: '%[qQwWx]?/', end: '/'},\n {begin: '%[qQwWx]?%', end: '%'},\n {begin: '%[qQwWx]?-', end: '-'},\n {begin: '%[qQwWx]?\\\\|', end: '\\\\|'},\n {\n // \\B in the beginning suppresses recognition of ?-sequences where ?\n // is the last character of a preceding identifier, as in: `func?4`\n begin: /\\B\\?(\\\\\\d{1,3}|\\\\x[A-Fa-f0-9]{1,2}|\\\\u[A-Fa-f0-9]{4}|\\\\?\\S)\\b/\n },\n { // heredocs\n begin: /<<[-~]?'?(\\w+)(?:.|\\n)*?\\n\\s*\\1\\b/,\n returnBegin: true,\n contains: [\n { begin: /<<[-~]?'?/ },\n { begin: /\\w+/,\n endSameAsBegin: true,\n contains: [hljs.BACKSLASH_ESCAPE, SUBST],\n }\n ]\n }\n ]\n };\n var PARAMS = {\n className: 'params',\n begin: '\\\\(', end: '\\\\)', endsParent: true,\n keywords: RUBY_KEYWORDS\n };\n\n var RUBY_DEFAULT_CONTAINS = [\n STRING,\n IRB_OBJECT,\n {\n className: 'class',\n beginKeywords: 'class module', end: '$|;',\n illegal: /=/,\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {begin: '[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?'}),\n {\n begin: '<\\\\s*',\n contains: [{\n begin: '(' + hljs.IDENT_RE + '::)?' + hljs.IDENT_RE\n }]\n }\n ].concat(COMMENT_MODES)\n },\n {\n className: 'function',\n beginKeywords: 'def', end: '$|;',\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {begin: RUBY_METHOD_RE}),\n PARAMS\n ].concat(COMMENT_MODES)\n },\n {\n // swallow namespace qualifiers before symbols\n begin: hljs.IDENT_RE + '::'\n },\n {\n className: 'symbol',\n begin: hljs.UNDERSCORE_IDENT_RE + '(\\\\!|\\\\?)?:',\n relevance: 0\n },\n {\n className: 'symbol',\n begin: ':(?!\\\\s)',\n contains: [STRING, {begin: RUBY_METHOD_RE}],\n relevance: 0\n },\n {\n className: 'number',\n begin: '(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b',\n relevance: 0\n },\n {\n begin: '(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))' // variables\n },\n {\n className: 'params',\n begin: /\\|/, end: /\\|/,\n keywords: RUBY_KEYWORDS\n },\n { // regexp container\n begin: '(' + hljs.RE_STARTERS_RE + '|unless)\\\\s*',\n keywords: 'unless',\n contains: [\n IRB_OBJECT,\n {\n className: 'regexp',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST],\n illegal: /\\n/,\n variants: [\n {begin: '/', end: '/[a-z]*'},\n {begin: '%r{', end: '}[a-z]*'},\n {begin: '%r\\\\(', end: '\\\\)[a-z]*'},\n {begin: '%r!', end: '![a-z]*'},\n {begin: '%r\\\\[', end: '\\\\][a-z]*'}\n ]\n }\n ].concat(COMMENT_MODES),\n relevance: 0\n }\n ].concat(COMMENT_MODES);\n\n SUBST.contains = RUBY_DEFAULT_CONTAINS;\n PARAMS.contains = RUBY_DEFAULT_CONTAINS;\n\n var SIMPLE_PROMPT = \"[>?]>\";\n var DEFAULT_PROMPT = \"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+>\";\n var RVM_PROMPT = \"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d(p\\\\d+)?[^>]+>\";\n\n var IRB_DEFAULT = [\n {\n begin: /^\\s*=>/,\n starts: {\n end: '$', contains: RUBY_DEFAULT_CONTAINS\n }\n },\n {\n className: 'meta',\n begin: '^('+SIMPLE_PROMPT+\"|\"+DEFAULT_PROMPT+'|'+RVM_PROMPT+')',\n starts: {\n end: '$', contains: RUBY_DEFAULT_CONTAINS\n }\n }\n ];\n\n return {\n aliases: ['rb', 'gemspec', 'podspec', 'thor', 'irb'],\n keywords: RUBY_KEYWORDS,\n illegal: /\\/\\*/,\n contains: COMMENT_MODES.concat(IRB_DEFAULT).concat(RUBY_DEFAULT_CONTAINS)\n };\n};","module.exports = function(hljs) {\n var NUM_SUFFIX = '([ui](8|16|32|64|128|size)|f(32|64))\\?';\n var KEYWORDS =\n 'abstract as async await become box break const continue crate do dyn ' +\n 'else enum extern false final fn for if impl in let loop macro match mod ' +\n 'move mut override priv pub ref return self Self static struct super ' +\n 'trait true try type typeof unsafe unsized use virtual where while yield';\n var BUILTINS =\n // functions\n 'drop ' +\n // types\n 'i8 i16 i32 i64 i128 isize ' +\n 'u8 u16 u32 u64 u128 usize ' +\n 'f32 f64 ' +\n 'str char bool ' +\n 'Box Option Result String Vec ' +\n // traits\n 'Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug ' +\n 'PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator ' +\n 'Extend IntoIterator DoubleEndedIterator ExactSizeIterator ' +\n 'SliceConcatExt ToString ' +\n // macros\n 'assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! ' +\n 'debug_assert! debug_assert_eq! env! panic! file! format! format_args! ' +\n 'include_bin! include_str! line! local_data_key! module_path! ' +\n 'option_env! print! println! select! stringify! try! unimplemented! ' +\n 'unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!';\n return {\n aliases: ['rs'],\n keywords: {\n keyword:\n KEYWORDS,\n literal:\n 'true false Some None Ok Err',\n built_in:\n BUILTINS\n },\n lexemes: hljs.IDENT_RE + '!?',\n illegal: '</',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.COMMENT('/\\\\*', '\\\\*/', {contains: ['self']}),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {begin: /b?\"/, illegal: null}),\n {\n className: 'string',\n variants: [\n { begin: /r(#*)\"(.|\\n)*?\"\\1(?!#)/ },\n { begin: /b?'\\\\?(x\\w{2}|u\\w{4}|U\\w{8}|.)'/ }\n ]\n },\n {\n className: 'symbol',\n begin: /'[a-zA-Z_][a-zA-Z0-9_]*/\n },\n {\n className: 'number',\n variants: [\n { begin: '\\\\b0b([01_]+)' + NUM_SUFFIX },\n { begin: '\\\\b0o([0-7_]+)' + NUM_SUFFIX },\n { begin: '\\\\b0x([A-Fa-f0-9_]+)' + NUM_SUFFIX },\n { begin: '\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)' +\n NUM_SUFFIX\n }\n ],\n relevance: 0\n },\n {\n className: 'function',\n beginKeywords: 'fn', end: '(\\\\(|<)', excludeEnd: true,\n contains: [hljs.UNDERSCORE_TITLE_MODE]\n },\n {\n className: 'meta',\n begin: '#\\\\!?\\\\[', end: '\\\\]',\n contains: [\n {\n className: 'meta-string',\n begin: /\"/, end: /\"/\n }\n ]\n },\n {\n className: 'class',\n beginKeywords: 'type', end: ';',\n contains: [\n hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, {endsParent: true})\n ],\n illegal: '\\\\S'\n },\n {\n className: 'class',\n beginKeywords: 'trait enum struct union', end: '{',\n contains: [\n hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, {endsParent: true})\n ],\n illegal: '[\\\\w\\\\d]'\n },\n {\n begin: hljs.IDENT_RE + '::',\n keywords: {built_in: BUILTINS}\n },\n {\n begin: '->'\n }\n ]\n };\n};","module.exports = function(hljs) {\n\n var ANNOTATION = { className: 'meta', begin: '@[A-Za-z]+' };\n\n // used in strings for escaping/interpolation/substitution\n var SUBST = {\n className: 'subst',\n variants: [\n {begin: '\\\\$[A-Za-z0-9_]+'},\n {begin: '\\\\${', end: '}'}\n ]\n };\n\n var STRING = {\n className: 'string',\n variants: [\n {\n begin: '\"', end: '\"',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n {\n begin: '\"\"\"', end: '\"\"\"',\n relevance: 10\n },\n {\n begin: '[a-z]+\"', end: '\"',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST]\n },\n {\n className: 'string',\n begin: '[a-z]+\"\"\"', end: '\"\"\"',\n contains: [SUBST],\n relevance: 10\n }\n ]\n\n };\n\n var SYMBOL = {\n className: 'symbol',\n begin: '\\'\\\\w[\\\\w\\\\d_]*(?!\\')'\n };\n\n var TYPE = {\n className: 'type',\n begin: '\\\\b[A-Z][A-Za-z0-9_]*',\n relevance: 0\n };\n\n var NAME = {\n className: 'title',\n begin: /[^0-9\\n\\t \"'(),.`{}\\[\\]:;][^\\n\\t \"'(),.`{}\\[\\]:;]+|[^0-9\\n\\t \"'(),.`{}\\[\\]:;=]/,\n relevance: 0\n };\n\n var CLASS = {\n className: 'class',\n beginKeywords: 'class object trait type',\n end: /[:={\\[\\n;]/,\n excludeEnd: true,\n contains: [\n {\n beginKeywords: 'extends with',\n relevance: 10\n },\n {\n begin: /\\[/,\n end: /\\]/,\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0,\n contains: [TYPE]\n },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0,\n contains: [TYPE]\n },\n NAME\n ]\n };\n\n var METHOD = {\n className: 'function',\n beginKeywords: 'def',\n end: /[:={\\[(\\n;]/,\n excludeEnd: true,\n contains: [NAME]\n };\n\n return {\n keywords: {\n literal: 'true false null',\n keyword: 'type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit'\n },\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n SYMBOL,\n TYPE,\n METHOD,\n CLASS,\n hljs.C_NUMBER_MODE,\n ANNOTATION\n ]\n };\n};","module.exports = function(hljs) {\n var AT_IDENTIFIER = '@[a-z-]+' // @font-face\n var AT_MODIFIERS = \"and or not only\"\n var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n var VARIABLE = {\n className: 'variable',\n begin: '(\\\\$' + IDENT_RE + ')\\\\b'\n };\n var HEXCOLOR = {\n className: 'number', begin: '#[0-9A-Fa-f]+'\n };\n var DEF_INTERNALS = {\n className: 'attribute',\n begin: '[A-Z\\\\_\\\\.\\\\-]+', end: ':',\n excludeEnd: true,\n illegal: '[^\\\\s]',\n starts: {\n endsWithParent: true, excludeEnd: true,\n contains: [\n HEXCOLOR,\n hljs.CSS_NUMBER_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'meta', begin: '!important'\n }\n ]\n }\n };\n return {\n case_insensitive: true,\n illegal: '[=/|\\']',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'selector-id', begin: '\\\\#[A-Za-z0-9_-]+',\n relevance: 0\n },\n {\n className: 'selector-class', begin: '\\\\.[A-Za-z0-9_-]+',\n relevance: 0\n },\n {\n className: 'selector-attr', begin: '\\\\[', end: '\\\\]',\n illegal: '$'\n },\n {\n className: 'selector-tag', // begin: IDENT_RE, end: '[,|\\\\s]'\n begin: '\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b',\n relevance: 0\n },\n {\n className: 'selector-pseudo',\n begin: ':(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)'\n },\n {\n className: 'selector-pseudo',\n begin: '::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)'\n },\n VARIABLE,\n {\n className: 'attribute',\n begin: '\\\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b',\n illegal: '[^\\\\s]'\n },\n {\n begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b'\n },\n {\n begin: ':', end: ';',\n contains: [\n VARIABLE,\n HEXCOLOR,\n hljs.CSS_NUMBER_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n {\n className: 'meta', begin: '!important'\n }\n ]\n },\n // matching these here allows us to treat them more like regular CSS\n // rules so everything between the {} gets regular rule highlighting,\n // which is what we want for page and font-face\n {\n begin: '@(page|font-face)',\n lexemes: AT_IDENTIFIER,\n keywords: '@page @font-face'\n },\n {\n begin: '@', end: '[{;]',\n returnBegin: true,\n keywords: AT_MODIFIERS,\n contains: [\n {\n begin: AT_IDENTIFIER,\n className: \"keyword\"\n },\n VARIABLE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n HEXCOLOR,\n hljs.CSS_NUMBER_MODE,\n // {\n // begin: '\\\\s[A-Za-z0-9_.-]+',\n // relevance: 0\n // }\n ]\n }\n ]\n };\n};","module.exports = function(hljs) {\n return {\n aliases: ['console'],\n contains: [\n {\n className: 'meta',\n begin: '^\\\\s{0,3}[/\\\\w\\\\d\\\\[\\\\]()@-]*[>%$#]',\n starts: {\n end: '$', subLanguage: 'bash'\n }\n }\n ]\n }\n};","module.exports = function(hljs) {\n var VAR_IDENT_RE = '[a-z][a-zA-Z0-9_]*';\n var CHAR = {\n className: 'string',\n begin: '\\\\$.{1}'\n };\n var SYMBOL = {\n className: 'symbol',\n begin: '#' + hljs.UNDERSCORE_IDENT_RE\n };\n return {\n aliases: ['st'],\n keywords: 'self super nil true false thisContext', // only 6\n contains: [\n hljs.COMMENT('\"', '\"'),\n hljs.APOS_STRING_MODE,\n {\n className: 'type',\n begin: '\\\\b[A-Z][A-Za-z0-9_]*',\n relevance: 0\n },\n {\n begin: VAR_IDENT_RE + ':',\n relevance: 0\n },\n hljs.C_NUMBER_MODE,\n SYMBOL,\n CHAR,\n {\n // This looks more complicated than needed to avoid combinatorial\n // explosion under V8. It effectively means `| var1 var2 ... |` with\n // whitespace adjacent to `|` being optional.\n begin: '\\\\|[ ]*' + VAR_IDENT_RE + '([ ]+' + VAR_IDENT_RE + ')*[ ]*\\\\|',\n returnBegin: true, end: /\\|/,\n illegal: /\\S/,\n contains: [{begin: '(\\\\|[ ]*)?' + VAR_IDENT_RE}]\n },\n {\n begin: '\\\\#\\\\(', end: '\\\\)',\n contains: [\n hljs.APOS_STRING_MODE,\n CHAR,\n hljs.C_NUMBER_MODE,\n SYMBOL\n ]\n }\n ]\n };\n};","module.exports = function(hljs) {\n var COMMENT_MODE = hljs.COMMENT('--', '$');\n return {\n case_insensitive: true,\n illegal: /[<>{}*]/,\n contains: [\n {\n beginKeywords:\n 'begin end start commit rollback savepoint lock alter create drop rename call ' +\n 'delete do handler insert load replace select truncate update set show pragma grant ' +\n 'merge describe use explain help declare prepare execute deallocate release ' +\n 'unlock purge reset change stop analyze cache flush optimize repair kill ' +\n 'install uninstall checksum restore check backup revoke comment values with',\n end: /;/, endsWithParent: true,\n lexemes: /[\\w\\.]+/,\n keywords: {\n keyword:\n 'as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add ' +\n 'addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias ' +\n 'all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply ' +\n 'archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan ' +\n 'atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid ' +\n 'authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile ' +\n 'before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float ' +\n 'binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound ' +\n 'bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel ' +\n 'capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base ' +\n 'char_length character_length characters characterset charindex charset charsetform charsetid check ' +\n 'checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close ' +\n 'cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation ' +\n 'collect colu colum column column_value columns columns_updated comment commit compact compatibility ' +\n 'compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn ' +\n 'connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection ' +\n 'consider consistent constant constraint constraints constructor container content contents context ' +\n 'contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost ' +\n 'count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation ' +\n 'critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user ' +\n 'cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add ' +\n 'date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts ' +\n 'day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate ' +\n 'declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults ' +\n 'deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank ' +\n 'depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor ' +\n 'deterministic diagnostics difference dimension direct_load directory disable disable_all ' +\n 'disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div ' +\n 'do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable ' +\n 'editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt ' +\n 'end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors ' +\n 'escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding ' +\n 'execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external ' +\n 'external_1 external_2 externally extract failed failed_login_attempts failover failure far fast ' +\n 'feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final ' +\n 'finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign ' +\n 'form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ' +\n 'ftp full function general generated get get_format get_lock getdate getutcdate global global_name ' +\n 'globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups ' +\n 'gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex ' +\n 'hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified ' +\n 'identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment ' +\n 'index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile ' +\n 'initial initialized initially initrans inmemory inner innodb input insert install instance instantiable ' +\n 'instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat ' +\n 'is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists ' +\n 'keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase ' +\n 'lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit ' +\n 'lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate ' +\n 'locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call ' +\n 'logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime ' +\n 'managed management manual map mapping mask master master_pos_wait match matched materialized max ' +\n 'maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans ' +\n 'md5 measures median medium member memcompress memory merge microsecond mid migration min minextents ' +\n 'minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month ' +\n 'months mount move movement multiset mutex name name_const names nan national native natural nav nchar ' +\n 'nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile ' +\n 'nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile ' +\n 'nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder ' +\n 'nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck ' +\n 'noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe ' +\n 'nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ' +\n 'ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old ' +\n 'on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date ' +\n 'oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary ' +\n 'out outer outfile outline output over overflow overriding package pad parallel parallel_enable ' +\n 'parameters parent parse partial partition partitions pascal passing password password_grace_time ' +\n 'password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex ' +\n 'pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc ' +\n 'performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin ' +\n 'policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction ' +\n 'prediction_cost prediction_details prediction_probability prediction_set prepare present preserve ' +\n 'prior priority private private_sga privileges procedural procedure procedure_analyze processlist ' +\n 'profiles project prompt protection public publishingservername purge quarter query quick quiesce quota ' +\n 'quotename radians raise rand range rank raw read reads readsize rebuild record records ' +\n 'recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh ' +\n 'regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy ' +\n 'reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename ' +\n 'repair repeat replace replicate replication required reset resetlogs resize resource respect restore ' +\n 'restricted result result_cache resumable resume retention return returning returns reuse reverse revoke ' +\n 'right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows ' +\n 'rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll ' +\n 'sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select ' +\n 'self semi sequence sequential serializable server servererror session session_user sessions_per_user set ' +\n 'sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor ' +\n 'si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin ' +\n 'size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex ' +\n 'source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows ' +\n 'sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone ' +\n 'standby start starting startup statement static statistics stats_binomial_test stats_crosstab ' +\n 'stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep ' +\n 'stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev ' +\n 'stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate ' +\n 'subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum ' +\n 'suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate ' +\n 'sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo ' +\n 'template temporary terminated tertiary_weights test than then thread through tier ties time time_format ' +\n 'time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr ' +\n 'timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking ' +\n 'transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate ' +\n 'try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress ' +\n 'under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot ' +\n 'unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert ' +\n 'url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date ' +\n 'utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var ' +\n 'var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray ' +\n 'verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear ' +\n 'wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped ' +\n 'xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces ' +\n 'xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek',\n literal:\n 'true false null unknown',\n built_in:\n 'array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number ' +\n 'numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void'\n },\n contains: [\n {\n className: 'string',\n begin: '\\'', end: '\\'',\n contains: [{begin: '\\'\\''}]\n },\n {\n className: 'string',\n begin: '\"', end: '\"',\n contains: [{begin: '\"\"'}]\n },\n {\n className: 'string',\n begin: '`', end: '`'\n },\n hljs.C_NUMBER_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n COMMENT_MODE,\n hljs.HASH_COMMENT_MODE\n ]\n },\n hljs.C_BLOCK_COMMENT_MODE,\n COMMENT_MODE,\n hljs.HASH_COMMENT_MODE\n ]\n };\n};","module.exports = function(hljs) {\n var SWIFT_KEYWORDS = {\n keyword: '#available #colorLiteral #column #else #elseif #endif #file ' +\n '#fileLiteral #function #if #imageLiteral #line #selector #sourceLocation ' +\n '_ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype ' +\n 'associativity break case catch class continue convenience default defer deinit didSet do ' +\n 'dynamic dynamicType else enum extension fallthrough false fileprivate final for func ' +\n 'get guard if import in indirect infix init inout internal is lazy left let ' +\n 'mutating nil none nonmutating open operator optional override postfix precedence ' +\n 'prefix private protocol Protocol public repeat required rethrows return ' +\n 'right self Self set static struct subscript super switch throw throws true ' +\n 'try try! try? Type typealias unowned var weak where while willSet',\n literal: 'true false nil',\n built_in: 'abs advance alignof alignofValue anyGenerator assert assertionFailure ' +\n 'bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC ' +\n 'bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros ' +\n 'debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords ' +\n 'enumerate equal fatalError filter find getBridgedObjectiveCType getVaList ' +\n 'indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC ' +\n 'isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare ' +\n 'map max maxElement min minElement numericCast overlaps partition posix ' +\n 'precondition preconditionFailure print println quickSort readLine reduce reflect ' +\n 'reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split ' +\n 'startsWith stride strideof strideofValue swap toString transcode ' +\n 'underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap ' +\n 'unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer ' +\n 'withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers ' +\n 'withUnsafePointer withUnsafePointers withVaList zip'\n };\n\n var TYPE = {\n className: 'type',\n begin: '\\\\b[A-Z][\\\\w\\u00C0-\\u02B8\\']*',\n relevance: 0\n };\n // slightly more special to swift\n var OPTIONAL_USING_TYPE = {\n className: 'type',\n begin: '\\\\b[A-Z][\\\\w\\u00C0-\\u02B8\\']*[!?]'\n }\n var BLOCK_COMMENT = hljs.COMMENT(\n '/\\\\*',\n '\\\\*/',\n {\n contains: ['self']\n }\n );\n var SUBST = {\n className: 'subst',\n begin: /\\\\\\(/, end: '\\\\)',\n keywords: SWIFT_KEYWORDS,\n contains: [] // assigned later\n };\n var STRING = {\n className: 'string',\n contains: [hljs.BACKSLASH_ESCAPE, SUBST],\n variants: [\n {begin: /\"\"\"/, end: /\"\"\"/},\n {begin: /\"/, end: /\"/},\n ]\n };\n var NUMBERS = {\n className: 'number',\n begin: '\\\\b([\\\\d_]+(\\\\.[\\\\deE_]+)?|0x[a-fA-F0-9_]+(\\\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\\\b',\n relevance: 0\n };\n SUBST.contains = [NUMBERS];\n\n return {\n keywords: SWIFT_KEYWORDS,\n contains: [\n STRING,\n hljs.C_LINE_COMMENT_MODE,\n BLOCK_COMMENT,\n OPTIONAL_USING_TYPE,\n TYPE,\n NUMBERS,\n {\n className: 'function',\n beginKeywords: 'func', end: '{', excludeEnd: true,\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {\n begin: /[A-Za-z$_][0-9A-Za-z$_]*/\n }),\n {\n begin: /</, end: />/\n },\n {\n className: 'params',\n begin: /\\(/, end: /\\)/, endsParent: true,\n keywords: SWIFT_KEYWORDS,\n contains: [\n 'self',\n NUMBERS,\n STRING,\n hljs.C_BLOCK_COMMENT_MODE,\n {begin: ':'} // relevance booster\n ],\n illegal: /[\"']/\n }\n ],\n illegal: /\\[|%/\n },\n {\n className: 'class',\n beginKeywords: 'struct protocol class extension enum',\n keywords: SWIFT_KEYWORDS,\n end: '\\\\{',\n excludeEnd: true,\n contains: [\n hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][\\u00C0-\\u02B80-9A-Za-z$_]*/})\n ]\n },\n {\n className: 'meta', // @attributes\n begin: '(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|' +\n '@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|' +\n '@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|' +\n '@infix|@prefix|@postfix|@autoclosure|@testable|@available|' +\n '@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|' +\n '@propertyWrapper)'\n\n },\n {\n beginKeywords: 'import', end: /$/,\n contains: [hljs.C_LINE_COMMENT_MODE, BLOCK_COMMENT]\n }\n ]\n };\n};","module.exports = function(hljs) {\n var JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n var KEYWORDS = {\n keyword:\n 'in if for while finally var new function do return void else break catch ' +\n 'instanceof with throw case default try this switch continue typeof delete ' +\n 'let yield const class public private protected get set super ' +\n 'static implements enum export import declare type namespace abstract ' +\n 'as from extends async await',\n literal:\n 'true false null undefined NaN Infinity',\n built_in:\n 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n 'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n 'module console window document any number boolean string void Promise'\n };\n\n var DECORATOR = {\n className: 'meta',\n begin: '@' + JS_IDENT_RE,\n };\n\n var ARGS =\n {\n begin: '\\\\(',\n end: /\\)/,\n keywords: KEYWORDS,\n contains: [\n 'self',\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n hljs.NUMBER_MODE\n ]\n };\n\n var PARAMS = {\n className: 'params',\n begin: /\\(/, end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n DECORATOR,\n ARGS\n ]\n };\n var NUMBER = {\n className: 'number',\n variants: [\n { begin: '\\\\b(0[bB][01]+)n?' },\n { begin: '\\\\b(0[oO][0-7]+)n?' },\n { begin: hljs.C_NUMBER_RE + 'n?' }\n ],\n relevance: 0\n };\n var SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{', end: '\\\\}',\n keywords: KEYWORDS,\n contains: [] // defined later\n };\n var HTML_TEMPLATE = {\n begin: 'html`', end: '',\n starts: {\n end: '`', returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml',\n }\n };\n var CSS_TEMPLATE = {\n begin: 'css`', end: '',\n starts: {\n end: '`', returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css',\n }\n };\n var TEMPLATE_STRING = {\n className: 'string',\n begin: '`', end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n SUBST.contains = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n TEMPLATE_STRING,\n NUMBER,\n hljs.REGEXP_MODE\n ];\n\n\n\n return {\n aliases: ['ts'],\n keywords: KEYWORDS,\n contains: [\n {\n className: 'meta',\n begin: /^\\s*['\"]use strict['\"]/\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n TEMPLATE_STRING,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n NUMBER,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n begin: '(\\\\(.*?\\\\)|' + hljs.IDENT_RE + ')\\\\s*=>', returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.IDENT_RE\n },\n {\n begin: /\\(\\s*\\)/,\n },\n {\n begin: /\\(/, end: /\\)/,\n excludeBegin: true, excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n }\n ]\n }\n ]\n }\n ],\n relevance: 0\n },\n {\n className: 'function',\n beginKeywords: 'function', end: /[\\{;]/, excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE }),\n PARAMS\n ],\n illegal: /%/,\n relevance: 0 // () => {} is more typical in TypeScript\n },\n {\n beginKeywords: 'constructor', end: /[\\{;]/, excludeEnd: true,\n contains: [\n 'self',\n PARAMS\n ]\n },\n { // prevent references like module.id from being higlighted as module definitions\n begin: /module\\./,\n keywords: { built_in: 'module' },\n relevance: 0\n },\n {\n beginKeywords: 'module', end: /\\{/, excludeEnd: true\n },\n {\n beginKeywords: 'interface', end: /\\{/, excludeEnd: true,\n keywords: 'interface extends'\n },\n {\n begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n },\n {\n begin: '\\\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots\n },\n DECORATOR,\n ARGS\n ]\n };\n};","module.exports = function(hljs) {\n return {\n aliases: ['vb'],\n case_insensitive: true,\n keywords: {\n keyword:\n 'addhandler addressof alias and andalso aggregate ansi as async assembly auto await binary by byref byval ' + /* a-b */\n 'call case catch class compare const continue custom declare default delegate dim distinct do ' + /* c-d */\n 'each equals else elseif end enum erase error event exit explicit finally for friend from function ' + /* e-f */\n 'get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue iterator ' + /* g-i */\n 'join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass ' + /* j-m */\n 'namespace narrowing new next not notinheritable notoverridable ' + /* n */\n 'of off on operator option optional or order orelse overloads overridable overrides ' + /* o */\n 'paramarray partial preserve private property protected public ' + /* p */\n 'raiseevent readonly redim rem removehandler resume return ' + /* r */\n 'select set shadows shared skip static step stop structure strict sub synclock ' + /* s */\n 'take text then throw to try unicode until using when where while widening with withevents writeonly xor yield', /* t-y */\n built_in:\n 'boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype ' + /* b-c */\n 'date decimal directcast double gettype getxmlnamespace iif integer long object ' + /* d-o */\n 'sbyte short single string trycast typeof uinteger ulong ushort', /* s-u */\n literal:\n 'true false nothing'\n },\n illegal: '//|{|}|endif|gosub|variant|wend|^\\\\$ ', /* reserved deprecated keywords */\n contains: [\n hljs.inherit(hljs.QUOTE_STRING_MODE, {contains: [{begin: '\"\"'}]}),\n hljs.COMMENT(\n '\\'',\n '$',\n {\n returnBegin: true,\n contains: [\n {\n className: 'doctag',\n begin: '\\'\\'\\'|<!--|-->',\n contains: [hljs.PHRASAL_WORDS_MODE]\n },\n {\n className: 'doctag',\n begin: '</?', end: '>',\n contains: [hljs.PHRASAL_WORDS_MODE]\n }\n ]\n }\n ),\n hljs.C_NUMBER_MODE,\n {\n className: 'meta',\n begin: '#', end: '$',\n keywords: {'meta-keyword': 'if else elseif end region externalsource'}\n }\n ]\n };\n};","module.exports = function(hljs) {\n return {\n aliases: ['vbs'],\n case_insensitive: true,\n keywords: {\n keyword:\n 'call class const dim do loop erase execute executeglobal exit for each next function ' +\n 'if then else on error option explicit new private property let get public randomize ' +\n 'redim rem select case set stop sub while wend with end to elseif is or xor and not ' +\n 'class_initialize class_terminate default preserve in me byval byref step resume goto',\n built_in:\n 'lcase month vartype instrrev ubound setlocale getobject rgb getref string ' +\n 'weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency ' +\n 'conversions csng timevalue second year space abs clng timeserial fixs len asc ' +\n 'isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate ' +\n 'instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex ' +\n 'chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim ' +\n 'strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion ' +\n 'scriptengine split scriptengineminorversion cint sin datepart ltrim sqr ' +\n 'scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw ' +\n 'chrw regexp server response request cstr err',\n literal:\n 'true false null nothing empty'\n },\n illegal: '//',\n contains: [\n hljs.inherit(hljs.QUOTE_STRING_MODE, {contains: [{begin: '\"\"'}]}),\n hljs.COMMENT(\n /'/,\n /$/,\n {\n relevance: 0\n }\n ),\n hljs.C_NUMBER_MODE\n ]\n };\n};","module.exports = function(hljs) {\n return {\n lexemes: /[!#@\\w]+/,\n keywords: {\n keyword:\n // express version except: ! & * < = > !! # @ @@\n 'N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope '+\n 'cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc '+\n 'ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 '+\n 'profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor '+\n 'so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew '+\n 'tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ '+\n // full version\n 'Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload '+\n 'bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap '+\n 'cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor '+\n 'endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap '+\n 'imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview '+\n 'lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap '+\n 'nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext '+\n 'ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding '+\n 'scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace '+\n 'startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious '+'trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew '+\n 'vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank',\n built_in: //built in func\n 'synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv ' +\n 'complete_check add getwinposx getqflist getwinposy screencol ' +\n 'clearmatches empty extend getcmdpos mzeval garbagecollect setreg ' +\n 'ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable ' +\n 'shiftwidth max sinh isdirectory synID system inputrestore winline ' +\n 'atan visualmode inputlist tabpagewinnr round getregtype mapcheck ' +\n 'hasmapto histdel argidx findfile sha256 exists toupper getcmdline ' +\n 'taglist string getmatches bufnr strftime winwidth bufexists ' +\n 'strtrans tabpagebuflist setcmdpos remote_read printf setloclist ' +\n 'getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval ' +\n 'resolve libcallnr foldclosedend reverse filter has_key bufname ' +\n 'str2float strlen setline getcharmod setbufvar index searchpos ' +\n 'shellescape undofile foldclosed setqflist buflisted strchars str2nr ' +\n 'virtcol floor remove undotree remote_expr winheight gettabwinvar ' +\n 'reltime cursor tabpagenr finddir localtime acos getloclist search ' +\n 'tanh matchend rename gettabvar strdisplaywidth type abs py3eval ' +\n 'setwinvar tolower wildmenumode log10 spellsuggest bufloaded ' +\n 'synconcealed nextnonblank server2client complete settabwinvar ' +\n 'executable input wincol setmatches getftype hlID inputsave ' +\n 'searchpair or screenrow line settabvar histadd deepcopy strpart ' +\n 'remote_peek and eval getftime submatch screenchar winsaveview ' +\n 'matchadd mkdir screenattr getfontname libcall reltimestr getfsize ' +\n 'winnr invert pow getbufline byte2line soundfold repeat fnameescape ' +\n 'tagfiles sin strwidth spellbadword trunc maparg log lispindent ' +\n 'hostname setpos globpath remote_foreground getchar synIDattr ' +\n 'fnamemodify cscope_connection stridx winbufnr indent min ' +\n 'complete_add nr2char searchpairpos inputdialog values matchlist ' +\n 'items hlexists strridx browsedir expand fmod pathshorten line2byte ' +\n 'argc count getwinvar glob foldtextresult getreg foreground cosh ' +\n 'matchdelete has char2nr simplify histget searchdecl iconv ' +\n 'winrestcmd pumvisible writefile foldlevel haslocaldir keys cos ' +\n 'matchstr foldtext histnr tan tempname getcwd byteidx getbufvar ' +\n 'islocked escape eventhandler remote_send serverlist winrestview ' +\n 'synstack pyeval prevnonblank readfile cindent filereadable changenr ' +\n 'exp'\n },\n illegal: /;/,\n contains: [\n hljs.NUMBER_MODE,\n {\n className: 'string',\n begin: '\\'', end: '\\'',\n illegal: '\\\\n'\n },\n\n /*\n A double quote can start either a string or a line comment. Strings are\n ended before the end of a line by another double quote and can contain\n escaped double-quotes and post-escaped line breaks.\n\n Also, any double quote at the beginning of a line is a comment but we\n don't handle that properly at the moment: any double quote inside will\n turn them into a string. Handling it properly will require a smarter\n parser.\n */\n {\n className: 'string',\n begin: /\"(\\\\\"|\\n\\\\|[^\"\\n])*\"/\n },\n hljs.COMMENT('\"', '$'),\n\n {\n className: 'variable',\n begin: /[bwtglsav]:[\\w\\d_]*/\n },\n {\n className: 'function',\n beginKeywords: 'function function!', end: '$',\n relevance: 0,\n contains: [\n hljs.TITLE_MODE,\n {\n className: 'params',\n begin: '\\\\(', end: '\\\\)'\n }\n ]\n },\n {\n className: 'symbol',\n begin: /<[\\w-]+>/\n }\n ]\n };\n};","module.exports = function(hljs) {\n var LITERALS = 'true false yes no null';\n\n // Define keys as starting with a word character\n // ...containing word chars, spaces, colons, forward-slashes, hyphens and periods\n // ...and ending with a colon followed immediately by a space, tab or newline.\n // The YAML spec allows for much more than this, but this covers most use-cases.\n var KEY = {\n className: 'attr',\n variants: [\n { begin: '\\\\w[\\\\w :\\\\/.-]*:(?=[ \\t]|$)' },\n { begin: '\"\\\\w[\\\\w :\\\\/.-]*\":(?=[ \\t]|$)' }, //double quoted keys\n { begin: '\\'\\\\w[\\\\w :\\\\/.-]*\\':(?=[ \\t]|$)' } //single quoted keys\n ]\n };\n\n var TEMPLATE_VARIABLES = {\n className: 'template-variable',\n variants: [\n { begin: '\\{\\{', end: '\\}\\}' }, // jinja templates Ansible\n { begin: '%\\{', end: '\\}' } // Ruby i18n\n ]\n };\n var STRING = {\n className: 'string',\n relevance: 0,\n variants: [\n {begin: /'/, end: /'/},\n {begin: /\"/, end: /\"/},\n {begin: /\\S+/}\n ],\n contains: [\n hljs.BACKSLASH_ESCAPE,\n TEMPLATE_VARIABLES\n ]\n };\n\n return {\n case_insensitive: true,\n aliases: ['yml', 'YAML', 'yaml'],\n contains: [\n KEY,\n {\n className: 'meta',\n begin: '^---\\s*$',\n relevance: 10\n },\n { // multi line string\n // Blocks start with a | or > followed by a newline\n //\n // Indentation of subsequent lines must be the same to\n // be considered part of the block\n className: 'string',\n begin: '[\\\\|>]([0-9]?[+-])?[ ]*\\\\n( *)[\\\\S ]+\\\\n(\\\\2[\\\\S ]+\\\\n?)*',\n },\n { // Ruby/Rails erb\n begin: '<%[%=-]?', end: '[%-]?%>',\n subLanguage: 'ruby',\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0\n },\n { // local tags\n className: 'type',\n begin: '!' + hljs.UNDERSCORE_IDENT_RE,\n },\n { // data type\n className: 'type',\n begin: '!!' + hljs.UNDERSCORE_IDENT_RE,\n },\n { // fragment id &ref\n className: 'meta',\n begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$',\n },\n { // fragment reference *ref\n className: 'meta',\n begin: '\\\\*' + hljs.UNDERSCORE_IDENT_RE + '$'\n },\n { // array listing\n className: 'bullet',\n // TODO: remove |$ hack when we have proper look-ahead support\n begin: '\\\\-(?=[ ]|$)',\n relevance: 0\n },\n hljs.HASH_COMMENT_MODE,\n {\n beginKeywords: LITERALS,\n keywords: {literal: LITERALS}\n },\n // numbers are any valid C-style number that\n // sit isolated from other words\n {\n className: 'number',\n begin: hljs.C_NUMBER_RE + '\\\\b'\n },\n STRING\n ]\n };\n};","module.exports = function(hljs) {\n var XML_IDENT_RE = '[A-Za-z0-9\\\\._:-]+';\n var XML_ENTITIES = {\n className: 'symbol',\n begin: '&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;'\n };\n var XML_META_KEYWORDS = {\n\t begin: '\\\\s',\n\t contains:[\n\t {\n\t className: 'meta-keyword',\n\t begin: '#?[a-z_][a-z1-9_-]+',\n\t illegal: '\\\\n',\n }\n\t ]\n };\n var XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {begin: '\\\\(', end: '\\\\)'});\n var APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, {className: 'meta-string'});\n var QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'meta-string'});\n var TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /</,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: XML_IDENT_RE,\n relevance: 0\n },\n {\n begin: /=\\s*/,\n relevance: 0,\n contains: [\n {\n className: 'string',\n endsParent: true,\n variants: [\n {begin: /\"/, end: /\"/, contains: [XML_ENTITIES]},\n {begin: /'/, end: /'/, contains: [XML_ENTITIES]},\n {begin: /[^\\s\"'=<>`]+/}\n ]\n }\n ]\n }\n ]\n };\n return {\n aliases: ['html', 'xhtml', 'rss', 'atom', 'xjb', 'xsd', 'xsl', 'plist', 'wsf', 'svg'],\n case_insensitive: true,\n contains: [\n {\n className: 'meta',\n begin: '<![a-z]', end: '>',\n relevance: 10,\n contains: [\n\t\t\t\t XML_META_KEYWORDS,\n\t\t\t\t QUOTE_META_STRING_MODE,\n\t\t\t\t APOS_META_STRING_MODE,\n\t\t\t\t\tXML_META_PAR_KEYWORDS,\n\t\t\t\t\t{\n\t\t\t\t\t begin: '\\\\[', end: '\\\\]',\n\t\t\t\t\t contains:[\n\t\t\t\t\t\t {\n\t\t\t\t\t className: 'meta',\n\t\t\t\t\t begin: '<![a-z]', end: '>',\n\t\t\t\t\t contains: [\n\t\t\t\t\t XML_META_KEYWORDS,\n\t\t\t\t\t XML_META_PAR_KEYWORDS,\n\t\t\t\t\t QUOTE_META_STRING_MODE,\n\t\t\t\t\t APOS_META_STRING_MODE\n\t\t\t\t\t\t ]\n\t\t\t }\n\t\t\t\t\t ]\n\t\t\t\t }\n\t\t\t\t]\n },\n hljs.COMMENT(\n '<!--',\n '-->',\n {\n relevance: 10\n }\n ),\n {\n begin: '<\\\\!\\\\[CDATA\\\\[', end: '\\\\]\\\\]>',\n relevance: 10\n },\n XML_ENTITIES,\n {\n className: 'meta',\n begin: /<\\?xml/, end: /\\?>/, relevance: 10\n },\n {\n begin: /<\\?(php)?/, end: /\\?>/,\n subLanguage: 'php',\n contains: [\n // We don't want the php closing tag ?> to close the PHP block when\n // inside any of the following blocks:\n {begin: '/\\\\*', end: '\\\\*/', skip: true},\n {begin: 'b\"', end: '\"', skip: true},\n {begin: 'b\\'', end: '\\'', skip: true},\n hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null, className: null, contains: null, skip: true}),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null, className: null, contains: null, skip: true})\n ]\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n '<style' as a single word, followed by a whitespace or an\n ending braket. The '$' is needed for the lexeme to be recognized\n by hljs.subMode() that tests lexemes outside the stream.\n */\n begin: '<style(?=\\\\s|>)', end: '>',\n keywords: {name: 'style'},\n contains: [TAG_INTERNALS],\n starts: {\n end: '</style>', returnEnd: true,\n subLanguage: ['css', 'xml']\n }\n },\n {\n className: 'tag',\n // See the comment in the <style tag about the lookahead pattern\n begin: '<script(?=\\\\s|>)', end: '>',\n keywords: {name: 'script'},\n contains: [TAG_INTERNALS],\n starts: {\n end: '\\<\\/script\\>', returnEnd: true,\n subLanguage: ['actionscript', 'javascript', 'handlebars', 'xml']\n }\n },\n {\n className: 'tag',\n begin: '</?', end: '/?>',\n contains: [\n {\n className: 'name', begin: /[^\\/><\\s]+/, relevance: 0\n },\n TAG_INTERNALS\n ]\n }\n ]\n };\n};","exports = module.exports = stringify\nexports.getSerialize = serializer\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces)\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [], keys = []\n\n if (cycleReplacer == null) cycleReplacer = function(key, value) {\n if (stack[0] === value) return \"[Circular ~]\"\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\"\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this)\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)\n if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value)\n }\n else stack.push(value)\n\n return replacer == null ? value : replacer.call(this, key, value)\n }\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports['default'] = isImmutableDefault;\n\nfunction isImmutableDefault(value) {\n return typeof value !== 'object' || value === null || typeof value === 'undefined';\n}\n\nmodule.exports = exports['default'];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = trackForMutations;\n\nfunction trackForMutations(isImmutable, obj) {\n var trackedProperties = trackProperties(isImmutable, obj);\n return {\n detectMutations: function detectMutations() {\n return _detectMutations(isImmutable, trackedProperties, obj);\n }\n };\n}\n\nfunction trackProperties(isImmutable, obj) {\n var tracked = { value: obj };\n\n if (!isImmutable(obj)) {\n tracked.children = {};\n\n for (var key in obj) {\n tracked.children[key] = trackProperties(isImmutable, obj[key]);\n }\n }\n return tracked;\n}\n\nfunction _detectMutations(isImmutable, trackedProperty, obj) {\n var sameParentRef = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n var path = arguments.length <= 4 || arguments[4] === undefined ? [] : arguments[4];\n\n var prevObj = trackedProperty ? trackedProperty.value : undefined;\n\n var sameRef = prevObj === obj;\n\n if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\n return { wasMutated: true, path: path };\n }\n\n if (isImmutable(prevObj) || isImmutable(obj)) {\n return { wasMutated: false };\n }\n\n // Gather all keys from prev (tracked) and after objs\n var keysToDetect = {};\n Object.keys(trackedProperty.children).forEach(function (key) {\n keysToDetect[key] = true;\n });\n Object.keys(obj).forEach(function (key) {\n keysToDetect[key] = true;\n });\n\n var keys = Object.keys(keysToDetect);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var result = _detectMutations(isImmutable, trackedProperty.children[key], obj[key], sameRef, path.concat(key));\n\n if (result.wasMutated) {\n return result;\n }\n }\n return { wasMutated: false };\n}\nmodule.exports = exports[\"default\"];"],"sourceRoot":""}