mirror of
https://github.com/a2nt/silverstripe-webpack.git
synced 2024-10-22 17:05:31 +02:00
1 line
2.0 MiB
1 line
2.0 MiB
{"version":3,"sources":["webpack:///js/app.js","webpack:///webpack/bootstrap bf4e87ea9ffc4b0f0978","webpack:///external \"jQuery\"","webpack:///./node_modules/bootstrap/js/dist/util.js?2617","webpack:///./app/client/src/js/_events.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/hammerjs/hammer.js","webpack:///./app/client/src/js/app.js","webpack:///./app/client/src/js/_components/_ui.spinner.js","webpack:///./app/client/src/js/_components/_ui.carousel.js","webpack:///./app/client/src/js/_components/_ui.menu.js","webpack:///./app/client/src/js/_components/_ui.form.storage.js","webpack:///./app/client/src/js/_components/_ui.ajax.js","webpack:///./app/client/src/js/main.js","webpack:///./node_modules/bootstrap/js/dist/util.js","webpack:///./node_modules/bootstrap/js/dist/alert.js","webpack:///./node_modules/bootstrap/js/dist/button.js","webpack:///./node_modules/bootstrap/js/dist/carousel.js","webpack:///./node_modules/bootstrap/js/dist/collapse.js","webpack:///./node_modules/bootstrap/js/dist/dropdown.js","webpack:///./node_modules/bootstrap/js/dist/modal.js","webpack:///./node_modules/bootstrap/js/dist/tooltip.js","webpack:///./node_modules/bootstrap/js/dist/popover.js","webpack:///./node_modules/bootstrap/js/dist/tooltip.js?6cae","webpack:///./node_modules/bootstrap/js/dist/scrollspy.js","webpack:///./node_modules/bootstrap/js/dist/tab.js","webpack:///./node_modules/offcanvas-bootstrap/dist/js/bootstrap.offcanvas.js","webpack:///./node_modules/jquery-hammerjs/jquery.hammer.js","webpack:///./node_modules/pouchdb/dist/pouchdb.js","webpack:///./app/client/src/js/_components/routes/index.js","webpack:///./node_modules/routie/index.js","webpack:///./node_modules/path-browserify/index.js","webpack:///(webpack)/node_modules/process/browser.js","webpack:///./node_modules/smooth-scroll/dist/smooth-scroll.min.js","webpack:///./app/client/src/img nonrecursive \\.(png|jpe","webpack:///./app/client/src/img/icon-cfpb.png","webpack:///./app/client/src/img/icon-lender.png","webpack:///./app/client/src/img/logo.png","webpack:///./node_modules/font-awesome nonrecursive \\.(otf|eot|svg|ttf|woff|woff2)$"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","default","object","property","prototype","hasOwnProperty","p","s","jQuery","$","Util","toType","obj","toString","match","toLowerCase","getSpecialTransitionEndEvent","bindType","TRANSITION_END","delegateType","handle","event","target","is","this","handleObj","handler","apply","arguments","transitionEndEmulator","duration","_this","called","one","setTimeout","triggerTransitionEnd","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","find","length","err","getTransitionDurationFromElement","transitionDuration","css","parseFloat","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","nodeType","typeCheckConfig","componentName","config","configTypes","expectedTypes","value","valueType","RegExp","test","Error","toUpperCase","fn","emulateTransitionEnd","special","AJAX","LOADED","__webpack_exports__","global","microtaskDebounce","window","Promise","resolve","then","taskDebounce","scheduled","timeoutDuration","isFunction","functionToCheck","getType","getStyleComputedProperty","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","ownerDocument","_getStyleComputedProp","overflow","overflowX","overflowY","isIE","version","isIE11","isIE10","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","indexOf","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","getSize","computedStyle","max","getWindowSizes","height","width","getClientRect","offsets","_extends","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","_getWindowSizes","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","keys","map","key","area","sort","a","b","filteredAreas","filter","_ref2","computedPlacement","variation","getReferenceOffsets","state","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","arr","check","Array","findIndex","prop","cur","runModifiers","modifiers","data","ends","slice","forEach","function","console","warn","enabled","update","isDestroyed","instance","arrowStyles","attributes","flipped","options","positionFixed","flip","originalPlacement","position","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toCheck","style","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","defaultView","attachToScrollParents","callback","scrollParents","isBody","addEventListener","passive","push","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","removeEventListeners","removeEventListener","cancelAnimationFrame","isNumeric","isNaN","isFinite","setStyles","unit","setAttributes","setAttribute","applyStyle","arrowElement","applyStyleOnLoad","modifierOptions","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","floor","round","prefixedProperty","invertTop","invertLeft","x-placement","arrow","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","_data$offsets$arrow","querySelector","_data$offsets","isVertical","len","sideCapitalized","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","getOppositeVariation","clockwise","counter","index","validPlacements","concat","reverse","placementOpposite","flipOrder","behavior","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","keepTogether","toValue","str","parseOffset","offset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","shift","shiftvariation","shiftOffsets","hide","bound","inner","subtractLength","isBrowser","longerTimeoutBrowsers","navigator","userAgent","supportsMicroTasks","debounce","MSInputMethodContext","documentMode","classCallCheck","Constructor","TypeError","createClass","defineProperties","props","descriptor","writable","protoProps","staticProps","assign","source","placements","onLoad","Defaults","Popper","requestAnimationFrame","bind","jquery","Utils","PopperUtils","Ot","g","Function","eval","__WEBPACK_AMD_DEFINE_RESULT__","exportName","undefined","setTimeoutContext","timeout","context","bindFn","invokeArrayArg","arg","isArray","each","iterator","deprecate","method","message","deprecationMessage","stack","log","inherit","child","base","properties","childP","baseP","create","constructor","_super","boolOrFn","val","args","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","types","splitStr","type","hasParent","inStr","inArray","src","findByKey","toArray","uniqueArray","results","values","prefixed","camelProp","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","doc","parentWindow","Input","manager","self","inputTarget","domHandler","ev","enable","init","createInputInstance","inputClass","SUPPORT_POINTER_EVENTS","PointerEventInput","SUPPORT_ONLY_TOUCH","TouchInput","SUPPORT_TOUCH","TouchMouseInput","MouseInput","inputHandler","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","INPUT_START","isFinal","INPUT_END","INPUT_CANCEL","session","computeInputData","emit","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","timeStamp","now","deltaTime","angle","getAngle","distance","getDistance","computeDeltaXY","offsetDirection","getDirection","deltaX","deltaY","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","abs","scale","getScale","rotation","getRotation","maxPointers","computeIntervalInputData","srcEvent","offsetDelta","prevDelta","velocity","velocityX","velocityY","direction","last","lastInterval","COMPUTE_INTERVAL","v","clientX","clientY","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","p1","p2","PROPS_XY","sqrt","atan2","PI","PROPS_CLIENT_XY","evEl","MOUSE_ELEMENT_EVENTS","evWin","MOUSE_WINDOW_EVENTS","pressed","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","store","pointerEvents","SingleTouchInput","evTarget","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","started","normalizeSingleTouches","all","touches","changed","changedTouches","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","INPUT_MOVE","identifier","targetTouches","changedTargetTouches","touch","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","removeLastTouch","splice","DEDUP_TIMEOUT","isSyntheticEvent","t","dx","dy","DEDUP_DISTANCE","TouchAction","set","cleanTouchActions","actions","TOUCH_ACTION_NONE","hasPanX","TOUCH_ACTION_PAN_X","hasPanY","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_AUTO","Recognizer","defaults","id","STATE_POSSIBLE","simultaneous","requireFail","stateStr","STATE_CANCELLED","STATE_ENDED","STATE_CHANGED","STATE_BEGAN","directionStr","getRecognizerByNameIfManager","otherRecognizer","recognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","count","Hammer","recognizers","preset","Manager","handlers","oldCssProps","touchAction","toggleCssProps","item","add","recognizeWith","requireFailure","cssProps","triggerDomEvent","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","TEST_ELEMENT","createElement","Date","output","nextKey","extend","dest","merge","MOBILE_REGEX","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","compute","getTouchAction","join","preventDefaults","prevented","preventDefault","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_RECOGNIZED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","isValid","threshold","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","clearTimeout","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","stop","force","stopped","curRecognizer","existing","remove","on","events","off","STATE_FAILED","Tap","Pan","Swipe","Pinch","Rotate","Press","_classCallCheck","_ui_carousel__classCallCheck","_ui_menu__classCallCheck","_ui_form_storage__classCallCheck","_ui_ajax__classCallCheck","main__classCallCheck","importAll","r","external__jQuery_","external__jQuery__default","_events","_events_default","_createClass","SpinnerUI","show","_ui_spinner","_ui_carousel__createClass","_ui_menu__createClass","CarouselUI","dispose","$e","attr","$items","$indicators","append","prepend","carousel","hammer","_ui_form_storage__createClass","NAME","DATA_KEY","SlidingMenu","_element","$element","addClass","click","removeClass","removeData","_jQueryInterface","noConflict","JQUERY_NO_CONFLICT","ready","jsSlidingMenu","_typeof","STORAGE","localStorage","FormStorage","$elements","getItem","change","setItem","submit","clear","jsFormStorage","Symbol","_ui_ajax__createClass","_ui_ajax_AjaxUI","G","D","$Html","$Body","AjaxUI","$this","parents","load","url","MainUI","updateLocation","absoluteLocation","URLDetails","relative","substring","location","href","history","pushState","ajax","page","title","sync","async","dataType","cache","error","jqXHR","statusText","ga","success","status","getResponseHeader","js","regions","replaceRegion","preload","$head","eventName","items","Deferred","promise","dfds","dfd","always","when","$region","empty","jsAjaxUI","Title","ClassName","onpopstate","$existingLink","hasClass","_ui_ajax","w","smooth_scroll_min","smooth_scroll_min_default","main__createClass","smoothScroll","W","$AlertNotify","$SiteWideMessage","visibilityState","updateOnlineStatus","onLine","ScrollTo","animateScroll","speed","setInterval","complete","datastatus","reload","loadImages","getScript","fonts","WebFont","google","families","print","substr","msg","cls","fadeOut","alert","fadeIn","play","$imgs","$imgUrls","$imgLazyUrls","lazySrc","_defineProperties","Selector","DISMISS","Event","CLOSE","CLOSED","CLICK_DATA_API","ALERT","FADE","SHOW","Alert","_proto","close","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","closest","closeEvent","_destroyElement","detach","_handleDismiss","alertInstance","ACTIVE","BUTTON","FOCUS","DATA_TOGGLE_CARROT","DATA_TOGGLE","INPUT","FOCUS_BLUR_DATA_API","Button","toggle","triggerChangeEvent","addAriaPressed","checked","activeElement","hasAttribute","classList","focus","toggleClass","_objectSpread","ownKeys","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","_defineProperty","EVENT_KEY","Default","keyboard","slide","pause","wrap","DefaultType","Direction","NEXT","PREV","LEFT","RIGHT","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHEND","LOAD_DATA_API","CAROUSEL","ITEM","ACTIVE_ITEM","NEXT_PREV","INDICATORS","DATA_SLIDE","DATA_RIDE","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","_config","_getConfig","_indicatorsElement","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","to","activeIndex","_getItemIndex","_this2","_keydown","tagName","makeArray","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","delta","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","nextIndicator","directionalClassName","orderClassName","_this3","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","action","_dataApiClickHandler","slideIndex","$carousel","SHOWN","HIDE","HIDDEN","COLLAPSE","COLLAPSING","COLLAPSED","Dimension","WIDTH","HEIGHT","ACTIVES","Collapse","_isTransitioning","_triggerArray","tabToggles","elem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","not","startEvent","dimension","_getDimension","setTransitioning","capitalizedDimension","scrollSize","$elem","isTransitioning","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","$target","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","CLICK","KEYDOWN_DATA_API","KEYUP_DATA_API","DISABLED","DROPUP","DROPRIGHT","DROPLEFT","MENURIGHT","MENULEFT","POSITION_STATIC","FORM_CHILD","MENU","NAVBAR_NAV","VISIBLE_ITEMS","AttachmentMap","TOP","TOPEND","BOTTOM","BOTTOMEND","RIGHTEND","LEFTEND","boundary","display","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","_getParentFromElement","isActive","_clearMenus","showEvent","referenceElement","_getPopperConfig","noop","stopPropagation","_getPlacement","$parentDropdown","offsetConf","popperConfig","toggles","dropdownMenu","hideEvent","_dataApiKeydownHandler","backdrop","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","SCROLLBAR_MEASURER","BACKDROP","OPEN","DIALOG","DATA_DISMISS","FIXED_CONTENT","STICKY_CONTENT","NAVBAR_TOGGLER","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","handleUpdate","ELEMENT_NODE","appendChild","_enforceFocus","shownEvent","transitionComplete","_this4","has","_this5","_this6","_this7","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this8","animate","className","appendTo","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","isModalOverflowing","scrollHeight","paddingLeft","paddingRight","_getScrollbarWidth","_this9","actualPadding","calculatedPadding","actualMargin","calculatedMargin","margin","scrollDiv","scrollbarWidth","_this10","BSCLS_PREFIX_REGEX","animation","template","delay","container","fallbackPlacement","AUTO","HoverState","OUT","INSERTED","FOCUSOUT","TOOLTIP","TOOLTIP_INNER","ARROW","Trigger","HOVER","MANUAL","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","disable","toggleEnabled","dataKey","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","getTipElement","isWithContent","isInTheDom","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_handlePopperPlacementChange","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","$tip","setElementContent","content","text","eventIn","eventOut","_fixTitle","titleType","tabClass","initConfigAnimation","_inheritsLoose","subClass","superClass","__proto__","TITLE","CONTENT","Popover","_Tooltip","_getContent","ACTIVATE","SCROLL","DROPDOWN_ITEM","DROPDOWN_MENU","DATA_SPY","NAV_LIST_GROUP","NAV_LINKS","NAV_ITEMS","LIST_ITEMS","DROPDOWN","DROPDOWN_ITEMS","DROPDOWN_TOGGLE","OffsetMethod","OFFSET","POSITION","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","pageYOffset","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","scrollSpys","$spy","tab","ACTIVE_UL","DROPDOWN_ACTIVE_CHILD","Tab","previous","listElement","itemSelector","hiddenEvent","activeElements","active","_transitionComplete","dropdownChild","dropdownElement","__webpack_provided_window_dot_jQuery","__bind","me","Offcanvas","OffcanvasDropdown","OffcanvasTouch","_clickEvent","nav","dropdown","offcanvas","_getFade","_getCss","_touchEnd","_touchMove","_touchStart","endThreshold","startThreshold","outerWidth","maxStartThreshold","currentX","fade","startX","originalEvent","pageX","outerHeight","sendEvents","_clearCss","bodyOverflow","-webkit-transform","-webkit-transition-duration","-moz-transform","-moz-transition","-o-transform","-o-transition","opacity","_sendEventsAfter","_sendEventsBefore","_documentClicked","_close","_open","_clicked","_navbarHeight","_transformSupported","clickedEl","asSupport","regex","translate3D","cssText","bsOffcanvas","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","factory","hammerify","$el","originalEmit","require","f","define","u","code","1","_dereq_","argsArray","fun","useColors","WebkitAppearance","firebug","exception","table","parseInt","$1","formatArgs","namespace","humanize","diff","color","lastC","save","namespaces","storage","removeItem","debug","env","DEBUG","chrome","local","colors","formatters","j","JSON","stringify","9","selectColor","charCodeAt","createDebug","curr","ms","prevTime","coerce","unshift","format","formatter","instances","names","skips","8","EventEmitter","_maxListeners","isNumber","isObject","isUndefined","defaultMaxListeners","setMaxListeners","er","listeners","addListener","listener","newListener","warned","trace","once","removeListener","fired","list","removeAllListeners","listenerCount","evlistener","emitter","nextTick","draining","oldQueue","queue","immediate","task","scheduleDrain","Mutation","MutationObserver","WebKitMutationObserver","observer","createTextNode","observe","characterData","setImmediate","MessageChannel","scriptEl","onreadystatechange","channel","port1","onmessage","port2","postMessage","6","ctor","superCtor","super_","TempCtor","7","INTERNAL","resolver","PENDING","outcome","safelyResolveThenable","QueueItem","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","func","returnValue","reject","getThen","thenable","onError","onSuccess","tryToUnwrap","tryCatch","out","reason","iterable","resolved","resolveFromAll","outValue","race","response","REJECTED","FULFILLED","catch","parse","String","exec","h","fmtShort","fmtLong","plural","ceil","long","defaultSetTimout","defaultClearTimeout","runTimeout","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","currentQueue","queueIndex","drainQueue","run","Item","array","browser","argv","versions","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","10","amd","glob","SparkMD5","md5cycle","k","md5blk","md5blks","md5blk_array","md51","tail","tmp","lo","hi","md51_array","subarray","Uint8Array","rhex","hex_chr","hex","toUtf8","unescape","encodeURIComponent","utf8Str2ArrayBuffer","returnUInt8Array","buff","ArrayBuffer","arrayBuffer2Utf8Str","fromCharCode","concatenateArrayBuffers","first","second","byteLength","buffer","hexToBinaryString","bytes","clamp","num","targetArray","sourceArray","begin","appendBinary","contents","_buff","_length","_hash","raw","ret","_finish","getState","setState","hashBinary","11","v1","v4","uuid","14","15","12","bytesToUuid","buf","bth","byteToHex","13","getRandomValues","crypto","msCrypto","rnds8","rnds","_nodeId","clockseq","_clockseq","seedBytes","rng","msecs","getTime","nsecs","_lastNSecs","dt","_lastMSecs","tl","tmh","ii","16","pop","metaStack","lastMetaElement","lastElementIndex","arrayPrefix","objPrefix","res","collationIndex","parsedNum","numChar","parsedString","lastCh","numConsecutiveSlashes","ch","arrayElement","objElement","17","_interopDefault","ex","isBinaryObject","Blob","cloneArrayBuffer","cloneBinaryObject","size","webkitSlice","isPlainObject","proto","getPrototypeOf","Ctor","funcToString","objectCtorString","clone","newObject","toISOString","getArguments","toPromise","usedCB","PouchPromise","fulfill","resp","mesg","logApiCall","logArgs","origCallback","responseArgs","adapterFun","_closed","_destroyed","taskqueue","isReady","addTask","failed","mangle","unmangle","Map$1","_store","Set$1","pick","identityFunction","formatResultForOpenRevsGet","ok","bulkGet","db","opts","collapseResultsAndFinish","perDocResults","docs","info","checkDone","numDone","numDocs","gotResult","docIndex","nextBatch","allRequests","upTo","MAX_NUM_CONCURRENT_REQUESTS","batch","processBatch","docId","docIdx","docRequests","requestsById","docOpts","open_revs","request","rev","formatResult","param","requests","ExportedMap","isChromeApp","hasLocalStorage","hasLocal","attachBrowserEvents","onChanged","db_name","dbName","newValue","attachEvent","Changes","_listeners","guardedConsole","randomNumber","maxTimeout","defaultBackOff","explainError","PouchError","createError","CustomPouchError","generateErrorFromResponse","UNKNOWN_ERROR","tryFilter","req","BAD_REQUEST","filterChange","hasFilter","query","query_params","filterReturn","include_docs","attachments","att","_attachments","stub","flatten","arrs","invalidIdError","INVALID_ID","RESERVED_ID","MISSING_ID","isRemote","_remote","ee","parseDesignDocFunctionName","parts","normalizeDesignDocFunctionName","normalized","parseUri","parser","uri","encoded","decodeURIComponent","qName","qParser","$0","$2","scopeEval","scope","upsert","diffFun","docRev","_rev","newDoc","updated","_id","tryAndPut","put","uuidV4","winningRev","metadata","winningId","winningPos","winningDeleted","toVisit","rev_tree","tree","ids","branches","pos","deleted","traverseRevTree","revs","newCtx","ctx","sortByPos","collectLeaves","leaves","isLeaf","acc","collectConflicts","win","conflicts","leaf","compactTree","revHash","rootToLeaf","paths","sortByPos$1","binarySearch","comparator","mid","low","high","insertSorted","idx","pathToTree","path","numStemmed","root","currentLeaf","compareTree","mergeTree","in_tree1","in_tree2","tree1","tree2","merged","doMerge","dontExpand","restree","branch","t1","t2","candidateParents","trees","parentIdx","elements","elementsLen","stem","depth","stemmedRevs","stemmed","newTree","revExists","splitRev","targetPos","targetId","getTrees","isDeleted","isLocalId","latest","historyNode","historyRev","tryCatchInChangeListener","pending","lastSeq","Changes$2","onDestroy","cancel","onChange","isCancelled","validateChanges","processChange","changeList","changes","_conflicts","compare","yankError","cleanDocs","_deleted","atts","compareByIdThenRev","idCompare","_revisions","computeHeight","edges","prnt","rev$$1","edge","allDocsKeysParse","skip","limit","descending","doNextCompaction","_compactionQueue","last_seq","_compact","attachmentNameError","AbstractPouchDB","TaskQueue$1","parseAdapter","adapter","adapters","PouchDB","preferredAdapters","adapterName","use_prefix","prepareForDestruction","onDestroyed","from_constructor","onClosed","__opts","auto_compaction","prefixedName","backend","_adapter","valid","fail","debugPouch","logs","logId","getFieldFromDoc","parsedField","compare$1","parseField","fieldName","fields","current","isCombinationalField","field","combinationFields","getKey","getValue","mergeAndedSelectors","selectors","matcher","$eq","fieldMatchers","operator","mergeGtGte","mergeLtLte","mergeNe","mergeEq","$gte","$gt","$lte","$lt","$ne","massageSelector","wasAnded","$and","orOrNor","subSelector","$not","pad","padWith","upToLength","targetLength","padLeft","collate","normalizeKey","ai","bi","stringCollate","arrayCollate","objectCollate","Infinity","origKey","toJSON","indexify","numToIndexableString","toIndexableString","objKey","SEP","parseNumber","originalIdx","neg","numAsString","magAsString","MAGNITUDE_DIGITS","magnitude","MIN_MAGNITUDE","parseIndexableString","parsedStr","ak","bk","expFormat","toExponential","magForComparison","magString","factor","factorStr","toFixed","createFieldSorter","getFieldValuesAsArray","sorting","aRow","bRow","aFieldValues","bFieldValues","collation","filterInMemoryFields","rows","requestDef","inMemoryFields","row","rowFilter","fieldSorter","every","docFieldValue","matchCominationalSelector","matchSelector","userOperator","userValue","orMatchers","matchers","fieldExists","fieldIsNotUndefined","modField","divisor","mod","arrayContainsValue","arrayContainsAllValues","arraySize","regexMatch","typeMatch","matchesSelector","rowsMatched","evalFilter","evalView","validate","filterName","normalize","view","shouldFilter","changesHandler","doc_ids","viewName","ddoc","mapFun","views","MISSING_DOC","doChanges","filterFun","filters","applyChangesFilterPlugin","_changesFilterPlugin","toObject","parseRevisionInfo","INVALID_REV","makeRevTreeFromRevisions","revisions","revisionIds","parseDoc","newEdits","nRevNum","newRevId","revInfo","_rev_tree","specialKey","reservedWords","DOC_VALIDATION","dataWords","createBlob","Builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","builder","getBlob","binaryStringToArrayBuffer","bin","binStringToBluffer","binString","b64ToBluffer","b64","thisAtob","arrayBufferToBinaryString","binary","readAsBinaryString","blob","FileReader","FileReaderSync","readAsArrayBuffer","reader","hasBinaryString","onloadend","blobToBinaryString","blobOrBuffer","blobToBase64","base64","thisBtoa","rawToBase64","sliceBlob","appendBlob","arrayBuffer","appendString","string","binaryMd5","setImmediateShim","loadNextChunk","done","currentChunk","chunkSize","chunks","inputIsString","MD5_CHUNK_SIZE","Md5","stringMd5","parseBase64","BAD_ARG","preprocessString","blobType","asBinary","content_type","digest","preprocessBlob","md5","preprocessAttachment","preprocessAttachments","docInfos","docv","overallErr","docInfo","processedAttachment","recv","updateDoc","revLimit","cb","writeDoc","previousWinningRev","previouslyDeleted","isRoot","REV_CONFLICT","newRev","rev_map","newRevIsDeleted","winningRev$$1","winningRevIsDeleted","rootIsMissing","processDocs","api","fetchedDocs","tx","overallCallback","insertDoc","resultsIdx","checkAllDocsDone","docsDone","docsToDo","new_edits","idsToDocs","currentDoc","docWritten","nextDoc","safeJsonParse","vuvuzela","safeJsonStringify","json","idbError","evt","IDB_ERROR","encodeMetadata","deletedOrLocal","seq","decodeMetadata","storedObject","decodeDoc","_doc_id_rev","lastIndexOf","readBlobData","asBlob","fetchAttachmentsIfNecessary","txn","fetchAttachment","attObj","objectStore","ATTACH_STORE","onsuccess","postProcessAttachments","attNames","$inject_Object_assign","compactRevs","deleteOrphanedAttachments","possiblyOrphanedDigests","attAndSeqStore","IDBKeyRange","attStore","delete","seqStore","BY_SEQ_STORE","ATTACH_AND_SEQ_STORE","openCursor","only","cursor","digestSeq","primaryKey","continue","openTransactionSafely","idb","stores","mode","transaction","idbBulkDocs","dbOpts","startTransaction","DOC_STORE","LOCAL_STORE","META_STORE","txnResult","onabort","ontimeout","oncomplete","docStore","bySeqStore","attachStore","attachAndSeqStore","metaStore","metaDoc","updateDocCountIfReady","verifyAttachments","preconditionErrored","fetchExistingDocs","onAllDocsProcessed","allDocsProcessed","idbProcessDocs","revs_limit","docCount","docCountDelta","numFetched","readMetadata","changesHandler$$1","notify","_meta","verifyAttachment","MISSING_STUB","finish","digests","filename","attErr","isUpdate","writeAttachments","finishDoc","afterPutDoc","revsToDelete","metadataToStore","afterPutMetadata","afterPutDocError","insertAttachmentMappings","putReq","onerror","collectResults","attachmentSaved","revpos","saveAttachment","attsAdded","attsToAdd","newAtt","docInfoError","blobSupport","runBatchedCursor","keyRange","batchSize","onBatch","onGetAll","valuesBatch","keysBatch","pseudoCursor","onGetAllKeys","continuePseudoCursor","newKeyRange","lastKey","upper","upperOpen","lowerBound","getAll","getAllKeys","onCursor","allDocsKeys","createKeyRange","inclusiveEnd","upperBound","idbAllDocs","fetchDocAsynchronously","docIdRevIndex","allDocsInner","batchValues","batchValue","batchKeys","onResultsReady","returnVal","total_rows","update_seq","updateSeq","onTxnComplete","keyRangeError","startkey","endkey","inclusive_end","maxKey","checkBlobSupport","blob$$1","DETECT_BLOB_SUPPORT_STORE","matchedChrome","matchedEdge","countDocs","tryCode","applyNext","running","enqueueTask","processMetadataAndWinningDoc","winningDoc","filtered","numResults","returnDocs","onBatchDone","winningDocs","metadatas","fetchWinningDocAndMetadata","onGetMetadata","docIdRev","docIds","docIdsToMetadata","continuous","ExportedSet","since","return_docs","objectStores","IdbPouch","thisCallback","createSchema","createObjectStore","keyPath","autoIncrement","createIndex","unique","addDeletedOrLocalIndex","createLocalStoreSchema","migrateLocalStore","localStore","seqCursor","addAttachAndSeqStore","migrateAttsAndSeqs","digestMap","migrateMetadata","decodeMetadataCompat","onGetMetadataSeq","metadataSeq","instanceId","_bulkDocs","reqOpts","_get","attachId","blobData","_info","doc_count","idb_attachment_format","_allDocs","_changes","cachedDBs","_getRevisionTree","_doCompaction","_getLocal","_putLocal","oldRev","oStore","oldDoc","_removeLocal","_destroy","openReq","openReqList","indexedDB","deleteDatabase","cached","tryStorageOption","open","ADAPTER_VERSION","onupgradeneeded","migration","migrations","oldVersion","completeSetup","storedMetaDoc","storeMetaDocIfReady","instanceKey","onversionchange","blobSupportPromise","IDBPouch","decodeUtf8","escape","hexToInt","charCode","parseHexUtf8","parseHexUtf16","parseHexString","encoding","quote","escapeBlob","unescapeBlob","stringifyDoc","unstringifyDoc","qMarks","select","joiner","where","orderBy","compactRevs$1","deleteOrphans","seqs","sql","ATTACH_AND_SEQ_STORE$1","executeSql","digestsToCheck","nonOrphanedDigests","ATTACH_STORE$1","BY_SEQ_STORE$1","websqlError","errorNameMatch","errorName","errorReason","WSQ_ERROR","websqlBulkDocs","websqlChanges","_name","cnt","sqlArgs","deletedInt","insertId","dataWritten","fetchSql","attachmentErr","revsToCompact","DOC_STORE$1","metadataStr","params","websqlProcessDocs","userDocs","docInfoErrors","openDatabaseWithOpts","websql","description","openDBSafely","openDB","cachedResult","cachedDatabases","fetchAttachmentsIfNecessary$1","attOpts","_","WebSqlPouch","dbCreated","runMigration2","DOC_STORE_WINNINGSEQ_INDEX_SQL","BY_SEQ_STORE_DELETED_INDEX_SQL","runMigration3","LOCAL_STORE$1","doNext","runMigration4","updateRows","doc_id_rev","doc_id","BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL","runMigration5","nextPage","SELECT_DOCS","DOC_STORE_AND_BY_SEQ_JOINER","pageSize","digestSeqs","digestSeqPairs","pair","attachAndRev","ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL","ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL","runMigration6","runMigration7","checkEncoding","onGetInstanceId","idRequests","onGetVersion","dbVersion","meta","META_STORE$1","attach","initSeq","initSeqArgs","ADAPTER_VERSION$1","setupDone","dbid","tasks","nextMigration","fetchVersion","db_version","getMaxSeq","latest$$1","websqlOpts","POUCH_VERSION","openDBResult","readTransaction","theSeq","theDocCount","websql_encoding","latestRev","totalRows","criteria","destinctKeys","bindingStr","selectStmt","reportChange","maxSeq","escaped","putLocal","rowsAffected","removeLocal","canOpenTestDB","openDatabase","isValidWebSQL","hasLS","localStorageKey","openedTestDB","openDB$2","WebSQLPouch","_opts","WebSqlPouch$1","wrappedFetch","wrappedPromise","fetch","fetchRequest","timer","headers","Headers","fetchOptions","credentials","processData","fetchResponse","statusCode","abort","xhRequest","xhr","timedout","abortReq","cleanUp","timeoutReq","onprogress","upload","XMLHttpRequest","withCredentials","Accept","responseType","setRequestHeader","readyState","responseText","send","hasXhr","defaultBody","ajaxCore","missing","ajax$1","ua","isSafari","isTrident","isEdge","shouldCacheBust","hasArgs","pool","promiseFactories","runNext","runNextBatch","thisErr","readAttachmentsAsBlobOrBuffer","encodeDocId","preprocessAttachments$2","hasUrlPrefix","protocol","getHost","user","password","auth","username","genDBUrl","genUrl","pathDel","port","paramsToStr","HttpPouch","userOpts","reqAjax","ajaxOpts","defaultHeaders","_ajax","ajaxPromise","adapterFun$$1","setup","skipSetup","skip_setup","setupPromise","dbUrl","encodeAttachmentId","attachmentId","nAuth","token","Authorization","uuid$$1","compact","ping","compact_running","doBulkGet","doBulkGetShim","MAX_SIMULTANEOUS_REVS","numBatches","subOpts","batchNum","supportsBulkGet","supportsBulkGetMap","fetchAttachments","filenames","fetchAllAttachments","docOrDocs","revs_info","docOrId","optsOrRev","getAttachment","removeAttachment","putAttachment","Content-Type","_put","allDocs","start_key","end_key","paramStr","batch_size","CHANGES_BATCH_SIZE","heartbeat","DEFAULT_HEARTBEAT","requestTimeout","CHANGES_TIMEOUT_BUFFER","leftToFetch","feed","seq_interval","param_name","lastFetchedSeq","aborted","xhrOpts","fetched","raw_results_length","finished","revsDiff","HttpPouch$1","QueryParseError","captureStackTrace","NotFoundError","BuiltInError","promisedCallback","callbackify","fin","finalPromiseFactory","sequentialize","promiseFactory","that","uniq","theSet","mapToKeysArray","createBuiltInError","sum","jLen","jNum","evalFunctionWithEval","TaskQueue$2","createViewSignature","reduceFun","createView","sourceDB","temporary","localDocName","cachedViews","viewSignature","_cachedViews","promiseForView","diffFunction","fullViewName","depDbs","depDbName","registerDependentDatabase","lastSeqDoc","parseViewName","isGenOne","emitError","getBuiltIn","reduceFunString","builtInReduce","_sum","_count","_stats","mapper","origMap","reducer","ddocValidator","abstract","viewCleanup","isGenOne$1","fileHasChanged","localDoc","remoteDoc","getDocAttachments","getDocAttachmentsFromTargetOrSource","doCheckForLocalAttachments","createBulkGetOpts","diffs","missingRev","getDocs","getAllDocs","bulkGetOpts","bulkGetResponse","cancelled","bulkGetInfo","resultDocs","hasAttachments","hasConflicts","fetchRevisionOneDocs","getRevisionOneDocs","returnResult","updateCheckpoint","checkpoint","session_id","replicator","REPLICATOR","CHECKPOINT_VERSION","CHECKPOINT_HISTORY_SIZE","Checkpointer","compareReplicationLogs","srcDoc","tgtDoc","compareReplicationHistory","sourceHistory","targetHistory","S","sourceRest","T","targetRest","hasSessionId","LOWEST_SEQ","sessionId","rest","isForbiddenError","backOff","retry","back_off_function","backOffSet","current_back_off","STARTING_BACK_OFF","removeBackOffSetter","sortObjectPropertiesByKey","queryParams","generateReplicationId","filterViewName","queryData","md5sum","replicate","initCheckpointer","checkpointer","repId","checkpointOpts","writeSourceCheckpoint","writeTargetCheckpoint","writeDocs","changedDocs","currentBatch","bulkOpts","bulkDocs","completeReplication","errorsById","errorsNo","doc_write_failures","docs_written","errors","finishBatch","outResult","writingCheckpoint","writeCheckpoint","getChanges","onCheckpointError","getDiffs","getBatchDocs","got","docs_read","startNextBatch","batches","processPendingBatch","abortReplication","pendingBatch","changesOpts","live","changesCompleted","replicationCompleted","fatalError","end_time","onChangesComplete","changesPending","onChangesError","abortChanges","batches_limit","_abortChanges","startChanges","getCheckpoint","start_time","_addedListeners","Replication","toPouch","PouchConstructor","replicateWrapper","replicateRet","sync$1","Sync","pullChange","pushChange","pushDenied","pullDenied","pushPaused","pullPaused","pushActive","pullActive","removeAll","isChange","isDenied","isPaused","removed","addOneListener","canceled","optsPush","optsPull","pull","replication","replicateMethods","other","lie","inherits","mangled","Map","Set","species","eventFunction","inprogress","notifyLocalWindows","nextSource","MISSING_BULK_DOCS","QUERY_PARSE_ERROR","NOT_AN_OBJECT","newPromise","post","putDoc","oldRevId","oldRevNum","newRevNum","createAttachment","prevrevpos","was_delete","addToMissing","revId","processDoc","missingForId","missingObj","compactDocument","maxHeight","revTree","candidates","promises","onComplete","finishOpenRevs","splittedRev","revNo","currentPath","hashIndex","indexOfRev","howMany","_revs_info","incompatibleOpt","_type","attachmentError","dependentDb","dependentDbs","depDB","destroyDb","usePrefix","deletedMap","trueName","execute","eventEmitter","Pouch","destructListeners","_destructionListeners","dbList","addToPreferredAdapters","plugin","__defaults","defaultOpts","PouchAlt","$elemMatch","$allMatch","$exists","$mod","neValue","$in","$nin","$size","$all","$regex","$type","atob","btoa","platform","hasFetch","persistentQueues","tempViewQueue","CHANGES_BATCH_SIZE$1","sumsqr","_sumsqr","tryMap","tryReduce","rereduce","sortByKeyThenValue","keyCompare","sliceResults","rowToDocId","postprocessAttachments","addHttpParam","paramName","asJson","coerceInteger","integerCandidate","asNumber","Number","coerceOptions","group_level","checkPositiveInteger","number","checkQueryParseError","startkeyName","endkeyName","group","optionName","httpQuery","keysAsString","customQuery","_query","customViewCleanup","_viewCleanup","defaultsTo","getDocsToPersist","docIdsToChangesAndEmits","getKeyValueDocs","processKeyValueDocs","kvDocsRes","kvDocs","oldKeys","indexableKeysToKeyValues","keyValue","newKeys","kvDoc","metaDocId","defaultMetaDoc","docData","saveKeyValues","listOfDocsToPersist","docsToPersist","getQueue","updateView","updateViewInQueue","mapResults","processNextBatch","currentSeq","createDocIdsToChangesAndEmits","createIndexableKeysToKeyValues","emittedKeyValue","complexKey","reduceView","shouldGroup","groups","lvl","POSITIVE_INFINITY","groupKey","reduceTry","queryView","queryViewInQueue","fetchFromView","viewOpts","expectedKeys","parsedKeyAndDocId","onMapResultsReady","finalResults","shouldReduce","allDocsRes","docIdsToDocs","fetchPromises","keyStart","keyEnd","httpViewCleanup","localViewCleanup","docsToViews","designDocName","viewsToStatus","ddocName","viewDBNames","statusIsGood","viewDBName","dbsToDelete","destroyPromises","queryPromised","stale","abstractQuery","mapreduce","updateTarget","updateSource","comparisons","targetDoc","sourceDoc","cleanup","_readyCalled","__WEBPACK_IMPORTED_MODULE_0__events__","__WEBPACK_IMPORTED_MODULE_0__events___default","__WEBPACK_IMPORTED_MODULE_1_routie__","__WEBPACK_IMPORTED_MODULE_1_routie___default","navigation","carousel:id:num","methods","__slice","_map","subpath","normalizeArray","allowAboveRoot","up","xs","splitPathRe","splitPath","resolvedPath","resolvedAbsolute","isAbsolute","trailingSlash","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","ext","extname","ignore","header","topOnEmptyHash","clip","easing","customEasing","updateURL","popstate","emitEvents","Element","matchMedia","matches","InvalidCharacterError","offsetTop","anchor","outline","scrollTo","CustomEvent","bubbles","detail","E","O","I","cancelScroll","C","L","A","H","q","Q","metaKey","ctrlKey","hostname","pathname","webpackContext","webpackContextResolve","./icon-cfpb.png","./icon-lender.png","./logo.png","webpackEmptyContext"],"mappings":"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","file":"js/app.js","sourcesContent":["/******/ (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/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"app/client/dist/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 6);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = jQuery;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Util = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator;\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || '';\n }\n\n try {\n var $selector = $(document).find(selector);\n return $selector.length > 0 ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $(element).css('transition-duration');\n var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n }\n };\n setTransitionEndSupport();\n return Util;\n}($);\n//# sourceMappingURL=util.js.map\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = Util;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n/**\n * Add your global events here\n */\n\nmodule.exports = {\n AJAX: 'ajax-load',\n LOADED: 'load'\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* WEBPACK VAR INJECTION */(function(global) {/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.3\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);\n}\n\nfunction getWindowSizes() {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var styles = getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n // Avoid blurry text by using full pixel integers.\n // For pixel-perfect positioning, top/bottom prefers rounded\n // values, while left/right prefers floored values.\n var offsets = {\n left: Math.floor(popper.left),\n top: Math.round(popper.top),\n bottom: Math.round(popper.bottom),\n right: Math.floor(popper.right)\n };\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overriden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Popper);\n//# sourceMappingURL=popper.js.map\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(4)))\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n return Hammer;\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n\n// EXTERNAL MODULE: ./app/client/src/scss/app.scss\nvar app = __webpack_require__(7);\nvar app_default = /*#__PURE__*/__webpack_require__.n(app);\n\n// EXTERNAL MODULE: ./node_modules/popper.js/dist/esm/popper.js\nvar popper = __webpack_require__(3);\n\n// EXTERNAL MODULE: ./node_modules/bootstrap/js/dist/util.js\nvar util = __webpack_require__(8);\nvar util_default = /*#__PURE__*/__webpack_require__.n(util);\n\n// EXTERNAL MODULE: ./node_modules/bootstrap/js/dist/alert.js\nvar dist_alert = __webpack_require__(9);\nvar alert_default = /*#__PURE__*/__webpack_require__.n(dist_alert);\n\n// EXTERNAL MODULE: ./node_modules/bootstrap/js/dist/button.js\nvar dist_button = __webpack_require__(10);\nvar button_default = /*#__PURE__*/__webpack_require__.n(dist_button);\n\n// EXTERNAL MODULE: ./node_modules/bootstrap/js/dist/carousel.js\nvar carousel = __webpack_require__(11);\nvar carousel_default = /*#__PURE__*/__webpack_require__.n(carousel);\n\n// EXTERNAL MODULE: ./node_modules/bootstrap/js/dist/collapse.js\nvar collapse = __webpack_require__(12);\nvar collapse_default = /*#__PURE__*/__webpack_require__.n(collapse);\n\n// EXTERNAL MODULE: ./node_modules/bootstrap/js/dist/dropdown.js\nvar dropdown = __webpack_require__(13);\nvar dropdown_default = /*#__PURE__*/__webpack_require__.n(dropdown);\n\n// EXTERNAL MODULE: ./node_modules/bootstrap/js/dist/modal.js\nvar modal = __webpack_require__(14);\nvar modal_default = /*#__PURE__*/__webpack_require__.n(modal);\n\n// EXTERNAL MODULE: ./node_modules/bootstrap/js/dist/tooltip.js\nvar tooltip = __webpack_require__(15);\nvar tooltip_default = /*#__PURE__*/__webpack_require__.n(tooltip);\n\n// EXTERNAL MODULE: ./node_modules/bootstrap/js/dist/popover.js\nvar popover = __webpack_require__(16);\nvar popover_default = /*#__PURE__*/__webpack_require__.n(popover);\n\n// EXTERNAL MODULE: ./node_modules/bootstrap/js/dist/scrollspy.js\nvar scrollspy = __webpack_require__(18);\nvar scrollspy_default = /*#__PURE__*/__webpack_require__.n(scrollspy);\n\n// EXTERNAL MODULE: ./node_modules/bootstrap/js/dist/tab.js\nvar tab = __webpack_require__(19);\nvar tab_default = /*#__PURE__*/__webpack_require__.n(tab);\n\n// EXTERNAL MODULE: ./node_modules/offcanvas-bootstrap/dist/js/bootstrap.offcanvas.js\nvar bootstrap_offcanvas = __webpack_require__(20);\nvar bootstrap_offcanvas_default = /*#__PURE__*/__webpack_require__.n(bootstrap_offcanvas);\n\n// EXTERNAL MODULE: external \"jQuery\"\nvar external__jQuery_ = __webpack_require__(0);\nvar external__jQuery__default = /*#__PURE__*/__webpack_require__.n(external__jQuery_);\n\n// EXTERNAL MODULE: ./node_modules/hammerjs/hammer.js\nvar hammer = __webpack_require__(5);\nvar hammer_default = /*#__PURE__*/__webpack_require__.n(hammer);\n\n// EXTERNAL MODULE: ./node_modules/jquery-hammerjs/jquery.hammer.js\nvar jquery_hammer = __webpack_require__(21);\nvar jquery_hammer_default = /*#__PURE__*/__webpack_require__.n(jquery_hammer);\n\n// EXTERNAL MODULE: ./node_modules/pouchdb/dist/pouchdb.js\nvar pouchdb = __webpack_require__(22);\nvar pouchdb_default = /*#__PURE__*/__webpack_require__.n(pouchdb);\n\n// EXTERNAL MODULE: ./app/client/src/js/_components/routes/index.js\nvar routes = __webpack_require__(23);\n\n// EXTERNAL MODULE: ./app/client/src/js/_events.js\nvar _events = __webpack_require__(2);\nvar _events_default = /*#__PURE__*/__webpack_require__.n(_events);\n\n// CONCATENATED MODULE: ./app/client/src/js/_components/_ui.spinner.js\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\nvar SpinnerUI = function ($) {\n var SpinnerUI = function () {\n function SpinnerUI() {\n _classCallCheck(this, SpinnerUI);\n }\n\n _createClass(SpinnerUI, null, [{\n key: 'show',\n value: function show(callback) {\n $('#PageLoading').show(0, callback);\n }\n }, {\n key: 'hide',\n value: function hide(callback) {\n $('#PageLoading').hide('slow', callback);\n }\n }]);\n\n return SpinnerUI;\n }();\n\n return SpinnerUI;\n}(external__jQuery__default.a);\n\n/* harmony default export */ var _ui_spinner = (SpinnerUI);\n// CONCATENATED MODULE: ./app/client/src/js/_components/_ui.carousel.js\nvar _ui_carousel__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\nfunction _ui_carousel__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar _ui_carousel_CarouselUI = function ($) {\n // Constants\n var NAME = 'CarouselUI';\n\n var CarouselUI = function () {\n function CarouselUI() {\n _ui_carousel__classCallCheck(this, CarouselUI);\n }\n\n _ui_carousel__createClass(CarouselUI, null, [{\n key: 'each',\n\n // Static methods\n\n value: function each(callback) {\n $('.js-carousel').each(function (i, e) {\n callback(i, $(e));\n });\n }\n }, {\n key: 'init',\n value: function init() {\n this.dispose();\n\n this.each(function (i, e) {\n var $e = $(e),\n id = 'Carousel' + i;\n\n $e.attr('id', id);\n $e.data('id', i);\n\n var $items = $(e).find('.carousel-item'),\n count = $items.length;\n if (!count) {\n return;\n }\n\n // create carousel-controls\n if ($e.data('indicators')) {\n var $indicators = $('<ol class=\"carousel-indicators\"></ol>');\n $indicators.append('<li data-target=\"#' + id + '\" data-slide-to=\"0\" class=\"active\"></li>');\n for (var _i = 1; _i < count; _i++) {\n $indicators.append('<li data-target=\"#' + id + '\" data-slide-to=\"' + _i + '\"></li>');\n }\n $e.prepend($indicators);\n }\n\n // create arrows\n if ($e.data('arrows')) {\n $e.prepend('<i class=\"carousel-control-prev\" data-target=\"#' + id + '\" role=\"button\" data-slide=\"prev\"><i class=\"fas fa-chevron-left\" aria-hidden=\"true\"></i><i class=\"sr-only\">Previous</i></i>');\n $e.prepend('<i class=\"carousel-control-next\" data-target=\"#' + id + '\" role=\"button\" data-slide=\"next\"><i class=\"fas fa-chevron-right\" aria-hidden=\"true\"></i><i class=\"sr-only\">Next</i></i>');\n }\n\n // init carousel\n $e.carousel();\n\n // init touch swipes\n $e.hammer().bind('swipeleft', function (event) {\n $(event.target).carousel('next');\n });\n\n $e.hammer().bind('swiperight', function (event) {\n $(event.target).carousel('prev');\n });\n\n $e.hammer().bind('panleft', function (event) {\n $(event.target).carousel('next');\n });\n\n $e.hammer().bind('panright', function (event) {\n $(event.target).carousel('prev');\n });\n\n $e.hammer().bind('tap', function (event) {\n $(event.target).carousel('next');\n });\n });\n }\n }, {\n key: 'dispose',\n value: function dispose() {\n this.each(function (i, e) {\n $(e).carousel('dispose');\n });\n }\n }]);\n\n return CarouselUI;\n }();\n\n $(window).on(_events_default.a.AJAX + ' ' + _events_default.a.LOADED, function () {\n CarouselUI.init();\n });\n\n return CarouselUI;\n}(external__jQuery__default.a);\n\n/* harmony default export */ var _ui_carousel = (_ui_carousel_CarouselUI);\n// CONCATENATED MODULE: ./app/client/src/js/_components/_ui.menu.js\nvar _ui_menu__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\nfunction _ui_menu__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\nvar SlidingMenu = function ($) {\n // Constants\n var NAME = 'jsSlidingMenu';\n var DATA_KEY = NAME;\n\n var SlidingMenu = function () {\n // Constructor\n function SlidingMenu(element) {\n _ui_menu__classCallCheck(this, SlidingMenu);\n\n this._element = element;\n var $element = $(this._element);\n $element.addClass(NAME + '-active');\n\n // esc button\n $(window).on('keyup', function (e) {\n if (e.which === 27) {\n $element.find('.is-open[data-toggle=\"offcanvas\"]').click();\n }\n });\n }\n\n // Public methods\n\n\n _ui_menu__createClass(SlidingMenu, [{\n key: 'dispose',\n value: function dispose() {\n console.log('Disposing: ' + NAME + ' elements');\n\n $(this._element).removeClass(NAME + '-active');\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n }], [{\n key: '_jQueryInterface',\n value: function _jQueryInterface() {\n return this.each(function () {\n // attach functionality to element\n var $element = $(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new SlidingMenu(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }]);\n\n return SlidingMenu;\n }();\n\n // jQuery interface\n\n\n $.fn[NAME] = SlidingMenu._jQueryInterface;\n $.fn[NAME].Constructor = SlidingMenu;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return SlidingMenu._jQueryInterface;\n };\n\n // auto-apply\n $('.ui.' + NAME).ready(function () {\n $('.ui.' + NAME).jsSlidingMenu();\n });\n\n return SlidingMenu;\n}(external__jQuery__default.a);\n\n/* harmony default export */ var _ui_menu = (SlidingMenu);\n// CONCATENATED MODULE: ./app/client/src/js/_components/_ui.form.storage.js\nvar _ui_form_storage__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\nfunction _ui_form_storage__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar _ui_form_storage_FormStorage = function ($) {\n // Constants\n var NAME = 'jsFormStorage';\n var DATA_KEY = NAME;\n var STORAGE = window.localStorage;\n\n var FormStorage = function () {\n // Constructor\n function FormStorage(element) {\n _ui_form_storage__classCallCheck(this, FormStorage);\n\n this._element = element;\n var $element = $(this._element);\n var $elements = $element.find('input,textarea');\n\n $element.addClass(NAME + '-active');\n\n // restore form data from localStorage\n $elements.each(function () {\n var id = $(this).attr('id');\n var type = $(this).attr('type');\n var val = STORAGE.getItem(NAME + id);\n\n if (id && val && type) {\n if (type && (type === 'checkbox' || type === 'radio')) {\n $(this).prop('checked', val);\n } else {\n $(this).val(val);\n }\n }\n });\n\n // store form data into localStorage\n $elements.change(function () {\n var id = $(this).attr('id');\n var type = $(this).attr('type');\n var val = $(this).val();\n\n if (type && (type === 'checkbox' || type === 'radio')) {\n val = !!$(this).is(':checked');\n }\n\n if (id && type && type !== 'password') {\n STORAGE.setItem(NAME + id, val);\n }\n });\n\n $element.submit(function () {\n $element.data(DATA_KEY).clear();\n });\n\n $element.find('button,[type=\"submit\"],[type=\"clear\"]').click(function () {\n $element.data(DATA_KEY).clear();\n });\n }\n\n // Public methods\n\n\n _ui_form_storage__createClass(FormStorage, [{\n key: 'dispose',\n value: function dispose() {\n var $element = $(this._element);\n\n $element.removeClass(NAME + '-active');\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n }, {\n key: 'clear',\n value: function clear() {\n STORAGE.clear();\n }\n }], [{\n key: '_jQueryInterface',\n value: function _jQueryInterface() {\n if (typeof window.localStorage !== 'undefined') {\n return this.each(function () {\n // attach functionality to element\n var $element = $(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new FormStorage(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n }]);\n\n return FormStorage;\n }();\n\n // jQuery interface\n\n\n $.fn[NAME] = FormStorage._jQueryInterface;\n $.fn[NAME].Constructor = FormStorage;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return FormStorage._jQueryInterface;\n };\n\n // auto-apply\n $(window).on(_events_default.a.AJAX + ' ' + _events_default.a.LOADED, function () {\n $('form').jsFormStorage();\n });\n\n return FormStorage;\n}(external__jQuery__default.a);\n\n/* harmony default export */ var _ui_form_storage = (_ui_form_storage_FormStorage);\n// CONCATENATED MODULE: ./app/client/src/js/_components/_ui.ajax.js\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _ui_ajax__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\nfunction _ui_ajax__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar _ui_ajax_AjaxUI = function ($) {\n // Constants\n var G = window;\n var D = document;\n var $Html = $('html');\n var $Body = $('body');\n\n var NAME = 'jsAjaxUI';\n var DATA_KEY = NAME;\n\n var AjaxUI = function () {\n // Constructor\n function AjaxUI(element) {\n _ui_ajax__classCallCheck(this, AjaxUI);\n\n this._element = element;\n var $element = $(this._element);\n $element.addClass(NAME + '-active');\n\n $element.bind('click', function (e) {\n e.preventDefault();\n\n var $this = $(this);\n\n $('.ajax').each(function () {\n var $this = $(this);\n $this.removeClass('active');\n $this.parents('.nav-item').removeClass('active');\n });\n\n $this.addClass('loading');\n\n AjaxUI.load($this.attr('href'), function () {\n $this.removeClass('loading');\n $this.parents('.nav-item').addClass('active');\n $this.addClass('active');\n });\n });\n }\n\n // Public methods\n\n\n _ui_ajax__createClass(AjaxUI, [{\n key: 'dispose',\n value: function dispose() {\n var $element = $(this._element);\n\n $element.removeClass(NAME + '-active');\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n }], [{\n key: 'load',\n value: function load(url, callback) {\n // show spinner\n _ui_spinner.show(function () {\n $Body.removeClass('loaded');\n });\n\n // update document location\n G.MainUI.updateLocation(url);\n\n var absoluteLocation = G.URLDetails['base'] + G.URLDetails['relative'].substring(1);\n if (absoluteLocation !== G.location.href) {\n G.history.pushState({\n ajax: true,\n page: absoluteLocation\n }, document.title, absoluteLocation);\n }\n\n $.ajax({\n sync: false,\n async: true,\n url: url,\n dataType: 'json',\n method: 'GET',\n cache: false,\n error: function error(jqXHR) {\n console.warn('AJAX request failure: ' + jqXHR.statusText);\n G.location.href = url;\n\n // google analytics\n if (typeof G.ga === 'function') {\n G.ga('send', 'event', 'error', 'AJAX ERROR', jqXHR.statusText);\n }\n },\n success: function success(data, status, jqXHR) {\n AjaxUI.process(data, jqXHR, callback);\n\n // google analytics\n if (typeof G.ga === 'function') {\n G.ga('set', {\n page: G.URLDetails['relative'] + G.URLDetails['hash'],\n title: jqXHR.getResponseHeader('X-Title')\n });\n G.ga('send', 'pageview');\n }\n }\n });\n }\n }, {\n key: 'process',\n value: function process(data, jqXHR, callback) {\n var _this = this;\n\n var css = jqXHR.getResponseHeader('X-Include-CSS').split(',') || [];\n var js = jqXHR.getResponseHeader('X-Include-JS').split(',') || [];\n\n // Replace HTML regions\n if (_typeof(data.regions) === 'object') {\n for (var key in data.regions) {\n if (typeof data.regions[key] === 'string') {\n AjaxUI.replaceRegion(data.regions[key], key);\n }\n }\n }\n\n // remove already loaded scripts\n $('link[type=\"text/css\"]').each(function () {\n var i = css.indexOf($(this).attr('href'));\n if (i > -1) {\n css.splice(i, 1);\n } else if (!$Body.data('unload-blocked')) {\n console.log('Unloading: ' + $(this).attr('href'));\n $(this).remove();\n }\n });\n\n $('script[type=\"text/javascript\"]').each(function () {\n var i = js.indexOf($(this).attr('src'));\n if (i > -1) {\n js.splice(i, 1);\n } else if (!$Body.data('unload-blocked')) {\n console.log('Unloading: ' + $(this).attr('src'));\n $(this).remove();\n }\n });\n\n // preload CSS\n this.preload(css).then(function () {\n var $head = $('head');\n css.forEach(function (el) {\n $head.append('<link rel=\"stylesheet\" type=\"text/css\" href=\"' + el + '\" />');\n });\n\n // preload JS\n _this.preload(js, 'script').then(function () {\n\n js.forEach(function (el) {\n $Body.append('<script type=\"text/javascript\" charset=\"UTF-8\" src=\"' + el + '\"></script>');\n });\n\n console.log('New page is loaded!');\n\n // trigger events\n if (_typeof(data.events) === 'object') {\n for (var eventName in data.events) {\n $(D).trigger(eventName, [data.events[eventName]]);\n }\n }\n\n if (typeof callback !== 'undefined') {\n callback();\n }\n\n $(G).trigger(_events_default.a.AJAX);\n });\n });\n }\n }, {\n key: 'preload',\n value: function preload(items) {\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'text';\n var cache = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (!items.length) {\n return $.Deferred().resolve().promise();\n }\n\n var dfds = [];\n items.forEach(function (url) {\n var dfd = $.Deferred();\n\n $.ajax({\n dataType: type,\n cache: cache,\n url: url\n }).always(function () {\n dfd.resolve();\n });\n\n dfds.push(dfd);\n });\n\n // return a master promise object which will resolve when all the deferred objects have resolved\n return $.when.apply($, dfds);\n }\n }, {\n key: 'replaceRegion',\n value: function replaceRegion(html, key) {\n var $region = $('[data-ajax-region=\"' + key + '\"]');\n\n if ($region.length) {\n $region.empty().append(html);\n } else {\n console.warn('Region returned without class or id!');\n }\n }\n }, {\n key: '_jQueryInterface',\n value: function _jQueryInterface() {\n return this.each(function () {\n // attach functionality to element\n var $element = $(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new AjaxUI(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }]);\n\n return AjaxUI;\n }();\n\n // jQuery interface\n\n\n $.fn[NAME] = AjaxUI._jQueryInterface;\n $.fn[NAME].Constructor = AjaxUI;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return AjaxUI._jQueryInterface;\n };\n\n // auto-apply\n $('.ajax').ready(function () {\n $('.ajax').jsAjaxUI();\n });\n\n // AJAX update browser title\n $(D).on('layoutRefresh', function (e, data) {\n D.title = data.Title;\n\n $Html.attr('class', '');\n if (data.ClassName) {\n $Html.addClass(data.ClassName);\n }\n //data.Link = (data.Link === '/home/') ? '/' : data.Link;\n });\n\n // Back/Forward functionality\n G.onpopstate = function (event) {\n var $existingLink = $('a[href^=\"' + D.location + '\"]');\n\n if (event.state !== null && event.state.ajax) {\n console.log('GOBACK (AJAX state)');\n AjaxUI.load(event.state.page);\n } else if ($existingLink.length && $existingLink.hasClass('ajax')) {\n console.log('GOBACK (AJAX link)');\n $existingLink.trigger('click');\n } else {\n console.log('GOBACK (HTTP)');\n G.location.href = D.location;\n }\n };\n\n return AjaxUI;\n}(external__jQuery__default.a);\n\n/* harmony default export */ var _ui_ajax = (_ui_ajax_AjaxUI);\n// EXTERNAL MODULE: ./node_modules/smooth-scroll/dist/smooth-scroll.min.js\nvar smooth_scroll_min = __webpack_require__(27);\nvar smooth_scroll_min_default = /*#__PURE__*/__webpack_require__.n(smooth_scroll_min);\n\n// CONCATENATED MODULE: ./app/client/src/js/main.js\n\n\nvar main__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\nfunction main__classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n// Routie\n\n\n\n\n\n\n\n\n\n\n\n\nvar smoothScroll = smooth_scroll_min_default()();\n\nvar main_MainUI = function ($) {\n // Constants\n var W = window;\n var D = document;\n var $Body = $('body');\n\n var NAME = 'MainUI';\n\n // get browser locale\n //const Locale = $('html').attr('lang').substring(0, 2);\n\n var $AlertNotify = $('#AlertNotify');\n var $SiteWideMessage = $('#SiteWideMessage');\n\n // get browser window visibility preferences\n // Opera 12.10, Firefox >=18, Chrome >=31, IE11\n var HiddenName = 'hidden';\n var VisibilityChangeEvent = 'visibilitychange';\n\n // update visibility state\n D.addEventListener(VisibilityChangeEvent, function () {\n if (D.visibilityState === HiddenName) {\n console.log('Tab: hidden');\n $Body.addClass('is-hidden');\n $Body.trigger('tabHidden');\n } else {\n console.log('Tab: focused');\n $Body.removeClass('is-hidden');\n $Body.trigger('tabFocused');\n }\n });\n\n // update online/offline state\n var updateOnlineStatus = function updateOnlineStatus() {\n if (!navigator.onLine) {\n console.log('Tab: offline');\n $Body.addClass('is-offline');\n $Body.trigger('offline');\n } else {\n console.log('Tab: online');\n $Body.removeClass('is-offline');\n $Body.trigger('online');\n }\n };\n\n if (typeof navigator.onLine !== 'undefined') {\n W.addEventListener('offline', function () {\n updateOnlineStatus();\n }, false);\n\n W.addEventListener('online', function () {\n updateOnlineStatus();\n }, false);\n\n W.addEventListener('load', function () {\n updateOnlineStatus();\n });\n }\n\n // scrollTo\n var ScrollTo = function ScrollTo(trigger, selector) {\n smoothScroll.animateScroll(D.querySelector(selector), trigger, {\n speed: 500,\n offset: -20\n //easing: 'easeInOutCubic',\n // Callback API\n //before: function (anchor, toggle) {}, // Callback to run before scroll\n //`after: function (anchor, toggle) {} // Callback to run after scroll\n });\n };\n\n // session ping\n setInterval(function () {\n if ($Body.hasClass('is-offline')) {\n return;\n }\n\n $.ajax({\n sync: false,\n async: true,\n cache: false,\n url: '/Security/ping',\n global: false,\n type: 'POST',\n complete: function complete(data, datastatus) {\n if (datastatus !== 'success') {\n W.location.reload(false);\n }\n }\n });\n }, 300000); // 5 min in ms\n\n W.URLDetails = {\n 'base': $('base').attr('href'),\n 'relative': '/',\n 'hash': ''\n };\n\n var MainUI = function () {\n function MainUI() {\n main__classCallCheck(this, MainUI);\n }\n\n main__createClass(MainUI, null, [{\n key: 'init',\n\n // Static methods\n\n value: function init() {\n this.dispose();\n\n console.log('Initializing: ' + NAME);\n\n // update location details\n this.updateLocation();\n\n // mark available offline areas\n if ('caches' in W) {\n $('a.offline').addClass('offline-available');\n }\n\n this.loadImages();\n\n // mark external links\n $('a.external,a[rel=\"external\"]').attr('target', '_blank');\n\n // show encoded emails\n /*$(D).find('.obm').each(function () {\n if ($(this).attr('data-val') !== undefined) {\n const email = $(this).attr('data-val').split('')\n .reverse()\n .join('')\n .slice(0, -8)\n .replace(/[a-zA-Z]/g, (c) => String.fromCharCode((c <= 'Z' ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26))\n .replace('#AT#', '@');\n const attr = $(this).attr('data-val-append');\n if (attr !== undefined && attr !== false) {\n $(this).append(email);\n }\n if ($(this).find('.sr-only').length > 0) {\n $(this).find('.sr-only').append(email);\n }\n if ($(this).attr('href') !== undefined) {\n $(this).attr('href', `mailto:${email}`);\n }\n }\n });*/\n //\n\n // scroll links\n $(D).on('click', '.js-scrollTo', function (e) {\n e.preventDefault();\n ScrollTo(this, $(this).attr('data-target'));\n });\n\n // load external fonts\n if ($('[data-extfont]').length) {\n $.getScript('//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js', function () {\n var fonts = [];\n $('[data-extfont]').each(function (i) {\n fonts[i] = $(this).attr('data-extfont');\n });\n W.WebFont.load({\n google: {\n families: fonts\n }\n });\n });\n }\n\n // hide spinner\n _ui_spinner.hide(function () {\n $Body.addClass('loaded');\n });\n\n // fire page printing\n if (W.URLDetails['hash'].indexOf('printpage') > -1) {\n W.print();\n }\n }\n }, {\n key: 'updateLocation',\n value: function updateLocation(url) {\n var location = url || W.location.href;\n location = location.replace(W.URLDetails['base'], '/');\n var hash = location.indexOf('#');\n\n W.URLDetails.relative = location.split('#')[0];\n W.URLDetails.hash = hash >= 0 ? location.substr(location.indexOf('#')) : '';\n }\n\n // show site-wide alert\n\n }, {\n key: 'alert',\n value: function alert(msg, cls) {\n $SiteWideMessage.fadeOut('fast');\n\n $SiteWideMessage.html('<div class=\"page-alert\"><div class=\"alert alert-' + cls + '\"><i class=\"close\" data-dismiss=\"alert\">×</i>' + msg + '</div></div>');\n $SiteWideMessage.find('.page-alert').alert();\n\n $SiteWideMessage.find('.close[data-dismiss=\"alert\"]').click(function () {\n $SiteWideMessage.fadeOut('slow', function () {\n $SiteWideMessage.find('.page-alert').alert('close');\n });\n });\n\n $SiteWideMessage.fadeIn('slow');\n\n if ($AlertNotify.length) {\n $AlertNotify[0].play();\n }\n\n $(W).trigger('alert-appeared');\n }\n\n // hide site-wide alert\n\n }, {\n key: 'alertHide',\n value: function alertHide() {\n if ($SiteWideMessage.length !== 0) {\n $SiteWideMessage.fadeOut('slow', function () {\n $SiteWideMessage.find('.alert').alert('close');\n });\n }\n\n if ($AlertNotify.length && typeof $AlertNotify[0].stop !== 'undefined') {\n $AlertNotify[0].stop();\n }\n\n $(W).trigger('alert-removed');\n }\n\n // load all images\n\n }, {\n key: 'loadImages',\n value: function loadImages() {\n var $imgs = $Body.find('img');\n var $imgUrls = [];\n var $imgLazyUrls = [];\n\n // collect image details\n $imgs.each(function () {\n var src = $(this).attr('src');\n var lazySrc = $(this).data('lazy-src');\n if (src.length) {\n $imgUrls.push(src);\n }\n if (lazySrc) {\n $imgLazyUrls.push(lazySrc);\n }\n });\n\n // load defined images\n _ui_ajax.preload($imgUrls).then(function () {\n $(W).trigger('images-loaded');\n\n // load lazy images\n _ui_ajax.preload($imgLazyUrls).then(function () {\n // update lazy img src\n $('img[data-lazy-src]').each(function () {\n if (!$(this).attr('src')) {\n return;\n }\n $(this).attr('src', $(this).data('lazy-src'));\n });\n\n console.log('All images are loaded!');\n\n $(W).trigger('images-lazy-loaded');\n });\n });\n }\n }, {\n key: 'dispose',\n value: function dispose() {\n console.log('Destroying: ' + NAME);\n }\n }]);\n\n return MainUI;\n }();\n\n $(W).on(_events_default.a.AJAX + ' ' + _events_default.a.LOADED, function () {\n MainUI.init();\n });\n\n W.MainUI = MainUI;\n\n return MainUI;\n}(external__jQuery__default.a);\n\n/* harmony default export */ var main = (main_MainUI);\n// CONCATENATED MODULE: ./app/client/src/js/app.js\n\n\n// import Bootstrap\n\n\n\n\n\n\n\n\n\n\n\n\n//\n\n//import Vue from 'vue/dist/vue.esm.js';\n\n// import Bootstrap-Vue\n/*import { Carousel } from 'bootstrap-vue/es/components';\nVue.use(Carousel);*/\n\n\n\n// import your custom UI components\n\n\nfunction importAll(r) {\n return r.keys().map(r);\n}\n\nvar app_images = importAll(__webpack_require__(28));\nvar fontAwesome = importAll(__webpack_require__(32));\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Util = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator;\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || '';\n }\n\n try {\n var $selector = $(document).find(selector);\n return $selector.length > 0 ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $(element).css('transition-duration');\n var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n }\n };\n setTransitionEndSupport();\n return Util;\n}($);\n//# sourceMappingURL=util.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($, Util) {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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Alert = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'alert';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Selector = {\n DISMISS: '[data-dismiss=\"alert\"]'\n };\n var Event = {\n CLOSE: \"close\" + EVENT_KEY,\n CLOSED: \"closed\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n ALERT: 'alert',\n FADE: 'fade',\n SHOW: 'show'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Alert =\n /*#__PURE__*/\n function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Private\n\n\n _proto._getRootElement = function _getRootElement(element) {\n var selector = Util.getSelectorFromElement(element);\n var parent = false;\n\n if (selector) {\n parent = $(selector)[0];\n }\n\n if (!parent) {\n parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $.Event(Event.CLOSE);\n $(element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $(element).removeClass(ClassName.SHOW);\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $(element).one(Util.TRANSITION_END, function (event) {\n return _this._destroyElement(element, event);\n }).emulateTransitionEnd(transitionDuration);\n };\n\n _proto._destroyElement = function _destroyElement(element) {\n $(element).detach().trigger(Event.CLOSED).remove();\n }; // Static\n\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY, data);\n }\n\n if (config === 'close') {\n data[config](this);\n }\n });\n };\n\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault();\n }\n\n alertInstance.close(this);\n };\n };\n\n _createClass(Alert, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Alert;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface;\n $.fn[NAME].Constructor = Alert;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n\n return Alert;\n}($);\n//# sourceMappingURL=alert.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Button = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'button';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.button';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ClassName = {\n ACTIVE: 'active',\n BUTTON: 'btn',\n FOCUS: 'focus'\n };\n var Selector = {\n DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n INPUT: 'input',\n ACTIVE: '.active',\n BUTTON: '.btn'\n };\n var Event = {\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY + DATA_API_KEY + \" \" + (\"blur\" + EVENT_KEY + DATA_API_KEY)\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Button =\n /*#__PURE__*/\n function () {\n function Button(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Button.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];\n\n if (rootElement) {\n var input = $(this._element).find(Selector.INPUT)[0];\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = $(rootElement).find(Selector.ACTIVE)[0];\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE);\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n return;\n }\n\n input.checked = !$(this._element).hasClass(ClassName.ACTIVE);\n $(input).trigger('change');\n }\n\n input.focus();\n addAriaPressed = false;\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE);\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Static\n\n\n Button._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n if (!data) {\n data = new Button(this);\n $(this).data(DATA_KEY, data);\n }\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n };\n\n _createClass(Button, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n event.preventDefault();\n var button = event.target;\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON);\n }\n\n Button._jQueryInterface.call($(button), 'toggle');\n }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n var button = $(event.target).closest(Selector.BUTTON)[0];\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface;\n $.fn[NAME].Constructor = Button;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Button._jQueryInterface;\n };\n\n return Button;\n}($);\n//# sourceMappingURL=button.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($, Util) {function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Carousel = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'carousel';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.carousel';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n var Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true\n };\n var DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean'\n };\n var Direction = {\n NEXT: 'next',\n PREV: 'prev',\n LEFT: 'left',\n RIGHT: 'right'\n };\n var Event = {\n SLIDE: \"slide\" + EVENT_KEY,\n SLID: \"slid\" + EVENT_KEY,\n KEYDOWN: \"keydown\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY,\n TOUCHEND: \"touchend\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n CAROUSEL: 'carousel',\n ACTIVE: 'active',\n SLIDE: 'slide',\n RIGHT: 'carousel-item-right',\n LEFT: 'carousel-item-left',\n NEXT: 'carousel-item-next',\n PREV: 'carousel-item-prev',\n ITEM: 'carousel-item'\n };\n var Selector = {\n ACTIVE: '.active',\n ACTIVE_ITEM: '.active.carousel-item',\n ITEM: '.carousel-item',\n NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n INDICATORS: '.carousel-indicators',\n DATA_SLIDE: '[data-slide], [data-slide-to]',\n DATA_RIDE: '[data-ride=\"carousel\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Carousel =\n /*#__PURE__*/\n function () {\n function Carousel(element, config) {\n this._items = null;\n this._interval = null;\n this._activeElement = null;\n this._isPaused = false;\n this._isSliding = false;\n this.touchTimeout = null;\n this._config = this._getConfig(config);\n this._element = $(element)[0];\n this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0];\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Carousel.prototype;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n this.next();\n }\n };\n\n _proto.prev = function prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n };\n\n _proto.pause = function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n if ($(this._element).find(Selector.NEXT_PREV)[0]) {\n Util.triggerTransitionEnd(this._element);\n this.cycle(true);\n }\n\n clearInterval(this._interval);\n this._interval = null;\n };\n\n _proto.cycle = function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n }\n };\n\n _proto.to = function to(index) {\n var _this = this;\n\n this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this._items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, function () {\n return _this.to(index);\n });\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n this._slide(direction, this._items[index]);\n };\n\n _proto.dispose = function dispose() {\n $(this._element).off(EVENT_KEY);\n $.removeData(this._element, DATA_KEY);\n this._items = null;\n this._config = null;\n this._element = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this2 = this;\n\n if (this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $(this._element).on(Event.MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(Event.MOUSELEAVE, function (event) {\n return _this2.cycle(event);\n });\n\n if ('ontouchstart' in document.documentElement) {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n $(this._element).on(Event.TOUCHEND, function () {\n _this2.pause();\n\n if (_this2.touchTimeout) {\n clearTimeout(_this2.touchTimeout);\n }\n\n _this2.touchTimeout = setTimeout(function (event) {\n return _this2.cycle(event);\n }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval);\n });\n }\n }\n };\n\n _proto._keydown = function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n\n default:\n }\n };\n\n _proto._getItemIndex = function _getItemIndex(element) {\n this._items = $.makeArray($(element).parent().find(Selector.ITEM));\n return this._items.indexOf(element);\n };\n\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === Direction.NEXT;\n var isPrevDirection = direction === Direction.PREV;\n\n var activeIndex = this._getItemIndex(activeElement);\n\n var lastItemIndex = this._items.length - 1;\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement;\n }\n\n var delta = direction === Direction.PREV ? -1 : 1;\n var itemIndex = (activeIndex + delta) % this._items.length;\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n };\n\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n var targetIndex = this._getItemIndex(relatedTarget);\n\n var fromIndex = this._getItemIndex($(this._element).find(Selector.ACTIVE_ITEM)[0]);\n\n var slideEvent = $.Event(Event.SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $(this._element).trigger(slideEvent);\n return slideEvent;\n };\n\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this3 = this;\n\n var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];\n\n var activeElementIndex = this._getItemIndex(activeElement);\n\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var isCycling = Boolean(this._interval);\n var directionalClassName;\n var orderClassName;\n var eventDirectionName;\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT;\n orderClassName = ClassName.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName.RIGHT;\n orderClassName = ClassName.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false;\n return;\n }\n\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return;\n }\n\n this._isSliding = true;\n\n if (isCycling) {\n this.pause();\n }\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $(activeElement).addClass(directionalClassName);\n $(nextElement).addClass(directionalClassName);\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $(activeElement).one(Util.TRANSITION_END, function () {\n $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName.ACTIVE);\n $(activeElement).removeClass(ClassName.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n _this3._isSliding = false;\n setTimeout(function () {\n return $(_this3._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE);\n $(nextElement).addClass(ClassName.ACTIVE);\n this._isSliding = false;\n $(this._element).trigger(slidEvent);\n }\n\n if (isCycling) {\n this.cycle();\n }\n }; // Static\n\n\n Carousel._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $(this).data());\n\n if (typeof config === 'object') {\n _config = _objectSpread({}, _config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'number') {\n data.to(config);\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n }\n\n data[action]();\n } else if (_config.interval) {\n data.pause();\n data.cycle();\n }\n });\n };\n\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n var selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var target = $(selector)[0];\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return;\n }\n\n var config = _objectSpread({}, $(target).data(), $(this).data());\n\n var slideIndex = this.getAttribute('data-slide-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Carousel._jQueryInterface.call($(target), config);\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);\n $(window).on(Event.LOAD_DATA_API, function () {\n $(Selector.DATA_RIDE).each(function () {\n var $carousel = $(this);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Carousel._jQueryInterface;\n $.fn[NAME].Constructor = Carousel;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Carousel._jQueryInterface;\n };\n\n return Carousel;\n}($);\n//# sourceMappingURL=carousel.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($, Util) {function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Collapse = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'collapse';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.collapse';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Default = {\n toggle: true,\n parent: ''\n };\n var DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var Event = {\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SHOW: 'show',\n COLLAPSE: 'collapse',\n COLLAPSING: 'collapsing',\n COLLAPSED: 'collapsed'\n };\n var Dimension = {\n WIDTH: 'width',\n HEIGHT: 'height'\n };\n var Selector = {\n ACTIVES: '.show, .collapsing',\n DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Collapse =\n /*#__PURE__*/\n function () {\n function Collapse(element, config) {\n this._isTransitioning = false;\n this._element = element;\n this._config = this._getConfig(config);\n this._triggerArray = $.makeArray($(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n var tabToggles = $(Selector.DATA_TOGGLE);\n\n for (var i = 0; i < tabToggles.length; i++) {\n var elem = tabToggles[i];\n var selector = Util.getSelectorFromElement(elem);\n\n if (selector !== null && $(selector).filter(element).length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = $.makeArray($(this._parent).find(Selector.ACTIVES).filter(\"[data-parent=\\\"\" + this._config.parent + \"\\\"]\"));\n\n if (actives.length === 0) {\n actives = null;\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $.Event(Event.SHOW);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $(actives).data(DATA_KEY, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length > 0) {\n $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $(_this._element).trigger(Event.SHOWN);\n };\n\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n var scrollSize = \"scroll\" + capitalizedDimension;\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n this._element.style[dimension] = this._element[scrollSize] + \"px\";\n };\n\n _proto.hide = function hide() {\n var _this2 = this;\n\n if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var startEvent = $.Event(Event.HIDE);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n var dimension = this._getDimension();\n\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n Util.reflow(this._element);\n $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);\n\n if (this._triggerArray.length > 0) {\n for (var i = 0; i < this._triggerArray.length; i++) {\n var trigger = this._triggerArray[i];\n var selector = Util.getSelectorFromElement(trigger);\n\n if (selector !== null) {\n var $elem = $(selector);\n\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);\n }\n }\n }\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n _this2.setTransitioning(false);\n\n $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n };\n\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning;\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._config = null;\n this._parent = null;\n this._element = null;\n this._triggerArray = null;\n this._isTransitioning = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n };\n\n _proto._getParent = function _getParent() {\n var _this3 = this;\n\n var parent = null;\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent; // It's a jQuery object\n\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0];\n }\n } else {\n parent = $(this._config.parent)[0];\n }\n\n var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n $(parent).find(selector).each(function (i, element) {\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n });\n return parent;\n };\n\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n if (element) {\n var isOpen = $(element).hasClass(ClassName.SHOW);\n\n if (triggerArray.length > 0) {\n $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n }\n }\n }; // Static\n\n\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n var selector = Util.getSelectorFromElement(element);\n return selector ? $(selector)[0] : null;\n };\n\n Collapse._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {});\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault();\n }\n\n var $trigger = $(this);\n var selector = Util.getSelectorFromElement(this);\n $(selector).each(function () {\n var $target = $(this);\n var data = $target.data(DATA_KEY);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Collapse._jQueryInterface;\n $.fn[NAME].Constructor = Collapse;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Collapse._jQueryInterface;\n };\n\n return Collapse;\n}($);\n//# sourceMappingURL=collapse.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($, Popper, Util) {function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Dropdown = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'dropdown';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.dropdown';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY + DATA_API_KEY,\n KEYUP_DATA_API: \"keyup\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DISABLED: 'disabled',\n SHOW: 'show',\n DROPUP: 'dropup',\n DROPRIGHT: 'dropright',\n DROPLEFT: 'dropleft',\n MENURIGHT: 'dropdown-menu-right',\n MENULEFT: 'dropdown-menu-left',\n POSITION_STATIC: 'position-static'\n };\n var Selector = {\n DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n FORM_CHILD: '.dropdown form',\n MENU: '.dropdown-menu',\n NAVBAR_NAV: '.navbar-nav',\n VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n };\n var AttachmentMap = {\n TOP: 'top-start',\n TOPEND: 'top-end',\n BOTTOM: 'bottom-start',\n BOTTOMEND: 'bottom-end',\n RIGHT: 'right-start',\n RIGHTEND: 'right-end',\n LEFT: 'left-start',\n LEFTEND: 'left-end'\n };\n var Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic'\n };\n var DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Dropdown =\n /*#__PURE__*/\n function () {\n function Dropdown(element, config) {\n this._element = element;\n this._popper = null;\n this._config = this._getConfig(config);\n this._menu = this._getMenuElement();\n this._inNavbar = this._detectNavbar();\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Dropdown.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n var isActive = $(this._menu).hasClass(ClassName.SHOW);\n\n Dropdown._clearMenus();\n\n if (isActive) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $.Event(Event.SHOW, relatedTarget);\n $(parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n } // Disable totally Popper.js for Dropdown in Navbar\n\n\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');\n }\n\n var referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = parent;\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference; // Check if it's jQuery element\n\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0];\n }\n } // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n\n\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC);\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n } // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n if ('ontouchstart' in document.documentElement && $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n $(this._menu).toggleClass(ClassName.SHOW);\n $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n $(this._element).off(EVENT_KEY);\n this._element = null;\n this._menu = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n\n this._popper = null;\n }\n };\n\n _proto.update = function update() {\n this._inNavbar = this._detectNavbar();\n\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Private\n\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this = this;\n\n $(this._element).on(Event.CLICK, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n _this.toggle();\n });\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getMenuElement = function _getMenuElement() {\n if (!this._menu) {\n var parent = Dropdown._getParentFromElement(this._element);\n\n this._menu = $(parent).find(Selector.MENU)[0];\n }\n\n return this._menu;\n };\n\n _proto._getPlacement = function _getPlacement() {\n var $parentDropdown = $(this._element).parent();\n var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP;\n\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND;\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT;\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT;\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND;\n }\n\n return placement;\n };\n\n _proto._detectNavbar = function _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0;\n };\n\n _proto._getPopperConfig = function _getPopperConfig() {\n var _this2 = this;\n\n var offsetConf = {};\n\n if (typeof this._config.offset === 'function') {\n offsetConf.fn = function (data) {\n data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});\n return data;\n };\n } else {\n offsetConf.offset = this._config.offset;\n }\n\n var popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: offsetConf,\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n } // Disable Popper.js if we have a static display\n\n };\n\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n };\n }\n\n return popperConfig;\n }; // Static\n\n\n Dropdown._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data) {\n data = new Dropdown(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n Dropdown._clearMenus = function _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return;\n }\n\n var toggles = $.makeArray($(Selector.DATA_TOGGLE));\n\n for (var i = 0; i < toggles.length; i++) {\n var parent = Dropdown._getParentFromElement(toggles[i]);\n\n var context = $(toggles[i]).data(DATA_KEY);\n var relatedTarget = {\n relatedTarget: toggles[i]\n };\n\n if (!context) {\n continue;\n }\n\n var dropdownMenu = context._menu;\n\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue;\n }\n\n if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n continue;\n }\n\n var hideEvent = $.Event(Event.HIDE, relatedTarget);\n $(parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n continue;\n } // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n toggles[i].setAttribute('aria-expanded', 'false');\n $(dropdownMenu).removeClass(ClassName.SHOW);\n $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));\n }\n };\n\n Dropdown._getParentFromElement = function _getParentFromElement(element) {\n var parent;\n var selector = Util.getSelectorFromElement(element);\n\n if (selector) {\n parent = $(selector)[0];\n }\n\n return parent || element.parentNode;\n }; // eslint-disable-next-line complexity\n\n\n Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this);\n\n var isActive = $(parent).hasClass(ClassName.SHOW);\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];\n $(toggle).trigger('focus');\n }\n\n $(this).trigger('click');\n return;\n }\n\n var items = $(parent).find(Selector.VISIBLE_ITEMS).get();\n\n if (items.length === 0) {\n return;\n }\n\n var index = items.indexOf(event.target);\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) {\n // Up\n index--;\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n // Down\n index++;\n }\n\n if (index < 0) {\n index = 0;\n }\n\n items[index].focus();\n };\n\n _createClass(Dropdown, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Dropdown;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + \" \" + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n Dropdown._jQueryInterface.call($(this), 'toggle');\n }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {\n e.stopPropagation();\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Dropdown._jQueryInterface;\n $.fn[NAME].Constructor = Dropdown;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Dropdown._jQueryInterface;\n };\n\n return Dropdown;\n}($, Popper);\n//# sourceMappingURL=dropdown.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(3)[\"default\"], __webpack_require__(1)))\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($, Util) {function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Modal = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'modal';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.modal';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n RESIZE: \"resize\" + EVENT_KEY,\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY,\n KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY,\n MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY,\n MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n BACKDROP: 'modal-backdrop',\n OPEN: 'modal-open',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DIALOG: '.modal-dialog',\n DATA_TOGGLE: '[data-toggle=\"modal\"]',\n DATA_DISMISS: '[data-dismiss=\"modal\"]',\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top',\n NAVBAR_TOGGLER: '.navbar-toggler'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Modal =\n /*#__PURE__*/\n function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = $(element).find(Selector.DIALOG)[0];\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isTransitioning || this._isShown) {\n return;\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $.Event(Event.SHOW, {\n relatedTarget: relatedTarget\n });\n $(this._element).trigger(showEvent);\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n $(document.body).addClass(ClassName.OPEN);\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {\n $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {\n if ($(event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (this._isTransitioning || !this._isShown) {\n return;\n }\n\n var hideEvent = $.Event(Event.HIDE);\n $(this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $(this._element).hasClass(ClassName.FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(document).off(Event.FOCUSIN);\n $(this._element).removeClass(ClassName.SHOW);\n $(this._element).off(Event.CLICK_DISMISS);\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n $(window, document, this._element, this._backdrop).off(EVENT_KEY);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this3 = this;\n\n var transition = $(this._element).hasClass(ClassName.FADE);\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.scrollTop = 0;\n\n if (transition) {\n Util.reflow(this._element);\n }\n\n $(this._element).addClass(ClassName.SHOW);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this3._config.focus) {\n _this3._element.focus();\n }\n\n _this3._isTransitioning = false;\n $(_this3._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this4 = this;\n\n $(document).off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, function (event) {\n if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n _this4._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this5 = this;\n\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault();\n\n _this5.hide();\n }\n });\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this6 = this;\n\n if (this._isShown) {\n $(window).on(Event.RESIZE, function (event) {\n return _this6.handleUpdate(event);\n });\n } else {\n $(window).off(Event.RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this7 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $(document.body).removeClass(ClassName.OPEN);\n\n _this7._resetAdjustments();\n\n _this7._resetScrollbar();\n\n $(_this7._element).trigger(Event.HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this8 = this;\n\n var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = ClassName.BACKDROP;\n\n if (animate) {\n $(this._backdrop).addClass(animate);\n }\n\n $(this._backdrop).appendTo(document.body);\n $(this._element).on(Event.CLICK_DISMISS, function (event) {\n if (_this8._ignoreBackdropClick) {\n _this8._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (_this8._config.backdrop === 'static') {\n _this8._element.focus();\n } else {\n _this8.hide();\n }\n });\n\n if (animate) {\n Util.reflow(this._backdrop);\n }\n\n $(this._backdrop).addClass(ClassName.SHOW);\n\n if (!callback) {\n return;\n }\n\n if (!animate) {\n callback();\n return;\n }\n\n var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this8._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n }; // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this9 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n // Adjust fixed content padding\n $(Selector.FIXED_CONTENT).each(function (index, element) {\n var actualPadding = $(element)[0].style.paddingRight;\n var calculatedPadding = $(element).css('padding-right');\n $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $(Selector.STICKY_CONTENT).each(function (index, element) {\n var actualMargin = $(element)[0].style.marginRight;\n var calculatedMargin = $(element).css('margin-right');\n $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n }); // Adjust navbar-toggler margin\n\n $(Selector.NAVBAR_TOGGLER).each(function (index, element) {\n var actualMargin = $(element)[0].style.marginRight;\n var calculatedMargin = $(element).css('margin-right');\n $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this9._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $(document.body).css('padding-right');\n $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n $(Selector.FIXED_CONTENT).each(function (index, element) {\n var padding = $(element).data('padding-right');\n\n if (typeof padding !== 'undefined') {\n $(element).css('padding-right', padding).removeData('padding-right');\n }\n }); // Restore sticky content and navbar-toggler margin\n\n $(Selector.STICKY_CONTENT + \", \" + Selector.NAVBAR_TOGGLER).each(function (index, element) {\n var margin = $(element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $(document.body).data('padding-right');\n\n if (typeof padding !== 'undefined') {\n $(document.body).css('padding-right', padding).removeData('padding-right');\n }\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n }; // Static\n\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $(this).data(), typeof config === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n var _this10 = this;\n\n var target;\n var selector = Util.getSelectorFromElement(this);\n\n if (selector) {\n target = $(selector)[0];\n }\n\n var config = $(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $(target).one(Event.SHOW, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(Event.HIDDEN, function () {\n if ($(_this10).is(':visible')) {\n _this10.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($(target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Modal._jQueryInterface;\n $.fn[NAME].Constructor = Modal;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Modal._jQueryInterface;\n };\n\n return Modal;\n}($);\n//# sourceMappingURL=modal.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($, Popper, Util) {function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Tooltip = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tooltip';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.tooltip';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)'\n };\n var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent'\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n };\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $.removeData(this.element, this.constructor.DATA_KEY);\n $(this.element).off(this.constructor.EVENT_KEY);\n $(this.element).closest('.modal').off('hide.bs.modal');\n\n if (this.tip) {\n $(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent);\n var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n var container = this.config.container === false ? document.body : $(this.config.container);\n $(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container);\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n _this._handlePopperPlacementChange(data);\n }\n });\n $(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Protected\n\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement());\n this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n var html = this.config.html;\n\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($(content).text());\n }\n } else {\n $element[html ? 'html' : 'text'](content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n }; // Private\n\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this3 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {\n return _this3.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;\n $(_this3.element).on(eventIn, _this3.config.selector, function (event) {\n return _this3._enter(event);\n }).on(eventOut, _this3.config.selector, function (event) {\n return _this3._leave(event);\n });\n }\n\n $(_this3.element).closest('.modal').on('hide.bs.modal', function () {\n return _this3.hide();\n });\n });\n\n if (this.config.selector) {\n this.config = _objectSpread({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) {\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(data.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $(tip).removeClass(ClassName.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n }; // Static\n\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Tooltip._jQueryInterface;\n $.fn[NAME].Constructor = Tooltip;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tooltip._jQueryInterface;\n };\n\n return Tooltip;\n}($, Popper);\n//# sourceMappingURL=tooltip.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(3)[\"default\"], __webpack_require__(1)))\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($, Tooltip) {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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Popover = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'popover';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.popover';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-popover';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n\n var Default = _objectSpread({}, Tooltip.Default, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n });\n\n var DefaultType = _objectSpread({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TITLE: '.popover-header',\n CONTENT: '.popover-body'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Popover =\n /*#__PURE__*/\n function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype;\n\n // Overrides\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle());\n\n var content = this._getContent();\n\n if (typeof content === 'function') {\n content = content.call(this.element);\n }\n\n this.setElementContent($tip.find(Selector.CONTENT), content);\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n }; // Private\n\n\n _proto._getContent = function _getContent() {\n return this.element.getAttribute('data-content') || this.config.content;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n }; // Static\n\n\n Popover._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data && /destroy|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Popover, null, [{\n key: \"VERSION\",\n // Getters\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Popover._jQueryInterface;\n $.fn[NAME].Constructor = Popover;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Popover._jQueryInterface;\n };\n\n return Popover;\n}($);\n//# sourceMappingURL=popover.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(17)))\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($, Popper, Util) {function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Tooltip = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tooltip';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.tooltip';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)'\n };\n var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent'\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n };\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $.removeData(this.element, this.constructor.DATA_KEY);\n $(this.element).off(this.constructor.EVENT_KEY);\n $(this.element).closest('.modal').off('hide.bs.modal');\n\n if (this.tip) {\n $(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent);\n var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n var container = this.config.container === false ? document.body : $(this.config.container);\n $(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container);\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n _this._handlePopperPlacementChange(data);\n }\n });\n $(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Protected\n\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement());\n this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n var html = this.config.html;\n\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($(content).text());\n }\n } else {\n $element[html ? 'html' : 'text'](content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n }; // Private\n\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this3 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {\n return _this3.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;\n $(_this3.element).on(eventIn, _this3.config.selector, function (event) {\n return _this3._enter(event);\n }).on(eventOut, _this3.config.selector, function (event) {\n return _this3._leave(event);\n });\n }\n\n $(_this3.element).closest('.modal').on('hide.bs.modal', function () {\n return _this3.hide();\n });\n });\n\n if (this.config.selector) {\n this.config = _objectSpread({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) {\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(data.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $(tip).removeClass(ClassName.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n }; // Static\n\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Tooltip._jQueryInterface;\n $.fn[NAME].Constructor = Tooltip;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tooltip._jQueryInterface;\n };\n\n return Tooltip;\n}($, Popper);\n//# sourceMappingURL=tooltip.js.map\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = Tooltip;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(3)[\"default\"], __webpack_require__(1)))\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($, Util) {function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar ScrollSpy = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'scrollspy';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.scrollspy';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Default = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var Event = {\n ACTIVATE: \"activate\" + EVENT_KEY,\n SCROLL: \"scroll\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_ITEM: 'dropdown-item',\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active'\n };\n var Selector = {\n DATA_SPY: '[data-spy=\"scroll\"]',\n ACTIVE: '.active',\n NAV_LIST_GROUP: '.nav, .list-group',\n NAV_LINKS: '.nav-link',\n NAV_ITEMS: '.nav-item',\n LIST_ITEMS: '.list-group-item',\n DROPDOWN: '.dropdown',\n DROPDOWN_ITEMS: '.dropdown-item',\n DROPDOWN_TOGGLE: '.dropdown-toggle'\n };\n var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var ScrollSpy =\n /*#__PURE__*/\n function () {\n function ScrollSpy(element, config) {\n var _this = this;\n\n this._element = element;\n this._scrollElement = element.tagName === 'BODY' ? window : element;\n this._config = this._getConfig(config);\n this._selector = this._config.target + \" \" + Selector.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector.DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $(this._scrollElement).on(Event.SCROLL, function (event) {\n return _this._process(event);\n });\n this.refresh();\n\n this._process();\n } // Getters\n\n\n var _proto = ScrollSpy.prototype;\n\n // Public\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n this._offsets = [];\n this._targets = [];\n this._scrollHeight = this._getScrollHeight();\n var targets = $.makeArray($(this._selector));\n targets.map(function (element) {\n var target;\n var targetSelector = Util.getSelectorFromElement(element);\n\n if (targetSelector) {\n target = $(targetSelector)[0];\n }\n\n if (target) {\n var targetBCR = target.getBoundingClientRect();\n\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n }\n }\n\n return null;\n }).filter(function (item) {\n return item;\n }).sort(function (a, b) {\n return a[0] - b[0];\n }).forEach(function (item) {\n _this2._offsets.push(item[0]);\n\n _this2._targets.push(item[1]);\n });\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n $(this._scrollElement).off(EVENT_KEY);\n this._element = null;\n this._scrollElement = null;\n this._config = null;\n this._selector = null;\n this._offsets = null;\n this._targets = null;\n this._activeTarget = null;\n this._scrollHeight = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string') {\n var id = $(config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME);\n $(config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getScrollTop = function _getScrollTop() {\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n };\n\n _proto._getScrollHeight = function _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n };\n\n _proto._getOffsetHeight = function _getOffsetHeight() {\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n };\n\n _proto._process = function _process() {\n var scrollTop = this._getScrollTop() + this._config.offset;\n\n var scrollHeight = this._getScrollHeight();\n\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh();\n }\n\n if (scrollTop >= maxScroll) {\n var target = this._targets[this._targets.length - 1];\n\n if (this._activeTarget !== target) {\n this._activate(target);\n }\n\n return;\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null;\n\n this._clear();\n\n return;\n }\n\n for (var i = this._offsets.length; i--;) {\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n if (isActiveTarget) {\n this._activate(this._targets[i]);\n }\n }\n };\n\n _proto._activate = function _activate(target) {\n this._activeTarget = target;\n\n this._clear();\n\n var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style\n\n\n queries = queries.map(function (selector) {\n return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + (selector + \"[href=\\\"\" + target + \"\\\"]\");\n });\n var $link = $(queries.join(','));\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n $link.addClass(ClassName.ACTIVE);\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + \", \" + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);\n }\n\n $(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n });\n };\n\n _proto._clear = function _clear() {\n $(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n }; // Static\n\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new ScrollSpy(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(ScrollSpy, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(window).on(Event.LOAD_DATA_API, function () {\n var scrollSpys = $.makeArray($(Selector.DATA_SPY));\n\n for (var i = scrollSpys.length; i--;) {\n var $spy = $(scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = ScrollSpy._jQueryInterface;\n $.fn[NAME].Constructor = ScrollSpy;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return ScrollSpy._jQueryInterface;\n };\n\n return ScrollSpy;\n}($);\n//# sourceMappingURL=scrollspy.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($, Util) {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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Tab = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tab';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.tab';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active',\n DISABLED: 'disabled',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DROPDOWN: '.dropdown',\n NAV_LIST_GROUP: '.nav, .list-group',\n ACTIVE: '.active',\n ACTIVE_UL: '> li > .active',\n DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE: '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tab =\n /*#__PURE__*/\n function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE;\n previous = $.makeArray($(listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $.Event(Event.HIDE, {\n relatedTarget: this._element\n });\n var showEvent = $.Event(Event.SHOW, {\n relatedTarget: previous\n });\n\n if (previous) {\n $(previous).trigger(hideEvent);\n }\n\n $(this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (selector) {\n target = $(selector)[0];\n }\n\n this._activate(this._element, listElement);\n\n var complete = function complete() {\n var hiddenEvent = $.Event(Event.HIDDEN, {\n relatedTarget: _this._element\n });\n var shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: previous\n });\n $(previous).trigger(hiddenEvent);\n $(_this._element).trigger(shownEvent);\n };\n\n if (target) {\n this._activate(target, target.parentNode, complete);\n } else {\n complete();\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Private\n\n\n _proto._activate = function _activate(element, container, callback) {\n var _this2 = this;\n\n var activeElements;\n\n if (container.nodeName === 'UL') {\n activeElements = $(container).find(Selector.ACTIVE_UL);\n } else {\n activeElements = $(container).children(Selector.ACTIVE);\n }\n\n var active = activeElements[0];\n var isTransitioning = callback && active && $(active).hasClass(ClassName.FADE);\n\n var complete = function complete() {\n return _this2._transitionComplete(element, active, callback);\n };\n\n if (active && isTransitioning) {\n var transitionDuration = Util.getTransitionDurationFromElement(active);\n $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(ClassName.SHOW + \" \" + ClassName.ACTIVE);\n var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(ClassName.ACTIVE);\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false);\n }\n }\n\n $(element).addClass(ClassName.ACTIVE);\n\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true);\n }\n\n Util.reflow(element);\n $(element).addClass(ClassName.SHOW);\n\n if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];\n\n if (dropdownElement) {\n $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n }\n\n element.setAttribute('aria-expanded', true);\n }\n\n if (callback) {\n callback();\n }\n }; // Static\n\n\n Tab._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY);\n\n if (!data) {\n data = new Tab(this);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tab, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Tab;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($(this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tab._jQueryInterface;\n $.fn[NAME].Constructor = Tab;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tab._jQueryInterface;\n };\n\n return Tab;\n}($);\n//# sourceMappingURL=tab.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_jQuery) {(function() {\n var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n (function($, window) {\n var Offcanvas, OffcanvasDropdown, OffcanvasTouch;\n OffcanvasDropdown = (function() {\n function OffcanvasDropdown(element) {\n this.element = element;\n this._clickEvent = __bind(this._clickEvent, this);\n this.element = $(this.element);\n this.nav = this.element.closest(\".nav\");\n this.dropdown = this.element.parent().find(\".dropdown-menu\");\n this.element.on('click', this._clickEvent);\n this.nav.closest('.navbar-offcanvas').on('click', (function(_this) {\n return function() {\n if (_this.dropdown.is('.shown')) {\n return _this.dropdown.removeClass('shown').closest('.open').removeClass('open');\n }\n };\n })(this));\n }\n\n OffcanvasDropdown.prototype._clickEvent = function(e) {\n if (!this.dropdown.hasClass('shown')) {\n e.preventDefault();\n }\n e.stopPropagation();\n $('.dropdown-toggle').not(this.element).closest('.open').removeClass('open').find('.dropdown-menu').removeClass('shown');\n this.dropdown.toggleClass(\"shown\");\n return this.element.parent().toggleClass('open');\n };\n\n return OffcanvasDropdown;\n\n })();\n OffcanvasTouch = (function() {\n function OffcanvasTouch(button, element, location, offcanvas) {\n this.button = button;\n this.element = element;\n this.location = location;\n this.offcanvas = offcanvas;\n this._getFade = __bind(this._getFade, this);\n this._getCss = __bind(this._getCss, this);\n this._touchEnd = __bind(this._touchEnd, this);\n this._touchMove = __bind(this._touchMove, this);\n this._touchStart = __bind(this._touchStart, this);\n this.endThreshold = 130;\n this.startThreshold = this.element.hasClass('navbar-offcanvas-right') ? $(\"body\").outerWidth() - 60 : 20;\n this.maxStartThreshold = this.element.hasClass('navbar-offcanvas-right') ? $(\"body\").outerWidth() - 20 : 60;\n this.currentX = 0;\n this.fade = this.element.hasClass('navbar-offcanvas-fade') ? true : false;\n $(document).on(\"touchstart\", this._touchStart);\n $(document).on(\"touchmove\", this._touchMove);\n $(document).on(\"touchend\", this._touchEnd);\n }\n\n OffcanvasTouch.prototype._touchStart = function(e) {\n this.startX = e.originalEvent.touches[0].pageX;\n if (this.element.is('.in')) {\n return this.element.height($(window).outerHeight());\n }\n };\n\n OffcanvasTouch.prototype._touchMove = function(e) {\n var x;\n if ($(e.target).parents('.navbar-offcanvas').length > 0) {\n return true;\n }\n if (this.startX > this.startThreshold && this.startX < this.maxStartThreshold) {\n e.preventDefault();\n x = e.originalEvent.touches[0].pageX - this.startX;\n x = this.element.hasClass('navbar-offcanvas-right') ? -x : x;\n if (Math.abs(x) < this.element.outerWidth()) {\n this.element.css(this._getCss(x));\n return this.element.css(this._getFade(x));\n }\n } else if (this.element.hasClass('in')) {\n e.preventDefault();\n x = e.originalEvent.touches[0].pageX + (this.currentX - this.startX);\n x = this.element.hasClass('navbar-offcanvas-right') ? -x : x;\n if (Math.abs(x) < this.element.outerWidth()) {\n this.element.css(this._getCss(x));\n return this.element.css(this._getFade(x));\n }\n }\n };\n\n OffcanvasTouch.prototype._touchEnd = function(e) {\n var end, sendEvents, x;\n if ($(e.target).parents('.navbar-offcanvas').length > 0) {\n return true;\n }\n sendEvents = false;\n x = e.originalEvent.changedTouches[0].pageX;\n if (Math.abs(x) === this.startX) {\n return;\n }\n end = this.element.hasClass('navbar-offcanvas-right') ? Math.abs(x) > (this.endThreshold + 50) : x < (this.endThreshold + 50);\n if (this.element.hasClass('in') && end) {\n this.currentX = 0;\n this.element.removeClass('in').css(this._clearCss());\n this.button.removeClass('is-open');\n sendEvents = true;\n } else if (Math.abs(x - this.startX) > this.endThreshold && this.startX > this.startThreshold && this.startX < this.maxStartThreshold) {\n this.currentX = this.element.hasClass('navbar-offcanvas-right') ? -this.element.outerWidth() : this.element.outerWidth();\n this.element.toggleClass('in').css(this._clearCss());\n this.button.toggleClass('is-open');\n sendEvents = true;\n } else {\n this.element.css(this._clearCss());\n }\n return this.offcanvas.bodyOverflow(sendEvents);\n };\n\n OffcanvasTouch.prototype._getCss = function(x) {\n x = this.element.hasClass('navbar-offcanvas-right') ? -x : x;\n return {\n \"-webkit-transform\": \"translate3d(\" + x + \"px, 0px, 0px)\",\n \"-webkit-transition-duration\": \"0s\",\n \"-moz-transform\": \"translate3d(\" + x + \"px, 0px, 0px)\",\n \"-moz-transition\": \"0s\",\n \"-o-transform\": \"translate3d(\" + x + \"px, 0px, 0px)\",\n \"-o-transition\": \"0s\",\n \"transform\": \"translate3d(\" + x + \"px, 0px, 0px)\",\n \"transition\": \"0s\"\n };\n };\n\n OffcanvasTouch.prototype._getFade = function(x) {\n if (this.fade) {\n return {\n \"opacity\": x / this.element.outerWidth()\n };\n } else {\n return {};\n }\n };\n\n OffcanvasTouch.prototype._clearCss = function() {\n return {\n \"-webkit-transform\": \"\",\n \"-webkit-transition-duration\": \"\",\n \"-moz-transform\": \"\",\n \"-moz-transition\": \"\",\n \"-o-transform\": \"\",\n \"-o-transition\": \"\",\n \"transform\": \"\",\n \"transition\": \"\",\n \"opacity\": \"\"\n };\n };\n\n return OffcanvasTouch;\n\n })();\n window.Offcanvas = Offcanvas = (function() {\n function Offcanvas(element) {\n var t, target;\n this.element = element;\n this.bodyOverflow = __bind(this.bodyOverflow, this);\n this._sendEventsAfter = __bind(this._sendEventsAfter, this);\n this._sendEventsBefore = __bind(this._sendEventsBefore, this);\n this._documentClicked = __bind(this._documentClicked, this);\n this._close = __bind(this._close, this);\n this._open = __bind(this._open, this);\n this._clicked = __bind(this._clicked, this);\n this._navbarHeight = __bind(this._navbarHeight, this);\n target = this.element.attr('data-target') ? this.element.attr('data-target') : false;\n if (target) {\n this.target = $(target);\n if (this.target.length && !this.target.hasClass('js-offcanvas-done')) {\n this.element.addClass('js-offcanvas-has-events');\n this.location = this.target.hasClass(\"navbar-offcanvas-right\") ? \"right\" : \"left\";\n this.target.addClass(this._transformSupported() ? \"offcanvas-transform js-offcanvas-done\" : \"offcanvas-position js-offcanvas-done\");\n this.target.data('offcanvas', this);\n this.element.on(\"click\", this._clicked);\n this.target.on('transitionend', (function(_this) {\n return function() {\n if (_this.target.is(':not(.in)')) {\n return _this.target.height('');\n }\n };\n })(this));\n $(document).on(\"click\", this._documentClicked);\n if (this.target.hasClass('navbar-offcanvas-touch')) {\n t = new OffcanvasTouch(this.element, this.target, this.location, this);\n }\n this.target.find(\".dropdown-toggle\").each(function() {\n var d;\n return d = new OffcanvasDropdown(this);\n });\n this.target.on('offcanvas.toggle', (function(_this) {\n return function(e) {\n return _this._clicked(e);\n };\n })(this));\n this.target.on('offcanvas.close', (function(_this) {\n return function(e) {\n return _this._close(e);\n };\n })(this));\n this.target.on('offcanvas.open', (function(_this) {\n return function(e) {\n return _this._open(e);\n };\n })(this));\n }\n } else {\n console.warn('Offcanvas: `data-target` attribute must be present.');\n }\n }\n\n Offcanvas.prototype._navbarHeight = function() {\n if (this.target.is('.in')) {\n return this.target.height($(window).outerHeight());\n }\n };\n\n Offcanvas.prototype._clicked = function(e) {\n e.preventDefault();\n this._sendEventsBefore();\n $(\".navbar-offcanvas\").not(this.target).trigger('offcanvas.close');\n this.target.toggleClass('in');\n this.element.toggleClass('is-open');\n this._navbarHeight();\n return this.bodyOverflow();\n };\n\n Offcanvas.prototype._open = function(e) {\n e.preventDefault();\n if (this.target.is('.in')) {\n return;\n }\n this._sendEventsBefore();\n this.target.addClass('in');\n this.element.addClass('is-open');\n this._navbarHeight();\n return this.bodyOverflow();\n };\n\n Offcanvas.prototype._close = function(e) {\n e.preventDefault();\n if (this.target.is(':not(.in)')) {\n return;\n }\n this._sendEventsBefore();\n this.target.removeClass('in');\n this.element.removeClass('is-open');\n this._navbarHeight();\n return this.bodyOverflow();\n };\n\n Offcanvas.prototype._documentClicked = function(e) {\n var clickedEl;\n clickedEl = $(e.target);\n if (!clickedEl.hasClass('offcanvas-toggle') && clickedEl.parents('.offcanvas-toggle').length === 0 && clickedEl.parents('.navbar-offcanvas').length === 0 && !clickedEl.hasClass('navbar-offcanvas')) {\n if (this.target.hasClass('in')) {\n e.preventDefault();\n this._sendEventsBefore();\n this.target.removeClass('in');\n this.element.removeClass('is-open');\n this._navbarHeight();\n return this.bodyOverflow();\n }\n }\n };\n\n Offcanvas.prototype._sendEventsBefore = function() {\n if (this.target.hasClass('in')) {\n return this.target.trigger('hide.bs.offcanvas');\n } else {\n return this.target.trigger('show.bs.offcanvas');\n }\n };\n\n Offcanvas.prototype._sendEventsAfter = function() {\n if (this.target.hasClass('in')) {\n return this.target.trigger('shown.bs.offcanvas');\n } else {\n return this.target.trigger('hidden.bs.offcanvas');\n }\n };\n\n Offcanvas.prototype.bodyOverflow = function(events) {\n if (events == null) {\n events = true;\n }\n if (this.target.is('.in')) {\n $('body').addClass('offcanvas-stop-scrolling');\n } else {\n $('body').removeClass('offcanvas-stop-scrolling');\n }\n if (events) {\n return this._sendEventsAfter();\n }\n };\n\n Offcanvas.prototype._transformSupported = function() {\n var asSupport, el, regex, translate3D;\n el = document.createElement('div');\n translate3D = \"translate3d(0px, 0px, 0px)\";\n regex = /translate3d\\(0px, 0px, 0px\\)/g;\n el.style.cssText = \"-webkit-transform: \" + translate3D + \"; -moz-transform: \" + translate3D + \"; -o-transform: \" + translate3D + \"; transform: \" + translate3D;\n asSupport = el.style.cssText.match(regex);\n return asSupport.length != null;\n };\n\n return Offcanvas;\n\n })();\n $.fn.bsOffcanvas = function() {\n return this.each(function() {\n return new Offcanvas($(this));\n });\n };\n return $(function() {\n $('[data-toggle=\"offcanvas\"]').each(function() {\n return $(this).bsOffcanvas();\n });\n $(window).on('resize', function() {\n $('.navbar-offcanvas.in').each(function() {\n return $(this).height('').removeClass('in');\n });\n $('.offcanvas-toggle').removeClass('is-open');\n return $('body').removeClass('offcanvas-stop-scrolling');\n });\n return $('.offcanvas-toggle').each(function() {\n return $(this).on('click', function(e) {\n var el, selector;\n if (!$(this).hasClass('js-offcanvas-has-events')) {\n selector = $(this).attr('data-target');\n el = $(selector);\n if (el) {\n el.height('');\n el.removeClass('in');\n return $('body').css({\n overflow: '',\n position: ''\n });\n }\n }\n });\n });\n });\n })(__webpack_provided_window_dot_jQuery, window);\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(factory) {\r\n if (true) {\r\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(0), __webpack_require__(5)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n } else if (typeof exports === 'object') {\r\n factory(require('jquery'), require('hammerjs'));\r\n } else {\r\n factory(jQuery, Hammer);\r\n }\r\n}(function($, Hammer) {\r\n function hammerify(el, options) {\r\n var $el = $(el);\r\n if(!$el.data(\"hammer\")) {\r\n $el.data(\"hammer\", new Hammer($el[0], options));\r\n }\r\n }\r\n\r\n $.fn.hammer = function(options) {\r\n return this.each(function() {\r\n hammerify(this, options);\r\n });\r\n };\r\n\r\n // extend the emit method to also trigger jQuery events\r\n Hammer.Manager.prototype.emit = (function(originalEmit) {\r\n return function(type, data) {\r\n originalEmit.call(this, type, data);\r\n $(this.element).trigger({\r\n type: type,\r\n gesture: data\r\n });\r\n };\r\n })(Hammer.Manager.prototype.emit);\r\n}));\r\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var require;var require;// PouchDB 6.4.3\n// \n// (c) 2012-2018 Dale Harvey and the PouchDB team\n// PouchDB may be freely distributed under the Apache license, version 2.0.\n// For all details and documentation:\n// http://pouchdb.com\n(function(f){if(true){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.PouchDB = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return require(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = argsArray;\n\nfunction argsArray(fun) {\n return function () {\n var len = arguments.length;\n if (len) {\n var args = [];\n var i = -1;\n while (++i < len) {\n args[i] = arguments[i];\n }\n return fun.call(this, args);\n } else {\n return fun.call(this, []);\n }\n };\n}\n},{}],2:[function(_dereq_,module,exports){\n(function (process){\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = _dereq_(3);\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // Internet Explorer and Edge do not support colors.\n if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n return false;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n\n}).call(this,_dereq_(9))\n},{\"3\":3,\"9\":9}],3:[function(_dereq_,module,exports){\n\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = _dereq_(8);\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n var prevTime;\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n debug.destroy = destroy;\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n exports.instances.push(debug);\n\n return debug;\n}\n\nfunction destroy () {\n var index = exports.instances.indexOf(this);\n if (index !== -1) {\n exports.instances.splice(index, 1);\n return true;\n } else {\n return false;\n }\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var i;\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n\n for (i = 0; i < exports.instances.length; i++) {\n var instance = exports.instances[i];\n instance.enabled = exports.enabled(instance.namespace);\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n if (name[name.length - 1] === '*') {\n return true;\n }\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n\n},{\"8\":8}],4:[function(_dereq_,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\n},{}],5:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],6:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(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} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n\n},{}],7:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(5);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"5\":5}],8:[function(_dereq_,module,exports){\n/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n\n},{}],9:[function(_dereq_,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],10:[function(_dereq_,module,exports){\n(function (factory) {\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD\n define(factory);\n } else {\n // Browser globals (with support for web workers)\n var glob;\n\n try {\n glob = window;\n } catch (e) {\n glob = self;\n }\n\n glob.SparkMD5 = factory();\n }\n}(function (undefined) {\n\n 'use strict';\n\n /*\n * Fastest md5 implementation around (JKM md5).\n * Credits: Joseph Myers\n *\n * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n * @see http://jsperf.com/md5-shootout/7\n */\n\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n var add32 = function (a, b) {\n return (a + b) & 0xFFFFFFFF;\n },\n hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n function cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n }\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n }\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n // containing the last element of the parent array if the sub array specified starts\n // beyond the length of the parent array - weird.\n // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << ((i % 4) << 3);\n }\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n\n return state;\n }\n\n function rhex(n) {\n var s = '',\n j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n }\n return s;\n }\n\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n }\n\n // In some cases the fast add32 function cannot be used..\n if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n add32 = function (x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xFFFF);\n };\n }\n\n // ---------------------------------------------------\n\n /**\n * ArrayBuffer slice polyfill.\n *\n * @see https://github.com/ttaubert/node-arraybuffer-slice\n */\n\n if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = (val | 0) || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n\n return target;\n };\n })();\n }\n\n // ---------------------------------------------------\n\n /**\n * Helpers.\n */\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation.\n *\n * Use this class to perform an incremental md5, otherwise use the\n * static methods instead.\n */\n\n function SparkMD5() {\n // call reset to init the instance\n this.reset();\n }\n\n /**\n * Appends a string.\n * A conversion will be applied if an utf8 string is detected.\n *\n * @param {String} str The string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.append = function (str) {\n // Converts the string to utf8 bytes if necessary\n // Then append as binary\n this.appendBinary(toUtf8(str));\n\n return this;\n };\n\n /**\n * Appends a binary string.\n *\n * @param {String} contents The binary string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.reset = function () {\n this._buff = '';\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n\n return this;\n };\n\n /**\n * Releases memory used by the incremental buffer and other additional\n * resources. If you plan to use the instance again, use reset instead.\n */\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n /**\n * Finish the final calculation based on the tail.\n *\n * @param {Array} tail The tail (will be modified)\n * @param {Number} length The length of the remaining buffer\n */\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n /**\n * Performs the md5 hash on a string.\n * A conversion will be applied if utf8 string is detected.\n *\n * @param {String} str The string\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hash = function (str, raw) {\n // Converts the string to utf8 bytes if necessary\n // Then compute it using the binary function\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n /**\n * Performs the md5 hash on a binary string.\n *\n * @param {String} content The binary string\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation for array buffers.\n *\n * Use this class to perform an incremental md5 ONLY for array buffers.\n */\n SparkMD5.ArrayBuffer = function () {\n // call reset to init the instance\n this.reset();\n };\n\n /**\n * Appends an array buffer.\n *\n * @param {ArrayBuffer} arr The array to be appended\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n\n // Convert buffer to a string\n state.buff = arrayBuffer2Utf8Str(state.buff);\n\n return state;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n // Convert string to buffer\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n /**\n * Performs the md5 hash on an array buffer.\n *\n * @param {ArrayBuffer} arr The array buffer\n * @param {Boolean} raw True to get the raw string, false to get the hex one\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n}));\n\n},{}],11:[function(_dereq_,module,exports){\nvar v1 = _dereq_(14);\nvar v4 = _dereq_(15);\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n\n},{\"14\":14,\"15\":15}],12:[function(_dereq_,module,exports){\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]];\n}\n\nmodule.exports = bytesToUuid;\n\n},{}],13:[function(_dereq_,module,exports){\n// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && msCrypto.getRandomValues.bind(msCrypto));\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n\n},{}],14:[function(_dereq_,module,exports){\nvar rng = _dereq_(13);\nvar bytesToUuid = _dereq_(12);\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n\n},{\"12\":12,\"13\":13}],15:[function(_dereq_,module,exports){\nvar rng = _dereq_(13);\nvar bytesToUuid = _dereq_(12);\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n\n},{\"12\":12,\"13\":13}],16:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Stringify/parse functions that don't operate\n * recursively, so they avoid call stack exceeded\n * errors.\n */\nexports.stringify = function stringify(input) {\n var queue = [];\n queue.push({obj: input});\n\n var res = '';\n var next, obj, prefix, val, i, arrayPrefix, keys, k, key, value, objPrefix;\n while ((next = queue.pop())) {\n obj = next.obj;\n prefix = next.prefix || '';\n val = next.val || '';\n res += prefix;\n if (val) {\n res += val;\n } else if (typeof obj !== 'object') {\n res += typeof obj === 'undefined' ? null : JSON.stringify(obj);\n } else if (obj === null) {\n res += 'null';\n } else if (Array.isArray(obj)) {\n queue.push({val: ']'});\n for (i = obj.length - 1; i >= 0; i--) {\n arrayPrefix = i === 0 ? '' : ',';\n queue.push({obj: obj[i], prefix: arrayPrefix});\n }\n queue.push({val: '['});\n } else { // object\n keys = [];\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n keys.push(k);\n }\n }\n queue.push({val: '}'});\n for (i = keys.length - 1; i >= 0; i--) {\n key = keys[i];\n value = obj[key];\n objPrefix = (i > 0 ? ',' : '');\n objPrefix += JSON.stringify(key) + ':';\n queue.push({obj: value, prefix: objPrefix});\n }\n queue.push({val: '{'});\n }\n }\n return res;\n};\n\n// Convenience function for the parse function.\n// This pop function is basically copied from\n// pouchCollate.parseIndexableString\nfunction pop(obj, stack, metaStack) {\n var lastMetaElement = metaStack[metaStack.length - 1];\n if (obj === lastMetaElement.element) {\n // popping a meta-element, e.g. an object whose value is another object\n metaStack.pop();\n lastMetaElement = metaStack[metaStack.length - 1];\n }\n var element = lastMetaElement.element;\n var lastElementIndex = lastMetaElement.index;\n if (Array.isArray(element)) {\n element.push(obj);\n } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n var key = stack.pop();\n element[key] = obj;\n } else {\n stack.push(obj); // obj with key only\n }\n}\n\nexports.parse = function (str) {\n var stack = [];\n var metaStack = []; // stack for arrays and objects\n var i = 0;\n var collationIndex,parsedNum,numChar;\n var parsedString,lastCh,numConsecutiveSlashes,ch;\n var arrayElement, objElement;\n while (true) {\n collationIndex = str[i++];\n if (collationIndex === '}' ||\n collationIndex === ']' ||\n typeof collationIndex === 'undefined') {\n if (stack.length === 1) {\n return stack.pop();\n } else {\n pop(stack.pop(), stack, metaStack);\n continue;\n }\n }\n switch (collationIndex) {\n case ' ':\n case '\\t':\n case '\\n':\n case ':':\n case ',':\n break;\n case 'n':\n i += 3; // 'ull'\n pop(null, stack, metaStack);\n break;\n case 't':\n i += 3; // 'rue'\n pop(true, stack, metaStack);\n break;\n case 'f':\n i += 4; // 'alse'\n pop(false, stack, metaStack);\n break;\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '-':\n parsedNum = '';\n i--;\n while (true) {\n numChar = str[i++];\n if (/[\\d\\.\\-e\\+]/.test(numChar)) {\n parsedNum += numChar;\n } else {\n i--;\n break;\n }\n }\n pop(parseFloat(parsedNum), stack, metaStack);\n break;\n case '\"':\n parsedString = '';\n lastCh = void 0;\n numConsecutiveSlashes = 0;\n while (true) {\n ch = str[i++];\n if (ch !== '\"' || (lastCh === '\\\\' &&\n numConsecutiveSlashes % 2 === 1)) {\n parsedString += ch;\n lastCh = ch;\n if (lastCh === '\\\\') {\n numConsecutiveSlashes++;\n } else {\n numConsecutiveSlashes = 0;\n }\n } else {\n break;\n }\n }\n pop(JSON.parse('\"' + parsedString + '\"'), stack, metaStack);\n break;\n case '[':\n arrayElement = { element: [], index: stack.length };\n stack.push(arrayElement.element);\n metaStack.push(arrayElement);\n break;\n case '{':\n objElement = { element: {}, index: stack.length };\n stack.push(objElement.element);\n metaStack.push(objElement);\n break;\n default:\n throw new Error(\n 'unexpectedly reached end of input: ' + collationIndex);\n }\n }\n};\n\n},{}],17:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar lie = _interopDefault(_dereq_(7));\nvar getArguments = _interopDefault(_dereq_(1));\nvar nextTick = _interopDefault(_dereq_(5));\nvar events = _dereq_(4);\nvar inherits = _interopDefault(_dereq_(6));\nvar uuidV4 = _interopDefault(_dereq_(11));\nvar debug = _interopDefault(_dereq_(2));\nvar Md5 = _interopDefault(_dereq_(10));\nvar vuvuzela = _interopDefault(_dereq_(16));\n\n/* istanbul ignore next */\nvar PouchPromise = typeof Promise === 'function' ? Promise : lie;\n\nfunction isBinaryObject(object) {\n return (typeof ArrayBuffer !== 'undefined' && object instanceof ArrayBuffer) ||\n (typeof Blob !== 'undefined' && object instanceof Blob);\n}\n\nfunction cloneArrayBuffer(buff) {\n if (typeof buff.slice === 'function') {\n return buff.slice(0);\n }\n // IE10-11 slice() polyfill\n var target = new ArrayBuffer(buff.byteLength);\n var targetArray = new Uint8Array(target);\n var sourceArray = new Uint8Array(buff);\n targetArray.set(sourceArray);\n return target;\n}\n\nfunction cloneBinaryObject(object) {\n if (object instanceof ArrayBuffer) {\n return cloneArrayBuffer(object);\n }\n var size = object.size;\n var type = object.type;\n // Blob\n if (typeof object.slice === 'function') {\n return object.slice(0, size, type);\n }\n // PhantomJS slice() replacement\n return object.webkitSlice(0, size, type);\n}\n\n// most of this is borrowed from lodash.isPlainObject:\n// https://github.com/fis-components/lodash.isplainobject/\n// blob/29c358140a74f252aeb08c9eb28bef86f2217d4a/index.js\n\nvar funcToString = Function.prototype.toString;\nvar objectCtorString = funcToString.call(Object);\n\nfunction isPlainObject(value) {\n var proto = Object.getPrototypeOf(value);\n /* istanbul ignore if */\n if (proto === null) { // not sure when this happens, but I guess it can\n return true;\n }\n var Ctor = proto.constructor;\n return (typeof Ctor == 'function' &&\n Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nfunction clone(object) {\n var newObject;\n var i;\n var len;\n\n if (!object || typeof object !== 'object') {\n return object;\n }\n\n if (Array.isArray(object)) {\n newObject = [];\n for (i = 0, len = object.length; i < len; i++) {\n newObject[i] = clone(object[i]);\n }\n return newObject;\n }\n\n // special case: to avoid inconsistencies between IndexedDB\n // and other backends, we automatically stringify Dates\n if (object instanceof Date) {\n return object.toISOString();\n }\n\n if (isBinaryObject(object)) {\n return cloneBinaryObject(object);\n }\n\n if (!isPlainObject(object)) {\n return object; // don't clone objects like Workers\n }\n\n newObject = {};\n for (i in object) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(object, i)) {\n var value = clone(object[i]);\n if (typeof value !== 'undefined') {\n newObject[i] = value;\n }\n }\n }\n return newObject;\n}\n\nfunction once(fun) {\n var called = false;\n return getArguments(function (args) {\n /* istanbul ignore if */\n if (called) {\n // this is a smoke test and should never actually happen\n throw new Error('once called more than once');\n } else {\n called = true;\n fun.apply(this, args);\n }\n });\n}\n\nfunction toPromise(func) {\n //create the function we will be returning\n return getArguments(function (args) {\n // Clone arguments\n args = clone(args);\n var self = this;\n // if the last argument is a function, assume its a callback\n var usedCB = (typeof args[args.length - 1] === 'function') ? args.pop() : false;\n var promise = new PouchPromise(function (fulfill, reject) {\n var resp;\n try {\n var callback = once(function (err, mesg) {\n if (err) {\n reject(err);\n } else {\n fulfill(mesg);\n }\n });\n // create a callback for this invocation\n // apply the function in the orig context\n args.push(callback);\n resp = func.apply(self, args);\n if (resp && typeof resp.then === 'function') {\n fulfill(resp);\n }\n } catch (e) {\n reject(e);\n }\n });\n // if there is a callback, call it back\n if (usedCB) {\n promise.then(function (result) {\n usedCB(null, result);\n }, usedCB);\n }\n return promise;\n });\n}\n\nfunction logApiCall(self, name, args) {\n /* istanbul ignore if */\n if (self.constructor.listeners('debug').length) {\n var logArgs = ['api', self.name, name];\n for (var i = 0; i < args.length - 1; i++) {\n logArgs.push(args[i]);\n }\n self.constructor.emit('debug', logArgs);\n\n // override the callback itself to log the response\n var origCallback = args[args.length - 1];\n args[args.length - 1] = function (err, res) {\n var responseArgs = ['api', self.name, name];\n responseArgs = responseArgs.concat(\n err ? ['error', err] : ['success', res]\n );\n self.constructor.emit('debug', responseArgs);\n origCallback(err, res);\n };\n }\n}\n\nfunction adapterFun(name, callback) {\n return toPromise(getArguments(function (args) {\n if (this._closed) {\n return PouchPromise.reject(new Error('database is closed'));\n }\n if (this._destroyed) {\n return PouchPromise.reject(new Error('database is destroyed'));\n }\n var self = this;\n logApiCall(self, name, args);\n if (!this.taskqueue.isReady) {\n return new PouchPromise(function (fulfill, reject) {\n self.taskqueue.addTask(function (failed) {\n if (failed) {\n reject(failed);\n } else {\n fulfill(self[name].apply(self, args));\n }\n });\n });\n }\n return callback.apply(this, args);\n }));\n}\n\nfunction mangle(key) {\n return '$' + key;\n}\nfunction unmangle(key) {\n return key.substring(1);\n}\nfunction Map$1() {\n this._store = {};\n}\nMap$1.prototype.get = function (key) {\n var mangled = mangle(key);\n return this._store[mangled];\n};\nMap$1.prototype.set = function (key, value) {\n var mangled = mangle(key);\n this._store[mangled] = value;\n return true;\n};\nMap$1.prototype.has = function (key) {\n var mangled = mangle(key);\n return mangled in this._store;\n};\nMap$1.prototype[\"delete\"] = function (key) {\n var mangled = mangle(key);\n var res = mangled in this._store;\n delete this._store[mangled];\n return res;\n};\nMap$1.prototype.forEach = function (cb) {\n var keys = Object.keys(this._store);\n for (var i = 0, len = keys.length; i < len; i++) {\n var key = keys[i];\n var value = this._store[key];\n key = unmangle(key);\n cb(value, key);\n }\n};\nObject.defineProperty(Map$1.prototype, 'size', {\n get: function () {\n return Object.keys(this._store).length;\n }\n});\n\nfunction Set$1(array) {\n this._store = new Map$1();\n\n // init with an array\n if (array && Array.isArray(array)) {\n for (var i = 0, len = array.length; i < len; i++) {\n this.add(array[i]);\n }\n }\n}\nSet$1.prototype.add = function (key) {\n return this._store.set(key, true);\n};\nSet$1.prototype.has = function (key) {\n return this._store.has(key);\n};\nSet$1.prototype.forEach = function (cb) {\n this._store.forEach(function (value, key) {\n cb(key);\n });\n};\nObject.defineProperty(Set$1.prototype, 'size', {\n get: function () {\n return this._store.size;\n }\n});\n\n/* global Map,Set,Symbol */\n// Based on https://kangax.github.io/compat-table/es6/ we can sniff out\n// incomplete Map/Set implementations which would otherwise cause our tests to fail.\n// Notably they fail in IE11 and iOS 8.4, which this prevents.\nfunction supportsMapAndSet() {\n if (typeof Symbol === 'undefined' || typeof Map === 'undefined' || typeof Set === 'undefined') {\n return false;\n }\n var prop = Object.getOwnPropertyDescriptor(Map, Symbol.species);\n return prop && 'get' in prop && Map[Symbol.species] === Map;\n}\n\n// based on https://github.com/montagejs/collections\n/* global Map,Set */\n\nvar ExportedSet;\nvar ExportedMap;\n\n{\n if (supportsMapAndSet()) { // prefer built-in Map/Set\n ExportedSet = Set;\n ExportedMap = Map;\n } else { // fall back to our polyfill\n ExportedSet = Set$1;\n ExportedMap = Map$1;\n }\n}\n\n// like underscore/lodash _.pick()\nfunction pick(obj, arr) {\n var res = {};\n for (var i = 0, len = arr.length; i < len; i++) {\n var prop = arr[i];\n if (prop in obj) {\n res[prop] = obj[prop];\n }\n }\n return res;\n}\n\n// Most browsers throttle concurrent requests at 6, so it's silly\n// to shim _bulk_get by trying to launch potentially hundreds of requests\n// and then letting the majority time out. We can handle this ourselves.\nvar MAX_NUM_CONCURRENT_REQUESTS = 6;\n\nfunction identityFunction(x) {\n return x;\n}\n\nfunction formatResultForOpenRevsGet(result) {\n return [{\n ok: result\n }];\n}\n\n// shim for P/CouchDB adapters that don't directly implement _bulk_get\nfunction bulkGet(db, opts, callback) {\n var requests = opts.docs;\n\n // consolidate into one request per doc if possible\n var requestsById = new ExportedMap();\n requests.forEach(function (request) {\n if (requestsById.has(request.id)) {\n requestsById.get(request.id).push(request);\n } else {\n requestsById.set(request.id, [request]);\n }\n });\n\n var numDocs = requestsById.size;\n var numDone = 0;\n var perDocResults = new Array(numDocs);\n\n function collapseResultsAndFinish() {\n var results = [];\n perDocResults.forEach(function (res) {\n res.docs.forEach(function (info) {\n results.push({\n id: res.id,\n docs: [info]\n });\n });\n });\n callback(null, {results: results});\n }\n\n function checkDone() {\n if (++numDone === numDocs) {\n collapseResultsAndFinish();\n }\n }\n\n function gotResult(docIndex, id, docs) {\n perDocResults[docIndex] = {id: id, docs: docs};\n checkDone();\n }\n\n var allRequests = [];\n requestsById.forEach(function (value, key) {\n allRequests.push(key);\n });\n\n var i = 0;\n\n function nextBatch() {\n\n if (i >= allRequests.length) {\n return;\n }\n\n var upTo = Math.min(i + MAX_NUM_CONCURRENT_REQUESTS, allRequests.length);\n var batch = allRequests.slice(i, upTo);\n processBatch(batch, i);\n i += batch.length;\n }\n\n function processBatch(batch, offset) {\n batch.forEach(function (docId, j) {\n var docIdx = offset + j;\n var docRequests = requestsById.get(docId);\n\n // just use the first request as the \"template\"\n // TODO: The _bulk_get API allows for more subtle use cases than this,\n // but for now it is unlikely that there will be a mix of different\n // \"atts_since\" or \"attachments\" in the same request, since it's just\n // replicate.js that is using this for the moment.\n // Also, atts_since is aspirational, since we don't support it yet.\n var docOpts = pick(docRequests[0], ['atts_since', 'attachments']);\n docOpts.open_revs = docRequests.map(function (request) {\n // rev is optional, open_revs disallowed\n return request.rev;\n });\n\n // remove falsey / undefined revisions\n docOpts.open_revs = docOpts.open_revs.filter(identityFunction);\n\n var formatResult = identityFunction;\n\n if (docOpts.open_revs.length === 0) {\n delete docOpts.open_revs;\n\n // when fetching only the \"winning\" leaf,\n // transform the result so it looks like an open_revs\n // request\n formatResult = formatResultForOpenRevsGet;\n }\n\n // globally-supplied options\n ['revs', 'attachments', 'binary', 'ajax', 'latest'].forEach(function (param) {\n if (param in opts) {\n docOpts[param] = opts[param];\n }\n });\n db.get(docId, docOpts, function (err, res) {\n var result;\n /* istanbul ignore if */\n if (err) {\n result = [{error: err}];\n } else {\n result = formatResult(res);\n }\n gotResult(docIdx, docId, result);\n nextBatch();\n });\n });\n }\n\n nextBatch();\n\n}\n\nfunction isChromeApp() {\n return (typeof chrome !== \"undefined\" &&\n typeof chrome.storage !== \"undefined\" &&\n typeof chrome.storage.local !== \"undefined\");\n}\n\nvar hasLocal;\n\nif (isChromeApp()) {\n hasLocal = false;\n} else {\n try {\n localStorage.setItem('_pouch_check_localstorage', 1);\n hasLocal = !!localStorage.getItem('_pouch_check_localstorage');\n } catch (e) {\n hasLocal = false;\n }\n}\n\nfunction hasLocalStorage() {\n return hasLocal;\n}\n\n// Custom nextTick() shim for browsers. In node, this will just be process.nextTick(). We\n// avoid using process.nextTick() directly because the polyfill is very large and we don't\n// need all of it (see: https://github.com/defunctzombie/node-process).\n// \"immediate\" 3.0.8 is used by lie, and it's a smaller version of the latest \"immediate\"\n// package, so it's the one we use.\n// When we use nextTick() in our codebase, we only care about not releasing Zalgo\n// (see: http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony).\n// Microtask vs macrotask doesn't matter to us. So we're free to use the fastest\n// (least latency) option, which is \"immediate\" due to use of microtasks.\n// All of our nextTicks are isolated to this one function so we can easily swap out one\n// implementation for another.\n\ninherits(Changes, events.EventEmitter);\n\n/* istanbul ignore next */\nfunction attachBrowserEvents(self) {\n if (isChromeApp()) {\n chrome.storage.onChanged.addListener(function (e) {\n // make sure it's event addressed to us\n if (e.db_name != null) {\n //object only has oldValue, newValue members\n self.emit(e.dbName.newValue);\n }\n });\n } else if (hasLocalStorage()) {\n if (typeof addEventListener !== 'undefined') {\n addEventListener(\"storage\", function (e) {\n self.emit(e.key);\n });\n } else { // old IE\n window.attachEvent(\"storage\", function (e) {\n self.emit(e.key);\n });\n }\n }\n}\n\nfunction Changes() {\n events.EventEmitter.call(this);\n this._listeners = {};\n\n attachBrowserEvents(this);\n}\nChanges.prototype.addListener = function (dbName, id, db, opts) {\n /* istanbul ignore if */\n if (this._listeners[id]) {\n return;\n }\n var self = this;\n var inprogress = false;\n function eventFunction() {\n /* istanbul ignore if */\n if (!self._listeners[id]) {\n return;\n }\n if (inprogress) {\n inprogress = 'waiting';\n return;\n }\n inprogress = true;\n var changesOpts = pick(opts, [\n 'style', 'include_docs', 'attachments', 'conflicts', 'filter',\n 'doc_ids', 'view', 'since', 'query_params', 'binary'\n ]);\n\n /* istanbul ignore next */\n function onError() {\n inprogress = false;\n }\n\n db.changes(changesOpts).on('change', function (c) {\n if (c.seq > opts.since && !opts.cancelled) {\n opts.since = c.seq;\n opts.onChange(c);\n }\n }).on('complete', function () {\n if (inprogress === 'waiting') {\n nextTick(eventFunction);\n }\n inprogress = false;\n }).on('error', onError);\n }\n this._listeners[id] = eventFunction;\n this.on(dbName, eventFunction);\n};\n\nChanges.prototype.removeListener = function (dbName, id) {\n /* istanbul ignore if */\n if (!(id in this._listeners)) {\n return;\n }\n events.EventEmitter.prototype.removeListener.call(this, dbName,\n this._listeners[id]);\n delete this._listeners[id];\n};\n\n\n/* istanbul ignore next */\nChanges.prototype.notifyLocalWindows = function (dbName) {\n //do a useless change on a storage thing\n //in order to get other windows's listeners to activate\n if (isChromeApp()) {\n chrome.storage.local.set({dbName: dbName});\n } else if (hasLocalStorage()) {\n localStorage[dbName] = (localStorage[dbName] === \"a\") ? \"b\" : \"a\";\n }\n};\n\nChanges.prototype.notify = function (dbName) {\n this.emit(dbName);\n this.notifyLocalWindows(dbName);\n};\n\nfunction guardedConsole(method) {\n /* istanbul ignore else */\n if (typeof console !== 'undefined' && typeof console[method] === 'function') {\n var args = Array.prototype.slice.call(arguments, 1);\n console[method].apply(console, args);\n }\n}\n\nfunction randomNumber(min, max) {\n var maxTimeout = 600000; // Hard-coded default of 10 minutes\n min = parseInt(min, 10) || 0;\n max = parseInt(max, 10);\n if (max !== max || max <= min) {\n max = (min || 1) << 1; //doubling\n } else {\n max = max + 1;\n }\n // In order to not exceed maxTimeout, pick a random value between half of maxTimeout and maxTimeout\n if (max > maxTimeout) {\n min = maxTimeout >> 1; // divide by two\n max = maxTimeout;\n }\n var ratio = Math.random();\n var range = max - min;\n\n return ~~(range * ratio + min); // ~~ coerces to an int, but fast.\n}\n\nfunction defaultBackOff(min) {\n var max = 0;\n if (!min) {\n max = 2000;\n }\n return randomNumber(min, max);\n}\n\n// designed to give info to browser users, who are disturbed\n// when they see http errors in the console\nfunction explainError(status, str) {\n guardedConsole('info', 'The above ' + status + ' is totally normal. ' + str);\n}\n\nvar assign;\n{\n if (typeof Object.assign === 'function') {\n assign = Object.assign;\n } else {\n // lite Object.assign polyfill based on\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n assign = function (target) {\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n };\n }\n}\n\nvar $inject_Object_assign = assign;\n\ninherits(PouchError, Error);\n\nfunction PouchError(status, error, reason) {\n Error.call(this, reason);\n this.status = status;\n this.name = error;\n this.message = reason;\n this.error = true;\n}\n\nPouchError.prototype.toString = function () {\n return JSON.stringify({\n status: this.status,\n name: this.name,\n message: this.message,\n reason: this.reason\n });\n};\n\nvar UNAUTHORIZED = new PouchError(401, 'unauthorized', \"Name or password is incorrect.\");\nvar MISSING_BULK_DOCS = new PouchError(400, 'bad_request', \"Missing JSON list of 'docs'\");\nvar MISSING_DOC = new PouchError(404, 'not_found', 'missing');\nvar REV_CONFLICT = new PouchError(409, 'conflict', 'Document update conflict');\nvar INVALID_ID = new PouchError(400, 'bad_request', '_id field must contain a string');\nvar MISSING_ID = new PouchError(412, 'missing_id', '_id is required for puts');\nvar RESERVED_ID = new PouchError(400, 'bad_request', 'Only reserved document ids may start with underscore.');\nvar NOT_OPEN = new PouchError(412, 'precondition_failed', 'Database not open');\nvar UNKNOWN_ERROR = new PouchError(500, 'unknown_error', 'Database encountered an unknown error');\nvar BAD_ARG = new PouchError(500, 'badarg', 'Some query argument is invalid');\nvar INVALID_REQUEST = new PouchError(400, 'invalid_request', 'Request was invalid');\nvar QUERY_PARSE_ERROR = new PouchError(400, 'query_parse_error', 'Some query parameter is invalid');\nvar DOC_VALIDATION = new PouchError(500, 'doc_validation', 'Bad special document member');\nvar BAD_REQUEST = new PouchError(400, 'bad_request', 'Something wrong with the request');\nvar NOT_AN_OBJECT = new PouchError(400, 'bad_request', 'Document must be a JSON object');\nvar DB_MISSING = new PouchError(404, 'not_found', 'Database not found');\nvar IDB_ERROR = new PouchError(500, 'indexed_db_went_bad', 'unknown');\nvar WSQ_ERROR = new PouchError(500, 'web_sql_went_bad', 'unknown');\nvar LDB_ERROR = new PouchError(500, 'levelDB_went_went_bad', 'unknown');\nvar FORBIDDEN = new PouchError(403, 'forbidden', 'Forbidden by design doc validate_doc_update function');\nvar INVALID_REV = new PouchError(400, 'bad_request', 'Invalid rev format');\nvar FILE_EXISTS = new PouchError(412, 'file_exists', 'The database could not be created, the file already exists.');\nvar MISSING_STUB = new PouchError(412, 'missing_stub', 'A pre-existing attachment stub wasn\\'t found');\nvar INVALID_URL = new PouchError(413, 'invalid_url', 'Provided URL is invalid');\n\nfunction createError(error, reason) {\n function CustomPouchError(reason) {\n // inherit error properties from our parent error manually\n // so as to allow proper JSON parsing.\n /* jshint ignore:start */\n for (var p in error) {\n if (typeof error[p] !== 'function') {\n this[p] = error[p];\n }\n }\n /* jshint ignore:end */\n if (reason !== undefined) {\n this.reason = reason;\n }\n }\n CustomPouchError.prototype = PouchError.prototype;\n return new CustomPouchError(reason);\n}\n\nfunction generateErrorFromResponse(err) {\n\n if (typeof err !== 'object') {\n var data = err;\n err = UNKNOWN_ERROR;\n err.data = data;\n }\n\n if ('error' in err && err.error === 'conflict') {\n err.name = 'conflict';\n err.status = 409;\n }\n\n if (!('name' in err)) {\n err.name = err.error || 'unknown';\n }\n\n if (!('status' in err)) {\n err.status = 500;\n }\n\n if (!('message' in err)) {\n err.message = err.message || err.reason;\n }\n\n return err;\n}\n\nfunction tryFilter(filter, doc, req) {\n try {\n return !filter(doc, req);\n } catch (err) {\n var msg = 'Filter function threw: ' + err.toString();\n return createError(BAD_REQUEST, msg);\n }\n}\n\nfunction filterChange(opts) {\n var req = {};\n var hasFilter = opts.filter && typeof opts.filter === 'function';\n req.query = opts.query_params;\n\n return function filter(change) {\n if (!change.doc) {\n // CSG sends events on the changes feed that don't have documents,\n // this hack makes a whole lot of existing code robust.\n change.doc = {};\n }\n\n var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);\n\n if (typeof filterReturn === 'object') {\n return filterReturn;\n }\n\n if (filterReturn) {\n return false;\n }\n\n if (!opts.include_docs) {\n delete change.doc;\n } else if (!opts.attachments) {\n for (var att in change.doc._attachments) {\n /* istanbul ignore else */\n if (change.doc._attachments.hasOwnProperty(att)) {\n change.doc._attachments[att].stub = true;\n }\n }\n }\n return true;\n };\n}\n\nfunction flatten(arrs) {\n var res = [];\n for (var i = 0, len = arrs.length; i < len; i++) {\n res = res.concat(arrs[i]);\n }\n return res;\n}\n\n// shim for Function.prototype.name,\n// for browsers that don't support it like IE\n\n/* istanbul ignore next */\n\n// Determine id an ID is valid\n// - invalid IDs begin with an underescore that does not begin '_design' or\n// '_local'\n// - any other string value is a valid id\n// Returns the specific error object for each case\nfunction invalidIdError(id) {\n var err;\n if (!id) {\n err = createError(MISSING_ID);\n } else if (typeof id !== 'string') {\n err = createError(INVALID_ID);\n } else if (/^_/.test(id) && !(/^_(design|local)/).test(id)) {\n err = createError(RESERVED_ID);\n }\n if (err) {\n throw err;\n }\n}\n\n// Checks if a PouchDB object is \"remote\" or not. This is\n// designed to opt-in to certain optimizations, such as\n// avoiding checks for \"dependentDbs\" and other things that\n// we know only apply to local databases. In general, \"remote\"\n// should be true for the http adapter, and for third-party\n// adapters with similar expensive boundaries to cross for\n// every API call, such as socket-pouch and worker-pouch.\n// Previously, this was handled via db.type() === 'http'\n// which is now deprecated.\n\nfunction isRemote(db) {\n if (typeof db._remote === 'boolean') {\n return db._remote;\n }\n /* istanbul ignore next */\n if (typeof db.type === 'function') {\n guardedConsole('warn',\n 'db.type() is deprecated and will be removed in ' +\n 'a future version of PouchDB');\n return db.type() === 'http';\n }\n /* istanbul ignore next */\n return false;\n}\n\nfunction listenerCount(ee, type) {\n return 'listenerCount' in ee ? ee.listenerCount(type) :\n events.EventEmitter.listenerCount(ee, type);\n}\n\nfunction parseDesignDocFunctionName(s) {\n if (!s) {\n return null;\n }\n var parts = s.split('/');\n if (parts.length === 2) {\n return parts;\n }\n if (parts.length === 1) {\n return [s, s];\n }\n return null;\n}\n\nfunction normalizeDesignDocFunctionName(s) {\n var normalized = parseDesignDocFunctionName(s);\n return normalized ? normalized.join('/') : null;\n}\n\n// originally parseUri 1.2.2, now patched by us\n// (c) Steven Levithan <stevenlevithan.com>\n// MIT License\nvar keys = [\"source\", \"protocol\", \"authority\", \"userInfo\", \"user\", \"password\",\n \"host\", \"port\", \"relative\", \"path\", \"directory\", \"file\", \"query\", \"anchor\"];\nvar qName =\"queryKey\";\nvar qParser = /(?:^|&)([^&=]*)=?([^&]*)/g;\n\n// use the \"loose\" parser\n/* eslint maxlen: 0, no-useless-escape: 0 */\nvar parser = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nfunction parseUri(str) {\n var m = parser.exec(str);\n var uri = {};\n var i = 14;\n\n while (i--) {\n var key = keys[i];\n var value = m[i] || \"\";\n var encoded = ['user', 'password'].indexOf(key) !== -1;\n uri[key] = encoded ? decodeURIComponent(value) : value;\n }\n\n uri[qName] = {};\n uri[keys[12]].replace(qParser, function ($0, $1, $2) {\n if ($1) {\n uri[qName][$1] = $2;\n }\n });\n\n return uri;\n}\n\n// Based on https://github.com/alexdavid/scope-eval v0.0.3\n// (source: https://unpkg.com/scope-eval@0.0.3/scope_eval.js)\n// This is basically just a wrapper around new Function()\n\nfunction scopeEval(source, scope) {\n var keys = [];\n var values = [];\n for (var key in scope) {\n if (scope.hasOwnProperty(key)) {\n keys.push(key);\n values.push(scope[key]);\n }\n }\n keys.push(source);\n return Function.apply(null, keys).apply(null, values);\n}\n\n// this is essentially the \"update sugar\" function from daleharvey/pouchdb#1388\n// the diffFun tells us what delta to apply to the doc. it either returns\n// the doc, or false if it doesn't need to do an update after all\nfunction upsert(db, docId, diffFun) {\n return new PouchPromise(function (fulfill, reject) {\n db.get(docId, function (err, doc) {\n if (err) {\n /* istanbul ignore next */\n if (err.status !== 404) {\n return reject(err);\n }\n doc = {};\n }\n\n // the user might change the _rev, so save it for posterity\n var docRev = doc._rev;\n var newDoc = diffFun(doc);\n\n if (!newDoc) {\n // if the diffFun returns falsy, we short-circuit as\n // an optimization\n return fulfill({updated: false, rev: docRev});\n }\n\n // users aren't allowed to modify these values,\n // so reset them here\n newDoc._id = docId;\n newDoc._rev = docRev;\n fulfill(tryAndPut(db, newDoc, diffFun));\n });\n });\n}\n\nfunction tryAndPut(db, doc, diffFun) {\n return db.put(doc).then(function (res) {\n return {\n updated: true,\n rev: res.rev\n };\n }, function (err) {\n /* istanbul ignore next */\n if (err.status !== 409) {\n throw err;\n }\n return upsert(db, doc._id, diffFun);\n });\n}\n\nfunction rev() {\n return uuidV4.v4().replace(/-/g, '').toLowerCase();\n}\n\nvar uuid = uuidV4.v4;\n\n// We fetch all leafs of the revision tree, and sort them based on tree length\n// and whether they were deleted, undeleted documents with the longest revision\n// tree (most edits) win\n// The final sort algorithm is slightly documented in a sidebar here:\n// http://guide.couchdb.org/draft/conflicts.html\nfunction winningRev(metadata) {\n var winningId;\n var winningPos;\n var winningDeleted;\n var toVisit = metadata.rev_tree.slice();\n var node;\n while ((node = toVisit.pop())) {\n var tree = node.ids;\n var branches = tree[2];\n var pos = node.pos;\n if (branches.length) { // non-leaf\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i]});\n }\n continue;\n }\n var deleted = !!tree[1].deleted;\n var id = tree[0];\n // sort by deleted, then pos, then id\n if (!winningId || (winningDeleted !== deleted ? winningDeleted :\n winningPos !== pos ? winningPos < pos : winningId < id)) {\n winningId = id;\n winningPos = pos;\n winningDeleted = deleted;\n }\n }\n\n return winningPos + '-' + winningId;\n}\n\n// Pretty much all below can be combined into a higher order function to\n// traverse revisions\n// The return value from the callback will be passed as context to all\n// children of that node\nfunction traverseRevTree(revs, callback) {\n var toVisit = revs.slice();\n\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var branches = tree[2];\n var newCtx =\n callback(branches.length === 0, pos, tree[0], node.ctx, tree[1]);\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i], ctx: newCtx});\n }\n }\n}\n\nfunction sortByPos(a, b) {\n return a.pos - b.pos;\n}\n\nfunction collectLeaves(revs) {\n var leaves = [];\n traverseRevTree(revs, function (isLeaf, pos, id, acc, opts) {\n if (isLeaf) {\n leaves.push({rev: pos + \"-\" + id, pos: pos, opts: opts});\n }\n });\n leaves.sort(sortByPos).reverse();\n for (var i = 0, len = leaves.length; i < len; i++) {\n delete leaves[i].pos;\n }\n return leaves;\n}\n\n// returns revs of all conflicts that is leaves such that\n// 1. are not deleted and\n// 2. are different than winning revision\nfunction collectConflicts(metadata) {\n var win = winningRev(metadata);\n var leaves = collectLeaves(metadata.rev_tree);\n var conflicts = [];\n for (var i = 0, len = leaves.length; i < len; i++) {\n var leaf = leaves[i];\n if (leaf.rev !== win && !leaf.opts.deleted) {\n conflicts.push(leaf.rev);\n }\n }\n return conflicts;\n}\n\n// compact a tree by marking its non-leafs as missing,\n// and return a list of revs to delete\nfunction compactTree(metadata) {\n var revs = [];\n traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n revHash, ctx, opts) {\n if (opts.status === 'available' && !isLeaf) {\n revs.push(pos + '-' + revHash);\n opts.status = 'missing';\n }\n });\n return revs;\n}\n\n// build up a list of all the paths to the leafs in this revision tree\nfunction rootToLeaf(revs) {\n var paths = [];\n var toVisit = revs.slice();\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var id = tree[0];\n var opts = tree[1];\n var branches = tree[2];\n var isLeaf = branches.length === 0;\n\n var history = node.history ? node.history.slice() : [];\n history.push({id: id, opts: opts});\n if (isLeaf) {\n paths.push({pos: (pos + 1 - history.length), ids: history});\n }\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i], history: history});\n }\n }\n return paths.reverse();\n}\n\n// for a better overview of what this is doing, read:\n// https://github.com/apache/couchdb-couch/blob/master/src/couch_key_tree.erl\n//\n// But for a quick intro, CouchDB uses a revision tree to store a documents\n// history, A -> B -> C, when a document has conflicts, that is a branch in the\n// tree, A -> (B1 | B2 -> C), We store these as a nested array in the format\n//\n// KeyTree = [Path ... ]\n// Path = {pos: position_from_root, ids: Tree}\n// Tree = [Key, Opts, [Tree, ...]], in particular single node: [Key, []]\n\nfunction sortByPos$1(a, b) {\n return a.pos - b.pos;\n}\n\n// classic binary search\nfunction binarySearch(arr, item, comparator) {\n var low = 0;\n var high = arr.length;\n var mid;\n while (low < high) {\n mid = (low + high) >>> 1;\n if (comparator(arr[mid], item) < 0) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return low;\n}\n\n// assuming the arr is sorted, insert the item in the proper place\nfunction insertSorted(arr, item, comparator) {\n var idx = binarySearch(arr, item, comparator);\n arr.splice(idx, 0, item);\n}\n\n// Turn a path as a flat array into a tree with a single branch.\n// If any should be stemmed from the beginning of the array, that's passed\n// in as the second argument\nfunction pathToTree(path, numStemmed) {\n var root;\n var leaf;\n for (var i = numStemmed, len = path.length; i < len; i++) {\n var node = path[i];\n var currentLeaf = [node.id, node.opts, []];\n if (leaf) {\n leaf[2].push(currentLeaf);\n leaf = currentLeaf;\n } else {\n root = leaf = currentLeaf;\n }\n }\n return root;\n}\n\n// compare the IDs of two trees\nfunction compareTree(a, b) {\n return a[0] < b[0] ? -1 : 1;\n}\n\n// Merge two trees together\n// The roots of tree1 and tree2 must be the same revision\nfunction mergeTree(in_tree1, in_tree2) {\n var queue = [{tree1: in_tree1, tree2: in_tree2}];\n var conflicts = false;\n while (queue.length > 0) {\n var item = queue.pop();\n var tree1 = item.tree1;\n var tree2 = item.tree2;\n\n if (tree1[1].status || tree2[1].status) {\n tree1[1].status =\n (tree1[1].status === 'available' ||\n tree2[1].status === 'available') ? 'available' : 'missing';\n }\n\n for (var i = 0; i < tree2[2].length; i++) {\n if (!tree1[2][0]) {\n conflicts = 'new_leaf';\n tree1[2][0] = tree2[2][i];\n continue;\n }\n\n var merged = false;\n for (var j = 0; j < tree1[2].length; j++) {\n if (tree1[2][j][0] === tree2[2][i][0]) {\n queue.push({tree1: tree1[2][j], tree2: tree2[2][i]});\n merged = true;\n }\n }\n if (!merged) {\n conflicts = 'new_branch';\n insertSorted(tree1[2], tree2[2][i], compareTree);\n }\n }\n }\n return {conflicts: conflicts, tree: in_tree1};\n}\n\nfunction doMerge(tree, path, dontExpand) {\n var restree = [];\n var conflicts = false;\n var merged = false;\n var res;\n\n if (!tree.length) {\n return {tree: [path], conflicts: 'new_leaf'};\n }\n\n for (var i = 0, len = tree.length; i < len; i++) {\n var branch = tree[i];\n if (branch.pos === path.pos && branch.ids[0] === path.ids[0]) {\n // Paths start at the same position and have the same root, so they need\n // merged\n res = mergeTree(branch.ids, path.ids);\n restree.push({pos: branch.pos, ids: res.tree});\n conflicts = conflicts || res.conflicts;\n merged = true;\n } else if (dontExpand !== true) {\n // The paths start at a different position, take the earliest path and\n // traverse up until it as at the same point from root as the path we\n // want to merge. If the keys match we return the longer path with the\n // other merged After stemming we dont want to expand the trees\n\n var t1 = branch.pos < path.pos ? branch : path;\n var t2 = branch.pos < path.pos ? path : branch;\n var diff = t2.pos - t1.pos;\n\n var candidateParents = [];\n\n var trees = [];\n trees.push({ids: t1.ids, diff: diff, parent: null, parentIdx: null});\n while (trees.length > 0) {\n var item = trees.pop();\n if (item.diff === 0) {\n if (item.ids[0] === t2.ids[0]) {\n candidateParents.push(item);\n }\n continue;\n }\n var elements = item.ids[2];\n for (var j = 0, elementsLen = elements.length; j < elementsLen; j++) {\n trees.push({\n ids: elements[j],\n diff: item.diff - 1,\n parent: item.ids,\n parentIdx: j\n });\n }\n }\n\n var el = candidateParents[0];\n\n if (!el) {\n restree.push(branch);\n } else {\n res = mergeTree(el.ids, t2.ids);\n el.parent[2][el.parentIdx] = res.tree;\n restree.push({pos: t1.pos, ids: t1.ids});\n conflicts = conflicts || res.conflicts;\n merged = true;\n }\n } else {\n restree.push(branch);\n }\n }\n\n // We didnt find\n if (!merged) {\n restree.push(path);\n }\n\n restree.sort(sortByPos$1);\n\n return {\n tree: restree,\n conflicts: conflicts || 'internal_node'\n };\n}\n\n// To ensure we dont grow the revision tree infinitely, we stem old revisions\nfunction stem(tree, depth) {\n // First we break out the tree into a complete list of root to leaf paths\n var paths = rootToLeaf(tree);\n var stemmedRevs;\n\n var result;\n for (var i = 0, len = paths.length; i < len; i++) {\n // Then for each path, we cut off the start of the path based on the\n // `depth` to stem to, and generate a new set of flat trees\n var path = paths[i];\n var stemmed = path.ids;\n var node;\n if (stemmed.length > depth) {\n // only do the stemming work if we actually need to stem\n if (!stemmedRevs) {\n stemmedRevs = {}; // avoid allocating this object unnecessarily\n }\n var numStemmed = stemmed.length - depth;\n node = {\n pos: path.pos + numStemmed,\n ids: pathToTree(stemmed, numStemmed)\n };\n\n for (var s = 0; s < numStemmed; s++) {\n var rev = (path.pos + s) + '-' + stemmed[s].id;\n stemmedRevs[rev] = true;\n }\n } else { // no need to actually stem\n node = {\n pos: path.pos,\n ids: pathToTree(stemmed, 0)\n };\n }\n\n // Then we remerge all those flat trees together, ensuring that we dont\n // connect trees that would go beyond the depth limit\n if (result) {\n result = doMerge(result, node, true).tree;\n } else {\n result = [node];\n }\n }\n\n // this is memory-heavy per Chrome profiler, avoid unless we actually stemmed\n if (stemmedRevs) {\n traverseRevTree(result, function (isLeaf, pos, revHash) {\n // some revisions may have been removed in a branch but not in another\n delete stemmedRevs[pos + '-' + revHash];\n });\n }\n\n return {\n tree: result,\n revs: stemmedRevs ? Object.keys(stemmedRevs) : []\n };\n}\n\nfunction merge(tree, path, depth) {\n var newTree = doMerge(tree, path);\n var stemmed = stem(newTree.tree, depth);\n return {\n tree: stemmed.tree,\n stemmedRevs: stemmed.revs,\n conflicts: newTree.conflicts\n };\n}\n\n// return true if a rev exists in the rev tree, false otherwise\nfunction revExists(revs, rev) {\n var toVisit = revs.slice();\n var splitRev = rev.split('-');\n var targetPos = parseInt(splitRev[0], 10);\n var targetId = splitRev[1];\n\n var node;\n while ((node = toVisit.pop())) {\n if (node.pos === targetPos && node.ids[0] === targetId) {\n return true;\n }\n var branches = node.ids[2];\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: node.pos + 1, ids: branches[i]});\n }\n }\n return false;\n}\n\nfunction getTrees(node) {\n return node.ids;\n}\n\n// check if a specific revision of a doc has been deleted\n// - metadata: the metadata object from the doc store\n// - rev: (optional) the revision to check. defaults to winning revision\nfunction isDeleted(metadata, rev) {\n if (!rev) {\n rev = winningRev(metadata);\n }\n var id = rev.substring(rev.indexOf('-') + 1);\n var toVisit = metadata.rev_tree.map(getTrees);\n\n var tree;\n while ((tree = toVisit.pop())) {\n if (tree[0] === id) {\n return !!tree[1].deleted;\n }\n toVisit = toVisit.concat(tree[2]);\n }\n}\n\nfunction isLocalId(id) {\n return (/^_local/).test(id);\n}\n\n// returns the current leaf node for a given revision\nfunction latest(rev, metadata) {\n var toVisit = metadata.rev_tree.slice();\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var id = tree[0];\n var opts = tree[1];\n var branches = tree[2];\n var isLeaf = branches.length === 0;\n\n var history = node.history ? node.history.slice() : [];\n history.push({id: id, pos: pos, opts: opts});\n\n if (isLeaf) {\n for (var i = 0, len = history.length; i < len; i++) {\n var historyNode = history[i];\n var historyRev = historyNode.pos + '-' + historyNode.id;\n\n if (historyRev === rev) {\n // return the rev of this leaf\n return pos + '-' + id;\n }\n }\n }\n\n for (var j = 0, l = branches.length; j < l; j++) {\n toVisit.push({pos: pos + 1, ids: branches[j], history: history});\n }\n }\n\n /* istanbul ignore next */\n throw new Error('Unable to resolve latest revision for id ' + metadata.id + ', rev ' + rev);\n}\n\ninherits(Changes$2, events.EventEmitter);\n\nfunction tryCatchInChangeListener(self, change, pending, lastSeq) {\n // isolate try/catches to avoid V8 deoptimizations\n try {\n self.emit('change', change, pending, lastSeq);\n } catch (e) {\n guardedConsole('error', 'Error in .on(\"change\", function):', e);\n }\n}\n\nfunction Changes$2(db, opts, callback) {\n events.EventEmitter.call(this);\n var self = this;\n this.db = db;\n opts = opts ? clone(opts) : {};\n var complete = opts.complete = once(function (err, resp) {\n if (err) {\n if (listenerCount(self, 'error') > 0) {\n self.emit('error', err);\n }\n } else {\n self.emit('complete', resp);\n }\n self.removeAllListeners();\n db.removeListener('destroyed', onDestroy);\n });\n if (callback) {\n self.on('complete', function (resp) {\n callback(null, resp);\n });\n self.on('error', callback);\n }\n function onDestroy() {\n self.cancel();\n }\n db.once('destroyed', onDestroy);\n\n opts.onChange = function (change, pending, lastSeq) {\n /* istanbul ignore if */\n if (self.isCancelled) {\n return;\n }\n tryCatchInChangeListener(self, change, pending, lastSeq);\n };\n\n var promise = new PouchPromise(function (fulfill, reject) {\n opts.complete = function (err, res) {\n if (err) {\n reject(err);\n } else {\n fulfill(res);\n }\n };\n });\n self.once('cancel', function () {\n db.removeListener('destroyed', onDestroy);\n opts.complete(null, {status: 'cancelled'});\n });\n this.then = promise.then.bind(promise);\n this['catch'] = promise['catch'].bind(promise);\n this.then(function (result) {\n complete(null, result);\n }, complete);\n\n\n\n if (!db.taskqueue.isReady) {\n db.taskqueue.addTask(function (failed) {\n if (failed) {\n opts.complete(failed);\n } else if (self.isCancelled) {\n self.emit('cancel');\n } else {\n self.validateChanges(opts);\n }\n });\n } else {\n self.validateChanges(opts);\n }\n}\nChanges$2.prototype.cancel = function () {\n this.isCancelled = true;\n if (this.db.taskqueue.isReady) {\n this.emit('cancel');\n }\n};\nfunction processChange(doc, metadata, opts) {\n var changeList = [{rev: doc._rev}];\n if (opts.style === 'all_docs') {\n changeList = collectLeaves(metadata.rev_tree)\n .map(function (x) { return {rev: x.rev}; });\n }\n var change = {\n id: metadata.id,\n changes: changeList,\n doc: doc\n };\n\n if (isDeleted(metadata, doc._rev)) {\n change.deleted = true;\n }\n if (opts.conflicts) {\n change.doc._conflicts = collectConflicts(metadata);\n if (!change.doc._conflicts.length) {\n delete change.doc._conflicts;\n }\n }\n return change;\n}\n\nChanges$2.prototype.validateChanges = function (opts) {\n var callback = opts.complete;\n var self = this;\n\n /* istanbul ignore else */\n if (PouchDB._changesFilterPlugin) {\n PouchDB._changesFilterPlugin.validate(opts, function (err) {\n if (err) {\n return callback(err);\n }\n self.doChanges(opts);\n });\n } else {\n self.doChanges(opts);\n }\n};\n\nChanges$2.prototype.doChanges = function (opts) {\n var self = this;\n var callback = opts.complete;\n\n opts = clone(opts);\n if ('live' in opts && !('continuous' in opts)) {\n opts.continuous = opts.live;\n }\n opts.processChange = processChange;\n\n if (opts.since === 'latest') {\n opts.since = 'now';\n }\n if (!opts.since) {\n opts.since = 0;\n }\n if (opts.since === 'now') {\n this.db.info().then(function (info) {\n /* istanbul ignore if */\n if (self.isCancelled) {\n callback(null, {status: 'cancelled'});\n return;\n }\n opts.since = info.update_seq;\n self.doChanges(opts);\n }, callback);\n return;\n }\n\n /* istanbul ignore else */\n if (PouchDB._changesFilterPlugin) {\n PouchDB._changesFilterPlugin.normalize(opts);\n if (PouchDB._changesFilterPlugin.shouldFilter(this, opts)) {\n return PouchDB._changesFilterPlugin.filter(this, opts);\n }\n } else {\n ['doc_ids', 'filter', 'selector', 'view'].forEach(function (key) {\n if (key in opts) {\n guardedConsole('warn',\n 'The \"' + key + '\" option was passed in to changes/replicate, ' +\n 'but pouchdb-changes-filter plugin is not installed, so it ' +\n 'was ignored. Please install the plugin to enable filtering.'\n );\n }\n });\n }\n\n if (!('descending' in opts)) {\n opts.descending = false;\n }\n\n // 0 and 1 should return 1 document\n opts.limit = opts.limit === 0 ? 1 : opts.limit;\n opts.complete = callback;\n var newPromise = this.db._changes(opts);\n /* istanbul ignore else */\n if (newPromise && typeof newPromise.cancel === 'function') {\n var cancel = self.cancel;\n self.cancel = getArguments(function (args) {\n newPromise.cancel();\n cancel.apply(this, args);\n });\n }\n};\n\n/*\n * A generic pouch adapter\n */\n\nfunction compare(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\n// Wrapper for functions that call the bulkdocs api with a single doc,\n// if the first result is an error, return an error\nfunction yankError(callback, docId) {\n return function (err, results) {\n if (err || (results[0] && results[0].error)) {\n err = err || results[0];\n err.docId = docId;\n callback(err);\n } else {\n callback(null, results.length ? results[0] : results);\n }\n };\n}\n\n// clean docs given to us by the user\nfunction cleanDocs(docs) {\n for (var i = 0; i < docs.length; i++) {\n var doc = docs[i];\n if (doc._deleted) {\n delete doc._attachments; // ignore atts for deleted docs\n } else if (doc._attachments) {\n // filter out extraneous keys from _attachments\n var atts = Object.keys(doc._attachments);\n for (var j = 0; j < atts.length; j++) {\n var att = atts[j];\n doc._attachments[att] = pick(doc._attachments[att],\n ['data', 'digest', 'content_type', 'length', 'revpos', 'stub']);\n }\n }\n }\n}\n\n// compare two docs, first by _id then by _rev\nfunction compareByIdThenRev(a, b) {\n var idCompare = compare(a._id, b._id);\n if (idCompare !== 0) {\n return idCompare;\n }\n var aStart = a._revisions ? a._revisions.start : 0;\n var bStart = b._revisions ? b._revisions.start : 0;\n return compare(aStart, bStart);\n}\n\n// for every node in a revision tree computes its distance from the closest\n// leaf\nfunction computeHeight(revs) {\n var height = {};\n var edges = [];\n traverseRevTree(revs, function (isLeaf, pos, id, prnt) {\n var rev$$1 = pos + \"-\" + id;\n if (isLeaf) {\n height[rev$$1] = 0;\n }\n if (prnt !== undefined) {\n edges.push({from: prnt, to: rev$$1});\n }\n return rev$$1;\n });\n\n edges.reverse();\n edges.forEach(function (edge) {\n if (height[edge.from] === undefined) {\n height[edge.from] = 1 + height[edge.to];\n } else {\n height[edge.from] = Math.min(height[edge.from], 1 + height[edge.to]);\n }\n });\n return height;\n}\n\nfunction allDocsKeysParse(opts) {\n var keys = ('limit' in opts) ?\n opts.keys.slice(opts.skip, opts.limit + opts.skip) :\n (opts.skip > 0) ? opts.keys.slice(opts.skip) : opts.keys;\n opts.keys = keys;\n opts.skip = 0;\n delete opts.limit;\n if (opts.descending) {\n keys.reverse();\n opts.descending = false;\n }\n}\n\n// all compaction is done in a queue, to avoid attaching\n// too many listeners at once\nfunction doNextCompaction(self) {\n var task = self._compactionQueue[0];\n var opts = task.opts;\n var callback = task.callback;\n self.get('_local/compaction')[\"catch\"](function () {\n return false;\n }).then(function (doc) {\n if (doc && doc.last_seq) {\n opts.last_seq = doc.last_seq;\n }\n self._compact(opts, function (err, res) {\n /* istanbul ignore if */\n if (err) {\n callback(err);\n } else {\n callback(null, res);\n }\n nextTick(function () {\n self._compactionQueue.shift();\n if (self._compactionQueue.length) {\n doNextCompaction(self);\n }\n });\n });\n });\n}\n\nfunction attachmentNameError(name) {\n if (name.charAt(0) === '_') {\n return name + ' is not a valid attachment name, attachment ' +\n 'names cannot start with \\'_\\'';\n }\n return false;\n}\n\ninherits(AbstractPouchDB, events.EventEmitter);\n\nfunction AbstractPouchDB() {\n events.EventEmitter.call(this);\n}\n\nAbstractPouchDB.prototype.post =\n adapterFun('post', function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof doc !== 'object' || Array.isArray(doc)) {\n return callback(createError(NOT_AN_OBJECT));\n }\n this.bulkDocs({docs: [doc]}, opts, yankError(callback, doc._id));\n});\n\nAbstractPouchDB.prototype.put = adapterFun('put', function (doc, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n if (typeof doc !== 'object' || Array.isArray(doc)) {\n return cb(createError(NOT_AN_OBJECT));\n }\n invalidIdError(doc._id);\n if (isLocalId(doc._id) && typeof this._putLocal === 'function') {\n if (doc._deleted) {\n return this._removeLocal(doc, cb);\n } else {\n return this._putLocal(doc, cb);\n }\n }\n var self = this;\n if (opts.force && doc._rev) {\n transformForceOptionToNewEditsOption();\n putDoc(function (err) {\n var result = err ? null : {ok: true, id: doc._id, rev: doc._rev};\n cb(err, result);\n });\n } else {\n putDoc(cb);\n }\n\n function transformForceOptionToNewEditsOption() {\n var parts = doc._rev.split('-');\n var oldRevId = parts[1];\n var oldRevNum = parseInt(parts[0], 10);\n\n var newRevNum = oldRevNum + 1;\n var newRevId = rev();\n\n doc._revisions = {\n start: newRevNum,\n ids: [newRevId, oldRevId]\n };\n doc._rev = newRevNum + '-' + newRevId;\n opts.new_edits = false;\n }\n function putDoc(next) {\n if (typeof self._put === 'function' && opts.new_edits !== false) {\n self._put(doc, opts, next);\n } else {\n self.bulkDocs({docs: [doc]}, opts, yankError(next, doc._id));\n }\n }\n});\n\nAbstractPouchDB.prototype.putAttachment =\n adapterFun('putAttachment', function (docId, attachmentId, rev$$1,\n blob, type) {\n var api = this;\n if (typeof type === 'function') {\n type = blob;\n blob = rev$$1;\n rev$$1 = null;\n }\n // Lets fix in https://github.com/pouchdb/pouchdb/issues/3267\n /* istanbul ignore if */\n if (typeof type === 'undefined') {\n type = blob;\n blob = rev$$1;\n rev$$1 = null;\n }\n if (!type) {\n guardedConsole('warn', 'Attachment', attachmentId, 'on document', docId, 'is missing content_type');\n }\n\n function createAttachment(doc) {\n var prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;\n doc._attachments = doc._attachments || {};\n doc._attachments[attachmentId] = {\n content_type: type,\n data: blob,\n revpos: ++prevrevpos\n };\n return api.put(doc);\n }\n\n return api.get(docId).then(function (doc) {\n if (doc._rev !== rev$$1) {\n throw createError(REV_CONFLICT);\n }\n\n return createAttachment(doc);\n }, function (err) {\n // create new doc\n /* istanbul ignore else */\n if (err.reason === MISSING_DOC.message) {\n return createAttachment({_id: docId});\n } else {\n throw err;\n }\n });\n});\n\nAbstractPouchDB.prototype.removeAttachment =\n adapterFun('removeAttachment', function (docId, attachmentId, rev$$1,\n callback) {\n var self = this;\n self.get(docId, function (err, obj) {\n /* istanbul ignore if */\n if (err) {\n callback(err);\n return;\n }\n if (obj._rev !== rev$$1) {\n callback(createError(REV_CONFLICT));\n return;\n }\n /* istanbul ignore if */\n if (!obj._attachments) {\n return callback();\n }\n delete obj._attachments[attachmentId];\n if (Object.keys(obj._attachments).length === 0) {\n delete obj._attachments;\n }\n self.put(obj, callback);\n });\n});\n\nAbstractPouchDB.prototype.remove =\n adapterFun('remove', function (docOrId, optsOrRev, opts, callback) {\n var doc;\n if (typeof optsOrRev === 'string') {\n // id, rev, opts, callback style\n doc = {\n _id: docOrId,\n _rev: optsOrRev\n };\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n } else {\n // doc, opts, callback style\n doc = docOrId;\n if (typeof optsOrRev === 'function') {\n callback = optsOrRev;\n opts = {};\n } else {\n callback = opts;\n opts = optsOrRev;\n }\n }\n opts = opts || {};\n opts.was_delete = true;\n var newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};\n newDoc._deleted = true;\n if (isLocalId(newDoc._id) && typeof this._removeLocal === 'function') {\n return this._removeLocal(doc, callback);\n }\n this.bulkDocs({docs: [newDoc]}, opts, yankError(callback, newDoc._id));\n});\n\nAbstractPouchDB.prototype.revsDiff =\n adapterFun('revsDiff', function (req, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var ids = Object.keys(req);\n\n if (!ids.length) {\n return callback(null, {});\n }\n\n var count = 0;\n var missing = new ExportedMap();\n\n function addToMissing(id, revId) {\n if (!missing.has(id)) {\n missing.set(id, {missing: []});\n }\n missing.get(id).missing.push(revId);\n }\n\n function processDoc(id, rev_tree) {\n // Is this fast enough? Maybe we should switch to a set simulated by a map\n var missingForId = req[id].slice(0);\n traverseRevTree(rev_tree, function (isLeaf, pos, revHash, ctx,\n opts) {\n var rev$$1 = pos + '-' + revHash;\n var idx = missingForId.indexOf(rev$$1);\n if (idx === -1) {\n return;\n }\n\n missingForId.splice(idx, 1);\n /* istanbul ignore if */\n if (opts.status !== 'available') {\n addToMissing(id, rev$$1);\n }\n });\n\n // Traversing the tree is synchronous, so now `missingForId` contains\n // revisions that were not found in the tree\n missingForId.forEach(function (rev$$1) {\n addToMissing(id, rev$$1);\n });\n }\n\n ids.map(function (id) {\n this._getRevisionTree(id, function (err, rev_tree) {\n if (err && err.status === 404 && err.message === 'missing') {\n missing.set(id, {missing: req[id]});\n } else if (err) {\n /* istanbul ignore next */\n return callback(err);\n } else {\n processDoc(id, rev_tree);\n }\n\n if (++count === ids.length) {\n // convert LazyMap to object\n var missingObj = {};\n missing.forEach(function (value, key) {\n missingObj[key] = value;\n });\n return callback(null, missingObj);\n }\n });\n }, this);\n});\n\n// _bulk_get API for faster replication, as described in\n// https://github.com/apache/couchdb-chttpd/pull/33\n// At the \"abstract\" level, it will just run multiple get()s in\n// parallel, because this isn't much of a performance cost\n// for local databases (except the cost of multiple transactions, which is\n// small). The http adapter overrides this in order\n// to do a more efficient single HTTP request.\nAbstractPouchDB.prototype.bulkGet =\n adapterFun('bulkGet', function (opts, callback) {\n bulkGet(this, opts, callback);\n});\n\n// compact one document and fire callback\n// by compacting we mean removing all revisions which\n// are further from the leaf in revision tree than max_height\nAbstractPouchDB.prototype.compactDocument =\n adapterFun('compactDocument', function (docId, maxHeight, callback) {\n var self = this;\n this._getRevisionTree(docId, function (err, revTree) {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n var height = computeHeight(revTree);\n var candidates = [];\n var revs = [];\n Object.keys(height).forEach(function (rev$$1) {\n if (height[rev$$1] > maxHeight) {\n candidates.push(rev$$1);\n }\n });\n\n traverseRevTree(revTree, function (isLeaf, pos, revHash, ctx, opts) {\n var rev$$1 = pos + '-' + revHash;\n if (opts.status === 'available' && candidates.indexOf(rev$$1) !== -1) {\n revs.push(rev$$1);\n }\n });\n self._doCompaction(docId, revs, callback);\n });\n});\n\n// compact the whole database using single document\n// compaction\nAbstractPouchDB.prototype.compact =\n adapterFun('compact', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n var self = this;\n opts = opts || {};\n\n self._compactionQueue = self._compactionQueue || [];\n self._compactionQueue.push({opts: opts, callback: callback});\n if (self._compactionQueue.length === 1) {\n doNextCompaction(self);\n }\n});\nAbstractPouchDB.prototype._compact = function (opts, callback) {\n var self = this;\n var changesOpts = {\n return_docs: false,\n last_seq: opts.last_seq || 0\n };\n var promises = [];\n\n function onChange(row) {\n promises.push(self.compactDocument(row.id, 0));\n }\n function onComplete(resp) {\n var lastSeq = resp.last_seq;\n PouchPromise.all(promises).then(function () {\n return upsert(self, '_local/compaction', function deltaFunc(doc) {\n if (!doc.last_seq || doc.last_seq < lastSeq) {\n doc.last_seq = lastSeq;\n return doc;\n }\n return false; // somebody else got here first, don't update\n });\n }).then(function () {\n callback(null, {ok: true});\n })[\"catch\"](callback);\n }\n self.changes(changesOpts)\n .on('change', onChange)\n .on('complete', onComplete)\n .on('error', callback);\n};\n\n/* Begin api wrappers. Specific functionality to storage belongs in the\n _[method] */\nAbstractPouchDB.prototype.get = adapterFun('get', function (id, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n if (typeof id !== 'string') {\n return cb(createError(INVALID_ID));\n }\n if (isLocalId(id) && typeof this._getLocal === 'function') {\n return this._getLocal(id, cb);\n }\n var leaves = [], self = this;\n\n function finishOpenRevs() {\n var result = [];\n var count = leaves.length;\n /* istanbul ignore if */\n if (!count) {\n return cb(null, result);\n }\n\n // order with open_revs is unspecified\n leaves.forEach(function (leaf) {\n self.get(id, {\n rev: leaf,\n revs: opts.revs,\n latest: opts.latest,\n attachments: opts.attachments,\n binary: opts.binary\n }, function (err, doc) {\n if (!err) {\n // using latest=true can produce duplicates\n var existing;\n for (var i = 0, l = result.length; i < l; i++) {\n if (result[i].ok && result[i].ok._rev === doc._rev) {\n existing = true;\n break;\n }\n }\n if (!existing) {\n result.push({ok: doc});\n }\n } else {\n result.push({missing: leaf});\n }\n count--;\n if (!count) {\n cb(null, result);\n }\n });\n });\n }\n\n if (opts.open_revs) {\n if (opts.open_revs === \"all\") {\n this._getRevisionTree(id, function (err, rev_tree) {\n if (err) {\n return cb(err);\n }\n leaves = collectLeaves(rev_tree).map(function (leaf) {\n return leaf.rev;\n });\n finishOpenRevs();\n });\n } else {\n if (Array.isArray(opts.open_revs)) {\n leaves = opts.open_revs;\n for (var i = 0; i < leaves.length; i++) {\n var l = leaves[i];\n // looks like it's the only thing couchdb checks\n if (!(typeof (l) === \"string\" && /^\\d+-/.test(l))) {\n return cb(createError(INVALID_REV));\n }\n }\n finishOpenRevs();\n } else {\n return cb(createError(UNKNOWN_ERROR, 'function_clause'));\n }\n }\n return; // open_revs does not like other options\n }\n\n return this._get(id, opts, function (err, result) {\n if (err) {\n err.docId = id;\n return cb(err);\n }\n\n var doc = result.doc;\n var metadata = result.metadata;\n var ctx = result.ctx;\n\n if (opts.conflicts) {\n var conflicts = collectConflicts(metadata);\n if (conflicts.length) {\n doc._conflicts = conflicts;\n }\n }\n\n if (isDeleted(metadata, doc._rev)) {\n doc._deleted = true;\n }\n\n if (opts.revs || opts.revs_info) {\n var splittedRev = doc._rev.split('-');\n var revNo = parseInt(splittedRev[0], 10);\n var revHash = splittedRev[1];\n\n var paths = rootToLeaf(metadata.rev_tree);\n var path = null;\n\n for (var i = 0; i < paths.length; i++) {\n var currentPath = paths[i];\n var hashIndex = currentPath.ids.map(function (x) { return x.id; })\n .indexOf(revHash);\n var hashFoundAtRevPos = hashIndex === (revNo - 1);\n\n if (hashFoundAtRevPos || (!path && hashIndex !== -1)) {\n path = currentPath;\n }\n }\n\n var indexOfRev = path.ids.map(function (x) { return x.id; })\n .indexOf(doc._rev.split('-')[1]) + 1;\n var howMany = path.ids.length - indexOfRev;\n path.ids.splice(indexOfRev, howMany);\n path.ids.reverse();\n\n if (opts.revs) {\n doc._revisions = {\n start: (path.pos + path.ids.length) - 1,\n ids: path.ids.map(function (rev$$1) {\n return rev$$1.id;\n })\n };\n }\n if (opts.revs_info) {\n var pos = path.pos + path.ids.length;\n doc._revs_info = path.ids.map(function (rev$$1) {\n pos--;\n return {\n rev: pos + '-' + rev$$1.id,\n status: rev$$1.opts.status\n };\n });\n }\n }\n\n if (opts.attachments && doc._attachments) {\n var attachments = doc._attachments;\n var count = Object.keys(attachments).length;\n if (count === 0) {\n return cb(null, doc);\n }\n Object.keys(attachments).forEach(function (key) {\n this._getAttachment(doc._id, key, attachments[key], {\n // Previously the revision handling was done in adapter.js\n // getAttachment, however since idb-next doesnt we need to\n // pass the rev through\n rev: doc._rev,\n binary: opts.binary,\n ctx: ctx\n }, function (err, data) {\n var att = doc._attachments[key];\n att.data = data;\n delete att.stub;\n delete att.length;\n if (!--count) {\n cb(null, doc);\n }\n });\n }, self);\n } else {\n if (doc._attachments) {\n for (var key in doc._attachments) {\n /* istanbul ignore else */\n if (doc._attachments.hasOwnProperty(key)) {\n doc._attachments[key].stub = true;\n }\n }\n }\n cb(null, doc);\n }\n });\n});\n\n// TODO: I dont like this, it forces an extra read for every\n// attachment read and enforces a confusing api between\n// adapter.js and the adapter implementation\nAbstractPouchDB.prototype.getAttachment =\n adapterFun('getAttachment', function (docId, attachmentId, opts, callback) {\n var self = this;\n if (opts instanceof Function) {\n callback = opts;\n opts = {};\n }\n this._get(docId, opts, function (err, res) {\n if (err) {\n return callback(err);\n }\n if (res.doc._attachments && res.doc._attachments[attachmentId]) {\n opts.ctx = res.ctx;\n opts.binary = true;\n self._getAttachment(docId, attachmentId,\n res.doc._attachments[attachmentId], opts, callback);\n } else {\n return callback(createError(MISSING_DOC));\n }\n });\n});\n\nAbstractPouchDB.prototype.allDocs =\n adapterFun('allDocs', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts.skip = typeof opts.skip !== 'undefined' ? opts.skip : 0;\n if (opts.start_key) {\n opts.startkey = opts.start_key;\n }\n if (opts.end_key) {\n opts.endkey = opts.end_key;\n }\n if ('keys' in opts) {\n if (!Array.isArray(opts.keys)) {\n return callback(new TypeError('options.keys must be an array'));\n }\n var incompatibleOpt =\n ['startkey', 'endkey', 'key'].filter(function (incompatibleOpt) {\n return incompatibleOpt in opts;\n })[0];\n if (incompatibleOpt) {\n callback(createError(QUERY_PARSE_ERROR,\n 'Query parameter `' + incompatibleOpt +\n '` is not compatible with multi-get'\n ));\n return;\n }\n if (!isRemote(this)) {\n allDocsKeysParse(opts);\n if (opts.keys.length === 0) {\n return this._allDocs({limit: 0}, callback);\n }\n }\n }\n\n return this._allDocs(opts, callback);\n});\n\nAbstractPouchDB.prototype.changes = function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return new Changes$2(this, opts, callback);\n};\n\nAbstractPouchDB.prototype.close = adapterFun('close', function (callback) {\n this._closed = true;\n this.emit('closed');\n return this._close(callback);\n});\n\nAbstractPouchDB.prototype.info = adapterFun('info', function (callback) {\n var self = this;\n this._info(function (err, info) {\n if (err) {\n return callback(err);\n }\n // assume we know better than the adapter, unless it informs us\n info.db_name = info.db_name || self.name;\n info.auto_compaction = !!(self.auto_compaction && !isRemote(self));\n info.adapter = self.adapter;\n callback(null, info);\n });\n});\n\nAbstractPouchDB.prototype.id = adapterFun('id', function (callback) {\n return this._id(callback);\n});\n\n/* istanbul ignore next */\nAbstractPouchDB.prototype.type = function () {\n return (typeof this._type === 'function') ? this._type() : this.adapter;\n};\n\nAbstractPouchDB.prototype.bulkDocs =\n adapterFun('bulkDocs', function (req, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n opts = opts || {};\n\n if (Array.isArray(req)) {\n req = {\n docs: req\n };\n }\n\n if (!req || !req.docs || !Array.isArray(req.docs)) {\n return callback(createError(MISSING_BULK_DOCS));\n }\n\n for (var i = 0; i < req.docs.length; ++i) {\n if (typeof req.docs[i] !== 'object' || Array.isArray(req.docs[i])) {\n return callback(createError(NOT_AN_OBJECT));\n }\n }\n\n var attachmentError;\n req.docs.forEach(function (doc) {\n if (doc._attachments) {\n Object.keys(doc._attachments).forEach(function (name) {\n attachmentError = attachmentError || attachmentNameError(name);\n if (!doc._attachments[name].content_type) {\n guardedConsole('warn', 'Attachment', name, 'on document', doc._id, 'is missing content_type');\n }\n });\n }\n });\n\n if (attachmentError) {\n return callback(createError(BAD_REQUEST, attachmentError));\n }\n\n if (!('new_edits' in opts)) {\n if ('new_edits' in req) {\n opts.new_edits = req.new_edits;\n } else {\n opts.new_edits = true;\n }\n }\n\n var adapter = this;\n if (!opts.new_edits && !isRemote(adapter)) {\n // ensure revisions of the same doc are sorted, so that\n // the local adapter processes them correctly (#2935)\n req.docs.sort(compareByIdThenRev);\n }\n\n cleanDocs(req.docs);\n\n // in the case of conflicts, we want to return the _ids to the user\n // however, the underlying adapter may destroy the docs array, so\n // create a copy here\n var ids = req.docs.map(function (doc) {\n return doc._id;\n });\n\n return this._bulkDocs(req, opts, function (err, res) {\n if (err) {\n return callback(err);\n }\n if (!opts.new_edits) {\n // this is what couch does when new_edits is false\n res = res.filter(function (x) {\n return x.error;\n });\n }\n // add ids for error/conflict responses (not required for CouchDB)\n if (!isRemote(adapter)) {\n for (var i = 0, l = res.length; i < l; i++) {\n res[i].id = res[i].id || ids[i];\n }\n }\n\n callback(null, res);\n });\n});\n\nAbstractPouchDB.prototype.registerDependentDatabase =\n adapterFun('registerDependentDatabase', function (dependentDb,\n callback) {\n var depDB = new this.constructor(dependentDb, this.__opts);\n\n function diffFun(doc) {\n doc.dependentDbs = doc.dependentDbs || {};\n if (doc.dependentDbs[dependentDb]) {\n return false; // no update required\n }\n doc.dependentDbs[dependentDb] = true;\n return doc;\n }\n upsert(this, '_local/_pouch_dependentDbs', diffFun)\n .then(function () {\n callback(null, {db: depDB});\n })[\"catch\"](callback);\n});\n\nAbstractPouchDB.prototype.destroy =\n adapterFun('destroy', function (opts, callback) {\n\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n var self = this;\n var usePrefix = 'use_prefix' in self ? self.use_prefix : true;\n\n function destroyDb() {\n // call destroy method of the particular adaptor\n self._destroy(opts, function (err, resp) {\n if (err) {\n return callback(err);\n }\n self._destroyed = true;\n self.emit('destroyed');\n callback(null, resp || { 'ok': true });\n });\n }\n\n if (isRemote(self)) {\n // no need to check for dependent DBs if it's a remote DB\n return destroyDb();\n }\n\n self.get('_local/_pouch_dependentDbs', function (err, localDoc) {\n if (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n return callback(err);\n } else { // no dependencies\n return destroyDb();\n }\n }\n var dependentDbs = localDoc.dependentDbs;\n var PouchDB = self.constructor;\n var deletedMap = Object.keys(dependentDbs).map(function (name) {\n // use_prefix is only false in the browser\n /* istanbul ignore next */\n var trueName = usePrefix ?\n name.replace(new RegExp('^' + PouchDB.prefix), '') : name;\n return new PouchDB(trueName, self.__opts).destroy();\n });\n PouchPromise.all(deletedMap).then(destroyDb, callback);\n });\n});\n\nfunction TaskQueue$1() {\n this.isReady = false;\n this.failed = false;\n this.queue = [];\n}\n\nTaskQueue$1.prototype.execute = function () {\n var fun;\n if (this.failed) {\n while ((fun = this.queue.shift())) {\n fun(this.failed);\n }\n } else {\n while ((fun = this.queue.shift())) {\n fun();\n }\n }\n};\n\nTaskQueue$1.prototype.fail = function (err) {\n this.failed = err;\n this.execute();\n};\n\nTaskQueue$1.prototype.ready = function (db) {\n this.isReady = true;\n this.db = db;\n this.execute();\n};\n\nTaskQueue$1.prototype.addTask = function (fun) {\n this.queue.push(fun);\n if (this.failed) {\n this.execute();\n }\n};\n\nfunction parseAdapter(name, opts) {\n var match = name.match(/([a-z-]*):\\/\\/(.*)/);\n if (match) {\n // the http adapter expects the fully qualified name\n return {\n name: /https?/.test(match[1]) ? match[1] + '://' + match[2] : match[2],\n adapter: match[1]\n };\n }\n\n var adapters = PouchDB.adapters;\n var preferredAdapters = PouchDB.preferredAdapters;\n var prefix = PouchDB.prefix;\n var adapterName = opts.adapter;\n\n if (!adapterName) { // automatically determine adapter\n for (var i = 0; i < preferredAdapters.length; ++i) {\n adapterName = preferredAdapters[i];\n // check for browsers that have been upgraded from websql-only to websql+idb\n /* istanbul ignore if */\n if (adapterName === 'idb' && 'websql' in adapters &&\n hasLocalStorage() && localStorage['_pouch__websqldb_' + prefix + name]) {\n // log it, because this can be confusing during development\n guardedConsole('log', 'PouchDB is downgrading \"' + name + '\" to WebSQL to' +\n ' avoid data loss, because it was already opened with WebSQL.');\n continue; // keep using websql to avoid user data loss\n }\n break;\n }\n }\n\n var adapter = adapters[adapterName];\n\n // if adapter is invalid, then an error will be thrown later\n var usePrefix = (adapter && 'use_prefix' in adapter) ?\n adapter.use_prefix : true;\n\n return {\n name: usePrefix ? (prefix + name) : name,\n adapter: adapterName\n };\n}\n\n// OK, so here's the deal. Consider this code:\n// var db1 = new PouchDB('foo');\n// var db2 = new PouchDB('foo');\n// db1.destroy();\n// ^ these two both need to emit 'destroyed' events,\n// as well as the PouchDB constructor itself.\n// So we have one db object (whichever one got destroy() called on it)\n// responsible for emitting the initial event, which then gets emitted\n// by the constructor, which then broadcasts it to any other dbs\n// that may have been created with the same name.\nfunction prepareForDestruction(self) {\n\n function onDestroyed(from_constructor) {\n self.removeListener('closed', onClosed);\n if (!from_constructor) {\n self.constructor.emit('destroyed', self.name);\n }\n }\n\n function onClosed() {\n self.removeListener('destroyed', onDestroyed);\n self.constructor.emit('unref', self);\n }\n\n self.once('destroyed', onDestroyed);\n self.once('closed', onClosed);\n self.constructor.emit('ref', self);\n}\n\ninherits(PouchDB, AbstractPouchDB);\nfunction PouchDB(name, opts) {\n // In Node our test suite only tests this for PouchAlt unfortunately\n /* istanbul ignore if */\n if (!(this instanceof PouchDB)) {\n return new PouchDB(name, opts);\n }\n\n var self = this;\n opts = opts || {};\n\n if (name && typeof name === 'object') {\n opts = name;\n name = opts.name;\n delete opts.name;\n }\n\n this.__opts = opts = clone(opts);\n\n self.auto_compaction = opts.auto_compaction;\n self.prefix = PouchDB.prefix;\n\n if (typeof name !== 'string') {\n throw new Error('Missing/invalid DB name');\n }\n\n var prefixedName = (opts.prefix || '') + name;\n var backend = parseAdapter(prefixedName, opts);\n\n opts.name = backend.name;\n opts.adapter = opts.adapter || backend.adapter;\n\n self.name = name;\n self._adapter = opts.adapter;\n PouchDB.emit('debug', ['adapter', 'Picked adapter: ', opts.adapter]);\n\n if (!PouchDB.adapters[opts.adapter] ||\n !PouchDB.adapters[opts.adapter].valid()) {\n throw new Error('Invalid Adapter: ' + opts.adapter);\n }\n\n AbstractPouchDB.call(self);\n self.taskqueue = new TaskQueue$1();\n\n self.adapter = opts.adapter;\n\n PouchDB.adapters[opts.adapter].call(self, opts, function (err) {\n if (err) {\n return self.taskqueue.fail(err);\n }\n prepareForDestruction(self);\n\n self.emit('created', self);\n PouchDB.emit('created', self.name);\n self.taskqueue.ready(self);\n });\n\n}\n\nPouchDB.adapters = {};\nPouchDB.preferredAdapters = [];\n\nPouchDB.prefix = '_pouch_';\n\nvar eventEmitter = new events.EventEmitter();\n\nfunction setUpEventEmitter(Pouch) {\n Object.keys(events.EventEmitter.prototype).forEach(function (key) {\n if (typeof events.EventEmitter.prototype[key] === 'function') {\n Pouch[key] = eventEmitter[key].bind(eventEmitter);\n }\n });\n\n // these are created in constructor.js, and allow us to notify each DB with\n // the same name that it was destroyed, via the constructor object\n var destructListeners = Pouch._destructionListeners = new ExportedMap();\n\n Pouch.on('ref', function onConstructorRef(db) {\n if (!destructListeners.has(db.name)) {\n destructListeners.set(db.name, []);\n }\n destructListeners.get(db.name).push(db);\n });\n\n Pouch.on('unref', function onConstructorUnref(db) {\n if (!destructListeners.has(db.name)) {\n return;\n }\n var dbList = destructListeners.get(db.name);\n var pos = dbList.indexOf(db);\n if (pos < 0) {\n /* istanbul ignore next */\n return;\n }\n dbList.splice(pos, 1);\n if (dbList.length > 1) {\n /* istanbul ignore next */\n destructListeners.set(db.name, dbList);\n } else {\n destructListeners[\"delete\"](db.name);\n }\n });\n\n Pouch.on('destroyed', function onConstructorDestroyed(name) {\n if (!destructListeners.has(name)) {\n return;\n }\n var dbList = destructListeners.get(name);\n destructListeners[\"delete\"](name);\n dbList.forEach(function (db) {\n db.emit('destroyed',true);\n });\n });\n}\n\nsetUpEventEmitter(PouchDB);\n\nPouchDB.adapter = function (id, obj, addToPreferredAdapters) {\n /* istanbul ignore else */\n if (obj.valid()) {\n PouchDB.adapters[id] = obj;\n if (addToPreferredAdapters) {\n PouchDB.preferredAdapters.push(id);\n }\n }\n};\n\nPouchDB.plugin = function (obj) {\n if (typeof obj === 'function') { // function style for plugins\n obj(PouchDB);\n } else if (typeof obj !== 'object' || Object.keys(obj).length === 0) {\n throw new Error('Invalid plugin: got \"' + obj + '\", expected an object or a function');\n } else {\n Object.keys(obj).forEach(function (id) { // object style for plugins\n PouchDB.prototype[id] = obj[id];\n });\n }\n if (this.__defaults) {\n PouchDB.__defaults = $inject_Object_assign({}, this.__defaults);\n }\n return PouchDB;\n};\n\nPouchDB.defaults = function (defaultOpts) {\n function PouchAlt(name, opts) {\n if (!(this instanceof PouchAlt)) {\n return new PouchAlt(name, opts);\n }\n\n opts = opts || {};\n\n if (name && typeof name === 'object') {\n opts = name;\n name = opts.name;\n delete opts.name;\n }\n\n opts = $inject_Object_assign({}, PouchAlt.__defaults, opts);\n PouchDB.call(this, name, opts);\n }\n\n inherits(PouchAlt, PouchDB);\n\n PouchAlt.preferredAdapters = PouchDB.preferredAdapters.slice();\n Object.keys(PouchDB).forEach(function (key) {\n if (!(key in PouchAlt)) {\n PouchAlt[key] = PouchDB[key];\n }\n });\n\n // make default options transitive\n // https://github.com/pouchdb/pouchdb/issues/5922\n PouchAlt.__defaults = $inject_Object_assign({}, this.__defaults, defaultOpts);\n\n return PouchAlt;\n};\n\n// managed automatically by set-version.js\nvar version = \"6.4.3\";\n\nfunction debugPouch(PouchDB) {\n PouchDB.debug = debug;\n var logs = {};\n /* istanbul ignore next */\n PouchDB.on('debug', function (args) {\n // first argument is log identifier\n var logId = args[0];\n // rest should be passed verbatim to debug module\n var logArgs = args.slice(1);\n if (!logs[logId]) {\n logs[logId] = debug('pouchdb:' + logId);\n }\n logs[logId].apply(null, logArgs);\n });\n}\n\n// this would just be \"return doc[field]\", but fields\n// can be \"deep\" due to dot notation\nfunction getFieldFromDoc(doc, parsedField) {\n var value = doc;\n for (var i = 0, len = parsedField.length; i < len; i++) {\n var key = parsedField[i];\n value = value[key];\n if (!value) {\n break;\n }\n }\n return value;\n}\n\nfunction compare$1(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\n// Converts a string in dot notation to an array of its components, with backslash escaping\nfunction parseField(fieldName) {\n // fields may be deep (e.g. \"foo.bar.baz\"), so parse\n var fields = [];\n var current = '';\n for (var i = 0, len = fieldName.length; i < len; i++) {\n var ch = fieldName[i];\n if (ch === '.') {\n if (i > 0 && fieldName[i - 1] === '\\\\') { // escaped delimiter\n current = current.substring(0, current.length - 1) + '.';\n } else { // not escaped, so delimiter\n fields.push(current);\n current = '';\n }\n } else { // normal character\n current += ch;\n }\n }\n fields.push(current);\n return fields;\n}\n\nvar combinationFields = ['$or', '$nor', '$not'];\nfunction isCombinationalField(field) {\n return combinationFields.indexOf(field) > -1;\n}\n\nfunction getKey(obj) {\n return Object.keys(obj)[0];\n}\n\nfunction getValue(obj) {\n return obj[getKey(obj)];\n}\n\n\n// flatten an array of selectors joined by an $and operator\nfunction mergeAndedSelectors(selectors) {\n\n // sort to ensure that e.g. if the user specified\n // $and: [{$gt: 'a'}, {$gt: 'b'}], then it's collapsed into\n // just {$gt: 'b'}\n var res = {};\n\n selectors.forEach(function (selector) {\n Object.keys(selector).forEach(function (field) {\n var matcher = selector[field];\n if (typeof matcher !== 'object') {\n matcher = {$eq: matcher};\n }\n\n if (isCombinationalField(field)) {\n if (matcher instanceof Array) {\n res[field] = matcher.map(function (m) {\n return mergeAndedSelectors([m]);\n });\n } else {\n res[field] = mergeAndedSelectors([matcher]);\n }\n } else {\n var fieldMatchers = res[field] = res[field] || {};\n Object.keys(matcher).forEach(function (operator) {\n var value = matcher[operator];\n\n if (operator === '$gt' || operator === '$gte') {\n return mergeGtGte(operator, value, fieldMatchers);\n } else if (operator === '$lt' || operator === '$lte') {\n return mergeLtLte(operator, value, fieldMatchers);\n } else if (operator === '$ne') {\n return mergeNe(value, fieldMatchers);\n } else if (operator === '$eq') {\n return mergeEq(value, fieldMatchers);\n }\n fieldMatchers[operator] = value;\n });\n }\n });\n });\n\n return res;\n}\n\n\n\n// collapse logically equivalent gt/gte values\nfunction mergeGtGte(operator, value, fieldMatchers) {\n if (typeof fieldMatchers.$eq !== 'undefined') {\n return; // do nothing\n }\n if (typeof fieldMatchers.$gte !== 'undefined') {\n if (operator === '$gte') {\n if (value > fieldMatchers.$gte) { // more specificity\n fieldMatchers.$gte = value;\n }\n } else { // operator === '$gt'\n if (value >= fieldMatchers.$gte) { // more specificity\n delete fieldMatchers.$gte;\n fieldMatchers.$gt = value;\n }\n }\n } else if (typeof fieldMatchers.$gt !== 'undefined') {\n if (operator === '$gte') {\n if (value > fieldMatchers.$gt) { // more specificity\n delete fieldMatchers.$gt;\n fieldMatchers.$gte = value;\n }\n } else { // operator === '$gt'\n if (value > fieldMatchers.$gt) { // more specificity\n fieldMatchers.$gt = value;\n }\n }\n } else {\n fieldMatchers[operator] = value;\n }\n}\n\n// collapse logically equivalent lt/lte values\nfunction mergeLtLte(operator, value, fieldMatchers) {\n if (typeof fieldMatchers.$eq !== 'undefined') {\n return; // do nothing\n }\n if (typeof fieldMatchers.$lte !== 'undefined') {\n if (operator === '$lte') {\n if (value < fieldMatchers.$lte) { // more specificity\n fieldMatchers.$lte = value;\n }\n } else { // operator === '$gt'\n if (value <= fieldMatchers.$lte) { // more specificity\n delete fieldMatchers.$lte;\n fieldMatchers.$lt = value;\n }\n }\n } else if (typeof fieldMatchers.$lt !== 'undefined') {\n if (operator === '$lte') {\n if (value < fieldMatchers.$lt) { // more specificity\n delete fieldMatchers.$lt;\n fieldMatchers.$lte = value;\n }\n } else { // operator === '$gt'\n if (value < fieldMatchers.$lt) { // more specificity\n fieldMatchers.$lt = value;\n }\n }\n } else {\n fieldMatchers[operator] = value;\n }\n}\n\n// combine $ne values into one array\nfunction mergeNe(value, fieldMatchers) {\n if ('$ne' in fieldMatchers) {\n // there are many things this could \"not\" be\n fieldMatchers.$ne.push(value);\n } else { // doesn't exist yet\n fieldMatchers.$ne = [value];\n }\n}\n\n// add $eq into the mix\nfunction mergeEq(value, fieldMatchers) {\n // these all have less specificity than the $eq\n // TODO: check for user errors here\n delete fieldMatchers.$gt;\n delete fieldMatchers.$gte;\n delete fieldMatchers.$lt;\n delete fieldMatchers.$lte;\n delete fieldMatchers.$ne;\n fieldMatchers.$eq = value;\n}\n\n\n//\n// normalize the selector\n//\nfunction massageSelector(input) {\n var result = clone(input);\n var wasAnded = false;\n if ('$and' in result) {\n result = mergeAndedSelectors(result['$and']);\n wasAnded = true;\n }\n\n ['$or', '$nor'].forEach(function (orOrNor) {\n if (orOrNor in result) {\n // message each individual selector\n // e.g. {foo: 'bar'} becomes {foo: {$eq: 'bar'}}\n result[orOrNor].forEach(function (subSelector) {\n var fields = Object.keys(subSelector);\n for (var i = 0; i < fields.length; i++) {\n var field = fields[i];\n var matcher = subSelector[field];\n if (typeof matcher !== 'object' || matcher === null) {\n subSelector[field] = {$eq: matcher};\n }\n }\n });\n }\n });\n\n if ('$not' in result) {\n //This feels a little like forcing, but it will work for now,\n //I would like to come back to this and make the merging of selectors a little more generic\n result['$not'] = mergeAndedSelectors([result['$not']]);\n }\n\n var fields = Object.keys(result);\n\n for (var i = 0; i < fields.length; i++) {\n var field = fields[i];\n var matcher = result[field];\n\n if (typeof matcher !== 'object' || matcher === null) {\n matcher = {$eq: matcher};\n } else if ('$ne' in matcher && !wasAnded) {\n // I put these in an array, since there may be more than one\n // but in the \"mergeAnded\" operation, I already take care of that\n matcher.$ne = [matcher.$ne];\n }\n result[field] = matcher;\n }\n\n return result;\n}\n\nfunction pad(str, padWith, upToLength) {\n var padding = '';\n var targetLength = upToLength - str.length;\n /* istanbul ignore next */\n while (padding.length < targetLength) {\n padding += padWith;\n }\n return padding;\n}\n\nfunction padLeft(str, padWith, upToLength) {\n var padding = pad(str, padWith, upToLength);\n return padding + str;\n}\n\nvar MIN_MAGNITUDE = -324; // verified by -Number.MIN_VALUE\nvar MAGNITUDE_DIGITS = 3; // ditto\nvar SEP = ''; // set to '_' for easier debugging \n\nfunction collate(a, b) {\n\n if (a === b) {\n return 0;\n }\n\n a = normalizeKey(a);\n b = normalizeKey(b);\n\n var ai = collationIndex(a);\n var bi = collationIndex(b);\n if ((ai - bi) !== 0) {\n return ai - bi;\n }\n switch (typeof a) {\n case 'number':\n return a - b;\n case 'boolean':\n return a < b ? -1 : 1;\n case 'string':\n return stringCollate(a, b);\n }\n return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b);\n}\n\n// couch considers null/NaN/Infinity/-Infinity === undefined,\n// for the purposes of mapreduce indexes. also, dates get stringified.\nfunction normalizeKey(key) {\n switch (typeof key) {\n case 'undefined':\n return null;\n case 'number':\n if (key === Infinity || key === -Infinity || isNaN(key)) {\n return null;\n }\n return key;\n case 'object':\n var origKey = key;\n if (Array.isArray(key)) {\n var len = key.length;\n key = new Array(len);\n for (var i = 0; i < len; i++) {\n key[i] = normalizeKey(origKey[i]);\n }\n /* istanbul ignore next */\n } else if (key instanceof Date) {\n return key.toJSON();\n } else if (key !== null) { // generic object\n key = {};\n for (var k in origKey) {\n if (origKey.hasOwnProperty(k)) {\n var val = origKey[k];\n if (typeof val !== 'undefined') {\n key[k] = normalizeKey(val);\n }\n }\n }\n }\n }\n return key;\n}\n\nfunction indexify(key) {\n if (key !== null) {\n switch (typeof key) {\n case 'boolean':\n return key ? 1 : 0;\n case 'number':\n return numToIndexableString(key);\n case 'string':\n // We've to be sure that key does not contain \\u0000\n // Do order-preserving replacements:\n // 0 -> 1, 1\n // 1 -> 1, 2\n // 2 -> 2, 2\n return key\n .replace(/\\u0002/g, '\\u0002\\u0002')\n .replace(/\\u0001/g, '\\u0001\\u0002')\n .replace(/\\u0000/g, '\\u0001\\u0001');\n case 'object':\n var isArray = Array.isArray(key);\n var arr = isArray ? key : Object.keys(key);\n var i = -1;\n var len = arr.length;\n var result = '';\n if (isArray) {\n while (++i < len) {\n result += toIndexableString(arr[i]);\n }\n } else {\n while (++i < len) {\n var objKey = arr[i];\n result += toIndexableString(objKey) +\n toIndexableString(key[objKey]);\n }\n }\n return result;\n }\n }\n return '';\n}\n\n// convert the given key to a string that would be appropriate\n// for lexical sorting, e.g. within a database, where the\n// sorting is the same given by the collate() function.\nfunction toIndexableString(key) {\n var zero = '\\u0000';\n key = normalizeKey(key);\n return collationIndex(key) + SEP + indexify(key) + zero;\n}\n\nfunction parseNumber(str, i) {\n var originalIdx = i;\n var num;\n var zero = str[i] === '1';\n if (zero) {\n num = 0;\n i++;\n } else {\n var neg = str[i] === '0';\n i++;\n var numAsString = '';\n var magAsString = str.substring(i, i + MAGNITUDE_DIGITS);\n var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE;\n /* istanbul ignore next */\n if (neg) {\n magnitude = -magnitude;\n }\n i += MAGNITUDE_DIGITS;\n while (true) {\n var ch = str[i];\n if (ch === '\\u0000') {\n break;\n } else {\n numAsString += ch;\n }\n i++;\n }\n numAsString = numAsString.split('.');\n if (numAsString.length === 1) {\n num = parseInt(numAsString, 10);\n } else {\n /* istanbul ignore next */\n num = parseFloat(numAsString[0] + '.' + numAsString[1]);\n }\n /* istanbul ignore next */\n if (neg) {\n num = num - 10;\n }\n /* istanbul ignore next */\n if (magnitude !== 0) {\n // parseFloat is more reliable than pow due to rounding errors\n // e.g. Number.MAX_VALUE would return Infinity if we did\n // num * Math.pow(10, magnitude);\n num = parseFloat(num + 'e' + magnitude);\n }\n }\n return {num: num, length : i - originalIdx};\n}\n\n// move up the stack while parsing\n// this function moved outside of parseIndexableString for performance\nfunction pop(stack, metaStack) {\n var obj = stack.pop();\n\n if (metaStack.length) {\n var lastMetaElement = metaStack[metaStack.length - 1];\n if (obj === lastMetaElement.element) {\n // popping a meta-element, e.g. an object whose value is another object\n metaStack.pop();\n lastMetaElement = metaStack[metaStack.length - 1];\n }\n var element = lastMetaElement.element;\n var lastElementIndex = lastMetaElement.index;\n if (Array.isArray(element)) {\n element.push(obj);\n } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n var key = stack.pop();\n element[key] = obj;\n } else {\n stack.push(obj); // obj with key only\n }\n }\n}\n\nfunction parseIndexableString(str) {\n var stack = [];\n var metaStack = []; // stack for arrays and objects\n var i = 0;\n\n /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n while (true) {\n var collationIndex = str[i++];\n if (collationIndex === '\\u0000') {\n if (stack.length === 1) {\n return stack.pop();\n } else {\n pop(stack, metaStack);\n continue;\n }\n }\n switch (collationIndex) {\n case '1':\n stack.push(null);\n break;\n case '2':\n stack.push(str[i] === '1');\n i++;\n break;\n case '3':\n var parsedNum = parseNumber(str, i);\n stack.push(parsedNum.num);\n i += parsedNum.length;\n break;\n case '4':\n var parsedStr = '';\n /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n while (true) {\n var ch = str[i];\n if (ch === '\\u0000') {\n break;\n }\n parsedStr += ch;\n i++;\n }\n // perform the reverse of the order-preserving replacement\n // algorithm (see above)\n parsedStr = parsedStr.replace(/\\u0001\\u0001/g, '\\u0000')\n .replace(/\\u0001\\u0002/g, '\\u0001')\n .replace(/\\u0002\\u0002/g, '\\u0002');\n stack.push(parsedStr);\n break;\n case '5':\n var arrayElement = { element: [], index: stack.length };\n stack.push(arrayElement.element);\n metaStack.push(arrayElement);\n break;\n case '6':\n var objElement = { element: {}, index: stack.length };\n stack.push(objElement.element);\n metaStack.push(objElement);\n break;\n /* istanbul ignore next */\n default:\n throw new Error(\n 'bad collationIndex or unexpectedly reached end of input: ' +\n collationIndex);\n }\n }\n}\n\nfunction arrayCollate(a, b) {\n var len = Math.min(a.length, b.length);\n for (var i = 0; i < len; i++) {\n var sort = collate(a[i], b[i]);\n if (sort !== 0) {\n return sort;\n }\n }\n return (a.length === b.length) ? 0 :\n (a.length > b.length) ? 1 : -1;\n}\nfunction stringCollate(a, b) {\n // See: https://github.com/daleharvey/pouchdb/issues/40\n // This is incompatible with the CouchDB implementation, but its the\n // best we can do for now\n return (a === b) ? 0 : ((a > b) ? 1 : -1);\n}\nfunction objectCollate(a, b) {\n var ak = Object.keys(a), bk = Object.keys(b);\n var len = Math.min(ak.length, bk.length);\n for (var i = 0; i < len; i++) {\n // First sort the keys\n var sort = collate(ak[i], bk[i]);\n if (sort !== 0) {\n return sort;\n }\n // if the keys are equal sort the values\n sort = collate(a[ak[i]], b[bk[i]]);\n if (sort !== 0) {\n return sort;\n }\n\n }\n return (ak.length === bk.length) ? 0 :\n (ak.length > bk.length) ? 1 : -1;\n}\n// The collation is defined by erlangs ordered terms\n// the atoms null, true, false come first, then numbers, strings,\n// arrays, then objects\n// null/undefined/NaN/Infinity/-Infinity are all considered null\nfunction collationIndex(x) {\n var id = ['boolean', 'number', 'string', 'object'];\n var idx = id.indexOf(typeof x);\n //false if -1 otherwise true, but fast!!!!1\n if (~idx) {\n if (x === null) {\n return 1;\n }\n if (Array.isArray(x)) {\n return 5;\n }\n return idx < 3 ? (idx + 2) : (idx + 3);\n }\n /* istanbul ignore next */\n if (Array.isArray(x)) {\n return 5;\n }\n}\n\n// conversion:\n// x yyy zz...zz\n// x = 0 for negative, 1 for 0, 2 for positive\n// y = exponent (for negative numbers negated) moved so that it's >= 0\n// z = mantisse\nfunction numToIndexableString(num) {\n\n if (num === 0) {\n return '1';\n }\n\n // convert number to exponential format for easier and\n // more succinct string sorting\n var expFormat = num.toExponential().split(/e\\+?/);\n var magnitude = parseInt(expFormat[1], 10);\n\n var neg = num < 0;\n\n var result = neg ? '0' : '2';\n\n // first sort by magnitude\n // it's easier if all magnitudes are positive\n var magForComparison = ((neg ? -magnitude : magnitude) - MIN_MAGNITUDE);\n var magString = padLeft((magForComparison).toString(), '0', MAGNITUDE_DIGITS);\n\n result += SEP + magString;\n\n // then sort by the factor\n var factor = Math.abs(parseFloat(expFormat[0])); // [1..10)\n /* istanbul ignore next */\n if (neg) { // for negative reverse ordering\n factor = 10 - factor;\n }\n\n var factorStr = factor.toFixed(20);\n\n // strip zeros from the end\n factorStr = factorStr.replace(/\\.?0+$/, '');\n\n result += SEP + factorStr;\n\n return result;\n}\n\n// create a comparator based on the sort object\nfunction createFieldSorter(sort) {\n\n function getFieldValuesAsArray(doc) {\n return sort.map(function (sorting) {\n var fieldName = getKey(sorting);\n var parsedField = parseField(fieldName);\n var docFieldValue = getFieldFromDoc(doc, parsedField);\n return docFieldValue;\n });\n }\n\n return function (aRow, bRow) {\n var aFieldValues = getFieldValuesAsArray(aRow.doc);\n var bFieldValues = getFieldValuesAsArray(bRow.doc);\n var collation = collate(aFieldValues, bFieldValues);\n if (collation !== 0) {\n return collation;\n }\n // this is what mango seems to do\n return compare$1(aRow.doc._id, bRow.doc._id);\n };\n}\n\nfunction filterInMemoryFields(rows, requestDef, inMemoryFields) {\n rows = rows.filter(function (row) {\n return rowFilter(row.doc, requestDef.selector, inMemoryFields);\n });\n\n if (requestDef.sort) {\n // in-memory sort\n var fieldSorter = createFieldSorter(requestDef.sort);\n rows = rows.sort(fieldSorter);\n if (typeof requestDef.sort[0] !== 'string' &&\n getValue(requestDef.sort[0]) === 'desc') {\n rows = rows.reverse();\n }\n }\n\n if ('limit' in requestDef || 'skip' in requestDef) {\n // have to do the limit in-memory\n var skip = requestDef.skip || 0;\n var limit = ('limit' in requestDef ? requestDef.limit : rows.length) + skip;\n rows = rows.slice(skip, limit);\n }\n return rows;\n}\n\nfunction rowFilter(doc, selector, inMemoryFields) {\n return inMemoryFields.every(function (field) {\n var matcher = selector[field];\n var parsedField = parseField(field);\n var docFieldValue = getFieldFromDoc(doc, parsedField);\n if (isCombinationalField(field)) {\n return matchCominationalSelector(field, matcher, doc);\n }\n\n return matchSelector(matcher, doc, parsedField, docFieldValue);\n });\n}\n\nfunction matchSelector(matcher, doc, parsedField, docFieldValue) {\n if (!matcher) {\n // no filtering necessary; this field is just needed for sorting\n return true;\n }\n\n return Object.keys(matcher).every(function (userOperator) {\n var userValue = matcher[userOperator];\n return match(userOperator, doc, userValue, parsedField, docFieldValue);\n });\n}\n\nfunction matchCominationalSelector(field, matcher, doc) {\n\n if (field === '$or') {\n return matcher.some(function (orMatchers) {\n return rowFilter(doc, orMatchers, Object.keys(orMatchers));\n });\n }\n\n if (field === '$not') {\n return !rowFilter(doc, matcher, Object.keys(matcher));\n }\n\n //`$nor`\n return !matcher.find(function (orMatchers) {\n return rowFilter(doc, orMatchers, Object.keys(orMatchers));\n });\n\n}\n\nfunction match(userOperator, doc, userValue, parsedField, docFieldValue) {\n if (!matchers[userOperator]) {\n throw new Error('unknown operator \"' + userOperator +\n '\" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, ' +\n '$nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');\n }\n return matchers[userOperator](doc, userValue, parsedField, docFieldValue);\n}\n\nfunction fieldExists(docFieldValue) {\n return typeof docFieldValue !== 'undefined' && docFieldValue !== null;\n}\n\nfunction fieldIsNotUndefined(docFieldValue) {\n return typeof docFieldValue !== 'undefined';\n}\n\nfunction modField(docFieldValue, userValue) {\n var divisor = userValue[0];\n var mod = userValue[1];\n if (divisor === 0) {\n throw new Error('Bad divisor, cannot divide by zero');\n }\n\n if (parseInt(divisor, 10) !== divisor ) {\n throw new Error('Divisor is not an integer');\n }\n\n if (parseInt(mod, 10) !== mod ) {\n throw new Error('Modulus is not an integer');\n }\n\n if (parseInt(docFieldValue, 10) !== docFieldValue) {\n return false;\n }\n\n return docFieldValue % divisor === mod;\n}\n\nfunction arrayContainsValue(docFieldValue, userValue) {\n return userValue.some(function (val) {\n if (docFieldValue instanceof Array) {\n return docFieldValue.indexOf(val) > -1;\n }\n\n return docFieldValue === val;\n });\n}\n\nfunction arrayContainsAllValues(docFieldValue, userValue) {\n return userValue.every(function (val) {\n return docFieldValue.indexOf(val) > -1;\n });\n}\n\nfunction arraySize(docFieldValue, userValue) {\n return docFieldValue.length === userValue;\n}\n\nfunction regexMatch(docFieldValue, userValue) {\n var re = new RegExp(userValue);\n\n return re.test(docFieldValue);\n}\n\nfunction typeMatch(docFieldValue, userValue) {\n\n switch (userValue) {\n case 'null':\n return docFieldValue === null;\n case 'boolean':\n return typeof (docFieldValue) === 'boolean';\n case 'number':\n return typeof (docFieldValue) === 'number';\n case 'string':\n return typeof (docFieldValue) === 'string';\n case 'array':\n return docFieldValue instanceof Array;\n case 'object':\n return ({}).toString.call(docFieldValue) === '[object Object]';\n }\n\n throw new Error(userValue + ' not supported as a type.' +\n 'Please use one of object, string, array, number, boolean or null.');\n\n}\n\nvar matchers = {\n\n '$elemMatch': function (doc, userValue, parsedField, docFieldValue) {\n if (!Array.isArray(docFieldValue)) {\n return false;\n }\n\n if (docFieldValue.length === 0) {\n return false;\n }\n\n if (typeof docFieldValue[0] === 'object') {\n return docFieldValue.some(function (val) {\n return rowFilter(val, userValue, Object.keys(userValue));\n });\n }\n\n return docFieldValue.some(function (val) {\n return matchSelector(userValue, doc, parsedField, val);\n });\n },\n\n '$allMatch': function (doc, userValue, parsedField, docFieldValue) {\n if (!Array.isArray(docFieldValue)) {\n return false;\n }\n\n /* istanbul ignore next */\n if (docFieldValue.length === 0) {\n return false;\n }\n\n if (typeof docFieldValue[0] === 'object') {\n return docFieldValue.every(function (val) {\n return rowFilter(val, userValue, Object.keys(userValue));\n });\n }\n\n return docFieldValue.every(function (val) {\n return matchSelector(userValue, doc, parsedField, val);\n });\n },\n\n '$eq': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) === 0;\n },\n\n '$gte': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) >= 0;\n },\n\n '$gt': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) > 0;\n },\n\n '$lte': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) <= 0;\n },\n\n '$lt': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) < 0;\n },\n\n '$exists': function (doc, userValue, parsedField, docFieldValue) {\n //a field that is null is still considered to exist\n if (userValue) {\n return fieldIsNotUndefined(docFieldValue);\n }\n\n return !fieldIsNotUndefined(docFieldValue);\n },\n\n '$mod': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && modField(docFieldValue, userValue);\n },\n\n '$ne': function (doc, userValue, parsedField, docFieldValue) {\n return userValue.every(function (neValue) {\n return collate(docFieldValue, neValue) !== 0;\n });\n },\n '$in': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && arrayContainsValue(docFieldValue, userValue);\n },\n\n '$nin': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && !arrayContainsValue(docFieldValue, userValue);\n },\n\n '$size': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && arraySize(docFieldValue, userValue);\n },\n\n '$all': function (doc, userValue, parsedField, docFieldValue) {\n return Array.isArray(docFieldValue) && arrayContainsAllValues(docFieldValue, userValue);\n },\n\n '$regex': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && regexMatch(docFieldValue, userValue);\n },\n\n '$type': function (doc, userValue, parsedField, docFieldValue) {\n return typeMatch(docFieldValue, userValue);\n }\n};\n\n// return true if the given doc matches the supplied selector\nfunction matchesSelector(doc, selector) {\n /* istanbul ignore if */\n if (typeof selector !== 'object') {\n // match the CouchDB error message\n throw new Error('Selector error: expected a JSON object');\n }\n\n selector = massageSelector(selector);\n var row = {\n 'doc': doc\n };\n\n var rowsMatched = filterInMemoryFields([row], { 'selector': selector }, Object.keys(selector));\n return rowsMatched && rowsMatched.length === 1;\n}\n\nfunction evalFilter(input) {\n return scopeEval('\"use strict\";\\nreturn ' + input + ';', {});\n}\n\nfunction evalView(input) {\n var code = [\n 'return function(doc) {',\n ' \"use strict\";',\n ' var emitted = false;',\n ' var emit = function (a, b) {',\n ' emitted = true;',\n ' };',\n ' var view = ' + input + ';',\n ' view(doc);',\n ' if (emitted) {',\n ' return true;',\n ' }',\n '};'\n ].join('\\n');\n\n return scopeEval(code, {});\n}\n\nfunction validate(opts, callback) {\n if (opts.selector) {\n if (opts.filter && opts.filter !== '_selector') {\n var filterName = typeof opts.filter === 'string' ?\n opts.filter : 'function';\n return callback(new Error('selector invalid for filter \"' + filterName + '\"'));\n }\n }\n callback();\n}\n\nfunction normalize(opts) {\n if (opts.view && !opts.filter) {\n opts.filter = '_view';\n }\n\n if (opts.selector && !opts.filter) {\n opts.filter = '_selector';\n }\n\n if (opts.filter && typeof opts.filter === 'string') {\n if (opts.filter === '_view') {\n opts.view = normalizeDesignDocFunctionName(opts.view);\n } else {\n opts.filter = normalizeDesignDocFunctionName(opts.filter);\n }\n }\n}\n\nfunction shouldFilter(changesHandler, opts) {\n return opts.filter && typeof opts.filter === 'string' &&\n !opts.doc_ids && !isRemote(changesHandler.db);\n}\n\nfunction filter(changesHandler, opts) {\n var callback = opts.complete;\n if (opts.filter === '_view') {\n if (!opts.view || typeof opts.view !== 'string') {\n var err = createError(BAD_REQUEST,\n '`view` filter parameter not found or invalid.');\n return callback(err);\n }\n // fetch a view from a design doc, make it behave like a filter\n var viewName = parseDesignDocFunctionName(opts.view);\n changesHandler.db.get('_design/' + viewName[0], function (err, ddoc) {\n /* istanbul ignore if */\n if (changesHandler.isCancelled) {\n return callback(null, {status: 'cancelled'});\n }\n /* istanbul ignore next */\n if (err) {\n return callback(generateErrorFromResponse(err));\n }\n var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] &&\n ddoc.views[viewName[1]].map;\n if (!mapFun) {\n return callback(createError(MISSING_DOC,\n (ddoc.views ? 'missing json key: ' + viewName[1] :\n 'missing json key: views')));\n }\n opts.filter = evalView(mapFun);\n changesHandler.doChanges(opts);\n });\n } else if (opts.selector) {\n opts.filter = function (doc) {\n return matchesSelector(doc, opts.selector);\n };\n changesHandler.doChanges(opts);\n } else {\n // fetch a filter from a design doc\n var filterName = parseDesignDocFunctionName(opts.filter);\n changesHandler.db.get('_design/' + filterName[0], function (err, ddoc) {\n /* istanbul ignore if */\n if (changesHandler.isCancelled) {\n return callback(null, {status: 'cancelled'});\n }\n /* istanbul ignore next */\n if (err) {\n return callback(generateErrorFromResponse(err));\n }\n var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];\n if (!filterFun) {\n return callback(createError(MISSING_DOC,\n ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1]\n : 'missing json key: filters')));\n }\n opts.filter = evalFilter(filterFun);\n changesHandler.doChanges(opts);\n });\n }\n}\n\nfunction applyChangesFilterPlugin(PouchDB) {\n PouchDB._changesFilterPlugin = {\n validate: validate,\n normalize: normalize,\n shouldFilter: shouldFilter,\n filter: filter\n };\n}\n\n// TODO: remove from pouchdb-core (breaking)\nPouchDB.plugin(debugPouch);\n\n// TODO: remove from pouchdb-core (breaking)\nPouchDB.plugin(applyChangesFilterPlugin);\n\nPouchDB.version = version;\n\nfunction toObject(array) {\n return array.reduce(function (obj, item) {\n obj[item] = true;\n return obj;\n }, {});\n}\n// List of top level reserved words for doc\nvar reservedWords = toObject([\n '_id',\n '_rev',\n '_attachments',\n '_deleted',\n '_revisions',\n '_revs_info',\n '_conflicts',\n '_deleted_conflicts',\n '_local_seq',\n '_rev_tree',\n //replication documents\n '_replication_id',\n '_replication_state',\n '_replication_state_time',\n '_replication_state_reason',\n '_replication_stats',\n // Specific to Couchbase Sync Gateway\n '_removed'\n]);\n\n// List of reserved words that should end up the document\nvar dataWords = toObject([\n '_attachments',\n //replication documents\n '_replication_id',\n '_replication_state',\n '_replication_state_time',\n '_replication_state_reason',\n '_replication_stats'\n]);\n\nfunction parseRevisionInfo(rev$$1) {\n if (!/^\\d+-./.test(rev$$1)) {\n return createError(INVALID_REV);\n }\n var idx = rev$$1.indexOf('-');\n var left = rev$$1.substring(0, idx);\n var right = rev$$1.substring(idx + 1);\n return {\n prefix: parseInt(left, 10),\n id: right\n };\n}\n\nfunction makeRevTreeFromRevisions(revisions, opts) {\n var pos = revisions.start - revisions.ids.length + 1;\n\n var revisionIds = revisions.ids;\n var ids = [revisionIds[0], opts, []];\n\n for (var i = 1, len = revisionIds.length; i < len; i++) {\n ids = [revisionIds[i], {status: 'missing'}, [ids]];\n }\n\n return [{\n pos: pos,\n ids: ids\n }];\n}\n\n// Preprocess documents, parse their revisions, assign an id and a\n// revision for new writes that are missing them, etc\nfunction parseDoc(doc, newEdits) {\n\n var nRevNum;\n var newRevId;\n var revInfo;\n var opts = {status: 'available'};\n if (doc._deleted) {\n opts.deleted = true;\n }\n\n if (newEdits) {\n if (!doc._id) {\n doc._id = uuid();\n }\n newRevId = rev();\n if (doc._rev) {\n revInfo = parseRevisionInfo(doc._rev);\n if (revInfo.error) {\n return revInfo;\n }\n doc._rev_tree = [{\n pos: revInfo.prefix,\n ids: [revInfo.id, {status: 'missing'}, [[newRevId, opts, []]]]\n }];\n nRevNum = revInfo.prefix + 1;\n } else {\n doc._rev_tree = [{\n pos: 1,\n ids : [newRevId, opts, []]\n }];\n nRevNum = 1;\n }\n } else {\n if (doc._revisions) {\n doc._rev_tree = makeRevTreeFromRevisions(doc._revisions, opts);\n nRevNum = doc._revisions.start;\n newRevId = doc._revisions.ids[0];\n }\n if (!doc._rev_tree) {\n revInfo = parseRevisionInfo(doc._rev);\n if (revInfo.error) {\n return revInfo;\n }\n nRevNum = revInfo.prefix;\n newRevId = revInfo.id;\n doc._rev_tree = [{\n pos: nRevNum,\n ids: [newRevId, opts, []]\n }];\n }\n }\n\n invalidIdError(doc._id);\n\n doc._rev = nRevNum + '-' + newRevId;\n\n var result = {metadata : {}, data : {}};\n for (var key in doc) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(doc, key)) {\n var specialKey = key[0] === '_';\n if (specialKey && !reservedWords[key]) {\n var error = createError(DOC_VALIDATION, key);\n error.message = DOC_VALIDATION.message + ': ' + key;\n throw error;\n } else if (specialKey && !dataWords[key]) {\n result.metadata[key.slice(1)] = doc[key];\n } else {\n result.data[key] = doc[key];\n }\n }\n }\n return result;\n}\n\nvar thisAtob = function (str) {\n return atob(str);\n};\n\nvar thisBtoa = function (str) {\n return btoa(str);\n};\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor (e.g.\n// old QtWebKit versions, Android < 4.4).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== \"TypeError\") {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\n typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\n typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :\n WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction binaryStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\nfunction binStringToBluffer(binString, type) {\n return createBlob([binaryStringToArrayBuffer(binString)], {type: type});\n}\n\nfunction b64ToBluffer(b64, type) {\n return binStringToBluffer(thisAtob(b64), type);\n}\n\n//Can't find original post, but this is close\n//http://stackoverflow.com/questions/6965107/ (continues on next line)\n//converting-between-strings-and-arraybuffers\nfunction arrayBufferToBinaryString(buffer) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var length = bytes.byteLength;\n for (var i = 0; i < length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return binary;\n}\n\n// shim for browsers that don't support it\nfunction readAsBinaryString(blob, callback) {\n if (typeof FileReader === 'undefined') {\n // fix for Firefox in a web worker\n // https://bugzilla.mozilla.org/show_bug.cgi?id=901097\n return callback(arrayBufferToBinaryString(\n new FileReaderSync().readAsArrayBuffer(blob)));\n }\n\n var reader = new FileReader();\n var hasBinaryString = typeof reader.readAsBinaryString === 'function';\n reader.onloadend = function (e) {\n var result = e.target.result || '';\n if (hasBinaryString) {\n return callback(result);\n }\n callback(arrayBufferToBinaryString(result));\n };\n if (hasBinaryString) {\n reader.readAsBinaryString(blob);\n } else {\n reader.readAsArrayBuffer(blob);\n }\n}\n\nfunction blobToBinaryString(blobOrBuffer, callback) {\n readAsBinaryString(blobOrBuffer, function (bin) {\n callback(bin);\n });\n}\n\nfunction blobToBase64(blobOrBuffer, callback) {\n blobToBinaryString(blobOrBuffer, function (base64) {\n callback(thisBtoa(base64));\n });\n}\n\n// simplified API. universal browser support is assumed\nfunction readAsArrayBuffer(blob, callback) {\n if (typeof FileReader === 'undefined') {\n // fix for Firefox in a web worker:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=901097\n return callback(new FileReaderSync().readAsArrayBuffer(blob));\n }\n\n var reader = new FileReader();\n reader.onloadend = function (e) {\n var result = e.target.result || new ArrayBuffer(0);\n callback(result);\n };\n reader.readAsArrayBuffer(blob);\n}\n\n// this is not used in the browser\n\nvar setImmediateShim = global.setImmediate || global.setTimeout;\nvar MD5_CHUNK_SIZE = 32768;\n\nfunction rawToBase64(raw) {\n return thisBtoa(raw);\n}\n\nfunction sliceBlob(blob, start, end) {\n if (blob.webkitSlice) {\n return blob.webkitSlice(start, end);\n }\n return blob.slice(start, end);\n}\n\nfunction appendBlob(buffer, blob, start, end, callback) {\n if (start > 0 || end < blob.size) {\n // only slice blob if we really need to\n blob = sliceBlob(blob, start, end);\n }\n readAsArrayBuffer(blob, function (arrayBuffer) {\n buffer.append(arrayBuffer);\n callback();\n });\n}\n\nfunction appendString(buffer, string, start, end, callback) {\n if (start > 0 || end < string.length) {\n // only create a substring if we really need to\n string = string.substring(start, end);\n }\n buffer.appendBinary(string);\n callback();\n}\n\nfunction binaryMd5(data, callback) {\n var inputIsString = typeof data === 'string';\n var len = inputIsString ? data.length : data.size;\n var chunkSize = Math.min(MD5_CHUNK_SIZE, len);\n var chunks = Math.ceil(len / chunkSize);\n var currentChunk = 0;\n var buffer = inputIsString ? new Md5() : new Md5.ArrayBuffer();\n\n var append = inputIsString ? appendString : appendBlob;\n\n function next() {\n setImmediateShim(loadNextChunk);\n }\n\n function done() {\n var raw = buffer.end(true);\n var base64 = rawToBase64(raw);\n callback(base64);\n buffer.destroy();\n }\n\n function loadNextChunk() {\n var start = currentChunk * chunkSize;\n var end = start + chunkSize;\n currentChunk++;\n if (currentChunk < chunks) {\n append(buffer, data, start, end, next);\n } else {\n append(buffer, data, start, end, done);\n }\n }\n loadNextChunk();\n}\n\nfunction stringMd5(string) {\n return Md5.hash(string);\n}\n\nfunction parseBase64(data) {\n try {\n return thisAtob(data);\n } catch (e) {\n var err = createError(BAD_ARG,\n 'Attachment is not a valid base64 string');\n return {error: err};\n }\n}\n\nfunction preprocessString(att, blobType, callback) {\n var asBinary = parseBase64(att.data);\n if (asBinary.error) {\n return callback(asBinary.error);\n }\n\n att.length = asBinary.length;\n if (blobType === 'blob') {\n att.data = binStringToBluffer(asBinary, att.content_type);\n } else if (blobType === 'base64') {\n att.data = thisBtoa(asBinary);\n } else { // binary\n att.data = asBinary;\n }\n binaryMd5(asBinary, function (result) {\n att.digest = 'md5-' + result;\n callback();\n });\n}\n\nfunction preprocessBlob(att, blobType, callback) {\n binaryMd5(att.data, function (md5) {\n att.digest = 'md5-' + md5;\n // size is for blobs (browser), length is for buffers (node)\n att.length = att.data.size || att.data.length || 0;\n if (blobType === 'binary') {\n blobToBinaryString(att.data, function (binString) {\n att.data = binString;\n callback();\n });\n } else if (blobType === 'base64') {\n blobToBase64(att.data, function (b64) {\n att.data = b64;\n callback();\n });\n } else {\n callback();\n }\n });\n}\n\nfunction preprocessAttachment(att, blobType, callback) {\n if (att.stub) {\n return callback();\n }\n if (typeof att.data === 'string') { // input is a base64 string\n preprocessString(att, blobType, callback);\n } else { // input is a blob\n preprocessBlob(att, blobType, callback);\n }\n}\n\nfunction preprocessAttachments(docInfos, blobType, callback) {\n\n if (!docInfos.length) {\n return callback();\n }\n\n var docv = 0;\n var overallErr;\n\n docInfos.forEach(function (docInfo) {\n var attachments = docInfo.data && docInfo.data._attachments ?\n Object.keys(docInfo.data._attachments) : [];\n var recv = 0;\n\n if (!attachments.length) {\n return done();\n }\n\n function processedAttachment(err) {\n overallErr = err;\n recv++;\n if (recv === attachments.length) {\n done();\n }\n }\n\n for (var key in docInfo.data._attachments) {\n if (docInfo.data._attachments.hasOwnProperty(key)) {\n preprocessAttachment(docInfo.data._attachments[key],\n blobType, processedAttachment);\n }\n }\n });\n\n function done() {\n docv++;\n if (docInfos.length === docv) {\n if (overallErr) {\n callback(overallErr);\n } else {\n callback();\n }\n }\n }\n}\n\nfunction updateDoc(revLimit, prev, docInfo, results,\n i, cb, writeDoc, newEdits) {\n\n if (revExists(prev.rev_tree, docInfo.metadata.rev)) {\n results[i] = docInfo;\n return cb();\n }\n\n // sometimes this is pre-calculated. historically not always\n var previousWinningRev = prev.winningRev || winningRev(prev);\n var previouslyDeleted = 'deleted' in prev ? prev.deleted :\n isDeleted(prev, previousWinningRev);\n var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :\n isDeleted(docInfo.metadata);\n var isRoot = /^1-/.test(docInfo.metadata.rev);\n\n if (previouslyDeleted && !deleted && newEdits && isRoot) {\n var newDoc = docInfo.data;\n newDoc._rev = previousWinningRev;\n newDoc._id = docInfo.metadata.id;\n docInfo = parseDoc(newDoc, newEdits);\n }\n\n var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);\n\n var inConflict = newEdits && ((\n (previouslyDeleted && deleted && merged.conflicts !== 'new_leaf') ||\n (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||\n (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));\n\n if (inConflict) {\n var err = createError(REV_CONFLICT);\n results[i] = err;\n return cb();\n }\n\n var newRev = docInfo.metadata.rev;\n docInfo.metadata.rev_tree = merged.tree;\n docInfo.stemmedRevs = merged.stemmedRevs || [];\n /* istanbul ignore else */\n if (prev.rev_map) {\n docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb\n }\n\n // recalculate\n var winningRev$$1 = winningRev(docInfo.metadata);\n var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$$1);\n\n // calculate the total number of documents that were added/removed,\n // from the perspective of total_rows/doc_count\n var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :\n previouslyDeleted < winningRevIsDeleted ? -1 : 1;\n\n var newRevIsDeleted;\n if (newRev === winningRev$$1) {\n // if the new rev is the same as the winning rev, we can reuse that value\n newRevIsDeleted = winningRevIsDeleted;\n } else {\n // if they're not the same, then we need to recalculate\n newRevIsDeleted = isDeleted(docInfo.metadata, newRev);\n }\n\n writeDoc(docInfo, winningRev$$1, winningRevIsDeleted, newRevIsDeleted,\n true, delta, i, cb);\n}\n\nfunction rootIsMissing(docInfo) {\n return docInfo.metadata.rev_tree[0].ids[1].status === 'missing';\n}\n\nfunction processDocs(revLimit, docInfos, api, fetchedDocs, tx, results,\n writeDoc, opts, overallCallback) {\n\n // Default to 1000 locally\n revLimit = revLimit || 1000;\n\n function insertDoc(docInfo, resultsIdx, callback) {\n // Cant insert new deleted documents\n var winningRev$$1 = winningRev(docInfo.metadata);\n var deleted = isDeleted(docInfo.metadata, winningRev$$1);\n if ('was_delete' in opts && deleted) {\n results[resultsIdx] = createError(MISSING_DOC, 'deleted');\n return callback();\n }\n\n // 4712 - detect whether a new document was inserted with a _rev\n var inConflict = newEdits && rootIsMissing(docInfo);\n\n if (inConflict) {\n var err = createError(REV_CONFLICT);\n results[resultsIdx] = err;\n return callback();\n }\n\n var delta = deleted ? 0 : 1;\n\n writeDoc(docInfo, winningRev$$1, deleted, deleted, false,\n delta, resultsIdx, callback);\n }\n\n var newEdits = opts.new_edits;\n var idsToDocs = new ExportedMap();\n\n var docsDone = 0;\n var docsToDo = docInfos.length;\n\n function checkAllDocsDone() {\n if (++docsDone === docsToDo && overallCallback) {\n overallCallback();\n }\n }\n\n docInfos.forEach(function (currentDoc, resultsIdx) {\n\n if (currentDoc._id && isLocalId(currentDoc._id)) {\n var fun = currentDoc._deleted ? '_removeLocal' : '_putLocal';\n api[fun](currentDoc, {ctx: tx}, function (err, res) {\n results[resultsIdx] = err || res;\n checkAllDocsDone();\n });\n return;\n }\n\n var id = currentDoc.metadata.id;\n if (idsToDocs.has(id)) {\n docsToDo--; // duplicate\n idsToDocs.get(id).push([currentDoc, resultsIdx]);\n } else {\n idsToDocs.set(id, [[currentDoc, resultsIdx]]);\n }\n });\n\n // in the case of new_edits, the user can provide multiple docs\n // with the same id. these need to be processed sequentially\n idsToDocs.forEach(function (docs, id) {\n var numDone = 0;\n\n function docWritten() {\n if (++numDone < docs.length) {\n nextDoc();\n } else {\n checkAllDocsDone();\n }\n }\n function nextDoc() {\n var value = docs[numDone];\n var currentDoc = value[0];\n var resultsIdx = value[1];\n\n if (fetchedDocs.has(id)) {\n updateDoc(revLimit, fetchedDocs.get(id), currentDoc, results,\n resultsIdx, docWritten, writeDoc, newEdits);\n } else {\n // Ensure stemming applies to new writes as well\n var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);\n currentDoc.metadata.rev_tree = merged.tree;\n currentDoc.stemmedRevs = merged.stemmedRevs || [];\n insertDoc(currentDoc, resultsIdx, docWritten);\n }\n }\n nextDoc();\n });\n}\n\n// IndexedDB requires a versioned database structure, so we use the\n// version here to manage migrations.\nvar ADAPTER_VERSION = 5;\n\n// The object stores created for each database\n// DOC_STORE stores the document meta data, its revision history and state\n// Keyed by document id\nvar DOC_STORE = 'document-store';\n// BY_SEQ_STORE stores a particular version of a document, keyed by its\n// sequence id\nvar BY_SEQ_STORE = 'by-sequence';\n// Where we store attachments\nvar ATTACH_STORE = 'attach-store';\n// Where we store many-to-many relations\n// between attachment digests and seqs\nvar ATTACH_AND_SEQ_STORE = 'attach-seq-store';\n\n// Where we store database-wide meta data in a single record\n// keyed by id: META_STORE\nvar META_STORE = 'meta-store';\n// Where we store local documents\nvar LOCAL_STORE = 'local-store';\n// Where we detect blob support\nvar DETECT_BLOB_SUPPORT_STORE = 'detect-blob-support';\n\nfunction safeJsonParse(str) {\n // This try/catch guards against stack overflow errors.\n // JSON.parse() is faster than vuvuzela.parse() but vuvuzela\n // cannot overflow.\n try {\n return JSON.parse(str);\n } catch (e) {\n /* istanbul ignore next */\n return vuvuzela.parse(str);\n }\n}\n\nfunction safeJsonStringify(json) {\n try {\n return JSON.stringify(json);\n } catch (e) {\n /* istanbul ignore next */\n return vuvuzela.stringify(json);\n }\n}\n\nfunction idbError(callback) {\n return function (evt) {\n var message = 'unknown_error';\n if (evt.target && evt.target.error) {\n message = evt.target.error.name || evt.target.error.message;\n }\n callback(createError(IDB_ERROR, message, evt.type));\n };\n}\n\n// Unfortunately, the metadata has to be stringified\n// when it is put into the database, because otherwise\n// IndexedDB can throw errors for deeply-nested objects.\n// Originally we just used JSON.parse/JSON.stringify; now\n// we use this custom vuvuzela library that avoids recursion.\n// If we could do it all over again, we'd probably use a\n// format for the revision trees other than JSON.\nfunction encodeMetadata(metadata, winningRev, deleted) {\n return {\n data: safeJsonStringify(metadata),\n winningRev: winningRev,\n deletedOrLocal: deleted ? '1' : '0',\n seq: metadata.seq, // highest seq for this doc\n id: metadata.id\n };\n}\n\nfunction decodeMetadata(storedObject) {\n if (!storedObject) {\n return null;\n }\n var metadata = safeJsonParse(storedObject.data);\n metadata.winningRev = storedObject.winningRev;\n metadata.deleted = storedObject.deletedOrLocal === '1';\n metadata.seq = storedObject.seq;\n return metadata;\n}\n\n// read the doc back out from the database. we don't store the\n// _id or _rev because we already have _doc_id_rev.\nfunction decodeDoc(doc) {\n if (!doc) {\n return doc;\n }\n var idx = doc._doc_id_rev.lastIndexOf(':');\n doc._id = doc._doc_id_rev.substring(0, idx - 1);\n doc._rev = doc._doc_id_rev.substring(idx + 1);\n delete doc._doc_id_rev;\n return doc;\n}\n\n// Read a blob from the database, encoding as necessary\n// and translating from base64 if the IDB doesn't support\n// native Blobs\nfunction readBlobData(body, type, asBlob, callback) {\n if (asBlob) {\n if (!body) {\n callback(createBlob([''], {type: type}));\n } else if (typeof body !== 'string') { // we have blob support\n callback(body);\n } else { // no blob support\n callback(b64ToBluffer(body, type));\n }\n } else { // as base64 string\n if (!body) {\n callback('');\n } else if (typeof body !== 'string') { // we have blob support\n readAsBinaryString(body, function (binary) {\n callback(thisBtoa(binary));\n });\n } else { // no blob support\n callback(body);\n }\n }\n}\n\nfunction fetchAttachmentsIfNecessary(doc, opts, txn, cb) {\n var attachments = Object.keys(doc._attachments || {});\n if (!attachments.length) {\n return cb && cb();\n }\n var numDone = 0;\n\n function checkDone() {\n if (++numDone === attachments.length && cb) {\n cb();\n }\n }\n\n function fetchAttachment(doc, att) {\n var attObj = doc._attachments[att];\n var digest = attObj.digest;\n var req = txn.objectStore(ATTACH_STORE).get(digest);\n req.onsuccess = function (e) {\n attObj.body = e.target.result.body;\n checkDone();\n };\n }\n\n attachments.forEach(function (att) {\n if (opts.attachments && opts.include_docs) {\n fetchAttachment(doc, att);\n } else {\n doc._attachments[att].stub = true;\n checkDone();\n }\n });\n}\n\n// IDB-specific postprocessing necessary because\n// we don't know whether we stored a true Blob or\n// a base64-encoded string, and if it's a Blob it\n// needs to be read outside of the transaction context\nfunction postProcessAttachments(results, asBlob) {\n return PouchPromise.all(results.map(function (row) {\n if (row.doc && row.doc._attachments) {\n var attNames = Object.keys(row.doc._attachments);\n return PouchPromise.all(attNames.map(function (att) {\n var attObj = row.doc._attachments[att];\n if (!('body' in attObj)) { // already processed\n return;\n }\n var body = attObj.body;\n var type = attObj.content_type;\n return new PouchPromise(function (resolve) {\n readBlobData(body, type, asBlob, function (data) {\n row.doc._attachments[att] = $inject_Object_assign(\n pick(attObj, ['digest', 'content_type']),\n {data: data}\n );\n resolve();\n });\n });\n }));\n }\n }));\n}\n\nfunction compactRevs(revs, docId, txn) {\n\n var possiblyOrphanedDigests = [];\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var attStore = txn.objectStore(ATTACH_STORE);\n var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n var count = revs.length;\n\n function checkDone() {\n count--;\n if (!count) { // done processing all revs\n deleteOrphanedAttachments();\n }\n }\n\n function deleteOrphanedAttachments() {\n if (!possiblyOrphanedDigests.length) {\n return;\n }\n possiblyOrphanedDigests.forEach(function (digest) {\n var countReq = attAndSeqStore.index('digestSeq').count(\n IDBKeyRange.bound(\n digest + '::', digest + '::\\uffff', false, false));\n countReq.onsuccess = function (e) {\n var count = e.target.result;\n if (!count) {\n // orphaned\n attStore[\"delete\"](digest);\n }\n };\n });\n }\n\n revs.forEach(function (rev$$1) {\n var index = seqStore.index('_doc_id_rev');\n var key = docId + \"::\" + rev$$1;\n index.getKey(key).onsuccess = function (e) {\n var seq = e.target.result;\n if (typeof seq !== 'number') {\n return checkDone();\n }\n seqStore[\"delete\"](seq);\n\n var cursor = attAndSeqStore.index('seq')\n .openCursor(IDBKeyRange.only(seq));\n\n cursor.onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var digest = cursor.value.digestSeq.split('::')[0];\n possiblyOrphanedDigests.push(digest);\n attAndSeqStore[\"delete\"](cursor.primaryKey);\n cursor[\"continue\"]();\n } else { // done\n checkDone();\n }\n };\n };\n });\n}\n\nfunction openTransactionSafely(idb, stores, mode) {\n try {\n return {\n txn: idb.transaction(stores, mode)\n };\n } catch (err) {\n return {\n error: err\n };\n }\n}\n\nvar changesHandler$$1 = new Changes();\n\nfunction idbBulkDocs(dbOpts, req, opts, api, idb, callback) {\n var docInfos = req.docs;\n var txn;\n var docStore;\n var bySeqStore;\n var attachStore;\n var attachAndSeqStore;\n var metaStore;\n var docInfoError;\n var metaDoc;\n\n for (var i = 0, len = docInfos.length; i < len; i++) {\n var doc = docInfos[i];\n if (doc._id && isLocalId(doc._id)) {\n continue;\n }\n doc = docInfos[i] = parseDoc(doc, opts.new_edits);\n if (doc.error && !docInfoError) {\n docInfoError = doc;\n }\n }\n\n if (docInfoError) {\n return callback(docInfoError);\n }\n\n var allDocsProcessed = false;\n var docCountDelta = 0;\n var results = new Array(docInfos.length);\n var fetchedDocs = new ExportedMap();\n var preconditionErrored = false;\n var blobType = api._meta.blobSupport ? 'blob' : 'base64';\n\n preprocessAttachments(docInfos, blobType, function (err) {\n if (err) {\n return callback(err);\n }\n startTransaction();\n });\n\n function startTransaction() {\n\n var stores = [\n DOC_STORE, BY_SEQ_STORE,\n ATTACH_STORE,\n LOCAL_STORE, ATTACH_AND_SEQ_STORE,\n META_STORE\n ];\n var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n txn.onabort = idbError(callback);\n txn.ontimeout = idbError(callback);\n txn.oncomplete = complete;\n docStore = txn.objectStore(DOC_STORE);\n bySeqStore = txn.objectStore(BY_SEQ_STORE);\n attachStore = txn.objectStore(ATTACH_STORE);\n attachAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n metaStore = txn.objectStore(META_STORE);\n\n metaStore.get(META_STORE).onsuccess = function (e) {\n metaDoc = e.target.result;\n updateDocCountIfReady();\n };\n\n verifyAttachments(function (err) {\n if (err) {\n preconditionErrored = true;\n return callback(err);\n }\n fetchExistingDocs();\n });\n }\n\n function onAllDocsProcessed() {\n allDocsProcessed = true;\n updateDocCountIfReady();\n }\n\n function idbProcessDocs() {\n processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs,\n txn, results, writeDoc, opts, onAllDocsProcessed);\n }\n\n function updateDocCountIfReady() {\n if (!metaDoc || !allDocsProcessed) {\n return;\n }\n // caching the docCount saves a lot of time in allDocs() and\n // info(), which is why we go to all the trouble of doing this\n metaDoc.docCount += docCountDelta;\n metaStore.put(metaDoc);\n }\n\n function fetchExistingDocs() {\n\n if (!docInfos.length) {\n return;\n }\n\n var numFetched = 0;\n\n function checkDone() {\n if (++numFetched === docInfos.length) {\n idbProcessDocs();\n }\n }\n\n function readMetadata(event) {\n var metadata = decodeMetadata(event.target.result);\n\n if (metadata) {\n fetchedDocs.set(metadata.id, metadata);\n }\n checkDone();\n }\n\n for (var i = 0, len = docInfos.length; i < len; i++) {\n var docInfo = docInfos[i];\n if (docInfo._id && isLocalId(docInfo._id)) {\n checkDone(); // skip local docs\n continue;\n }\n var req = docStore.get(docInfo.metadata.id);\n req.onsuccess = readMetadata;\n }\n }\n\n function complete() {\n if (preconditionErrored) {\n return;\n }\n\n changesHandler$$1.notify(api._meta.name);\n callback(null, results);\n }\n\n function verifyAttachment(digest, callback) {\n\n var req = attachStore.get(digest);\n req.onsuccess = function (e) {\n if (!e.target.result) {\n var err = createError(MISSING_STUB,\n 'unknown stub attachment with digest ' +\n digest);\n err.status = 412;\n callback(err);\n } else {\n callback();\n }\n };\n }\n\n function verifyAttachments(finish) {\n\n\n var digests = [];\n docInfos.forEach(function (docInfo) {\n if (docInfo.data && docInfo.data._attachments) {\n Object.keys(docInfo.data._attachments).forEach(function (filename) {\n var att = docInfo.data._attachments[filename];\n if (att.stub) {\n digests.push(att.digest);\n }\n });\n }\n });\n if (!digests.length) {\n return finish();\n }\n var numDone = 0;\n var err;\n\n function checkDone() {\n if (++numDone === digests.length) {\n finish(err);\n }\n }\n digests.forEach(function (digest) {\n verifyAttachment(digest, function (attErr) {\n if (attErr && !err) {\n err = attErr;\n }\n checkDone();\n });\n });\n }\n\n function writeDoc(docInfo, winningRev$$1, winningRevIsDeleted, newRevIsDeleted,\n isUpdate, delta, resultsIdx, callback) {\n\n docInfo.metadata.winningRev = winningRev$$1;\n docInfo.metadata.deleted = winningRevIsDeleted;\n\n var doc = docInfo.data;\n doc._id = docInfo.metadata.id;\n doc._rev = docInfo.metadata.rev;\n\n if (newRevIsDeleted) {\n doc._deleted = true;\n }\n\n var hasAttachments = doc._attachments &&\n Object.keys(doc._attachments).length;\n if (hasAttachments) {\n return writeAttachments(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n\n docCountDelta += delta;\n updateDocCountIfReady();\n\n finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n\n function finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback) {\n\n var doc = docInfo.data;\n var metadata = docInfo.metadata;\n\n doc._doc_id_rev = metadata.id + '::' + metadata.rev;\n delete doc._id;\n delete doc._rev;\n\n function afterPutDoc(e) {\n var revsToDelete = docInfo.stemmedRevs || [];\n\n if (isUpdate && api.auto_compaction) {\n revsToDelete = revsToDelete.concat(compactTree(docInfo.metadata));\n }\n\n if (revsToDelete && revsToDelete.length) {\n compactRevs(revsToDelete, docInfo.metadata.id, txn);\n }\n\n metadata.seq = e.target.result;\n // Current _rev is calculated from _rev_tree on read\n // delete metadata.rev;\n var metadataToStore = encodeMetadata(metadata, winningRev$$1,\n winningRevIsDeleted);\n var metaDataReq = docStore.put(metadataToStore);\n metaDataReq.onsuccess = afterPutMetadata;\n }\n\n function afterPutDocError(e) {\n // ConstraintError, need to update, not put (see #1638 for details)\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n var index = bySeqStore.index('_doc_id_rev');\n var getKeyReq = index.getKey(doc._doc_id_rev);\n getKeyReq.onsuccess = function (e) {\n var putReq = bySeqStore.put(doc, e.target.result);\n putReq.onsuccess = afterPutDoc;\n };\n }\n\n function afterPutMetadata() {\n results[resultsIdx] = {\n ok: true,\n id: metadata.id,\n rev: metadata.rev\n };\n fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);\n insertAttachmentMappings(docInfo, metadata.seq, callback);\n }\n\n var putReq = bySeqStore.put(doc);\n\n putReq.onsuccess = afterPutDoc;\n putReq.onerror = afterPutDocError;\n }\n\n function writeAttachments(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback) {\n\n\n var doc = docInfo.data;\n\n var numDone = 0;\n var attachments = Object.keys(doc._attachments);\n\n function collectResults() {\n if (numDone === attachments.length) {\n finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n }\n\n function attachmentSaved() {\n numDone++;\n collectResults();\n }\n\n attachments.forEach(function (key) {\n var att = docInfo.data._attachments[key];\n if (!att.stub) {\n var data = att.data;\n delete att.data;\n att.revpos = parseInt(winningRev$$1, 10);\n var digest = att.digest;\n saveAttachment(digest, data, attachmentSaved);\n } else {\n numDone++;\n collectResults();\n }\n });\n }\n\n // map seqs to attachment digests, which\n // we will need later during compaction\n function insertAttachmentMappings(docInfo, seq, callback) {\n\n var attsAdded = 0;\n var attsToAdd = Object.keys(docInfo.data._attachments || {});\n\n if (!attsToAdd.length) {\n return callback();\n }\n\n function checkDone() {\n if (++attsAdded === attsToAdd.length) {\n callback();\n }\n }\n\n function add(att) {\n var digest = docInfo.data._attachments[att].digest;\n var req = attachAndSeqStore.put({\n seq: seq,\n digestSeq: digest + '::' + seq\n });\n\n req.onsuccess = checkDone;\n req.onerror = function (e) {\n // this callback is for a constaint error, which we ignore\n // because this docid/rev has already been associated with\n // the digest (e.g. when new_edits == false)\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n checkDone();\n };\n }\n for (var i = 0; i < attsToAdd.length; i++) {\n add(attsToAdd[i]); // do in parallel\n }\n }\n\n function saveAttachment(digest, data, callback) {\n\n\n var getKeyReq = attachStore.count(digest);\n getKeyReq.onsuccess = function (e) {\n var count = e.target.result;\n if (count) {\n return callback(); // already exists\n }\n var newAtt = {\n digest: digest,\n body: data\n };\n var putReq = attachStore.put(newAtt);\n putReq.onsuccess = callback;\n };\n }\n}\n\n// Abstraction over IDBCursor and getAll()/getAllKeys() that allows us to batch our operations\n// while falling back to a normal IDBCursor operation on browsers that don't support getAll() or\n// getAllKeys(). This allows for a much faster implementation than just straight-up cursors, because\n// we're not processing each document one-at-a-time.\nfunction runBatchedCursor(objectStore, keyRange, descending, batchSize, onBatch) {\n\n // Bail out of getAll()/getAllKeys() in the following cases:\n // 1) either method is unsupported - we need both\n // 2) batchSize is 1 (might as well use IDBCursor), or batchSize is -1 (i.e. batchSize unlimited,\n // not really clear the user wants a batched approach where the entire DB is read into memory,\n // perhaps they are filtering on a per-doc basis)\n // 3) descending – no real way to do this via getAll()/getAllKeys()\n\n var useGetAll = typeof objectStore.getAll === 'function' &&\n typeof objectStore.getAllKeys === 'function' &&\n batchSize > 1 && !descending;\n\n var keysBatch;\n var valuesBatch;\n var pseudoCursor;\n\n function onGetAll(e) {\n valuesBatch = e.target.result;\n if (keysBatch) {\n onBatch(keysBatch, valuesBatch, pseudoCursor);\n }\n }\n\n function onGetAllKeys(e) {\n keysBatch = e.target.result;\n if (valuesBatch) {\n onBatch(keysBatch, valuesBatch, pseudoCursor);\n }\n }\n\n function continuePseudoCursor() {\n if (!keysBatch.length) { // no more results\n return onBatch();\n }\n // fetch next batch, exclusive start\n var lastKey = keysBatch[keysBatch.length - 1];\n var newKeyRange;\n if (keyRange && keyRange.upper) {\n try {\n newKeyRange = IDBKeyRange.bound(lastKey, keyRange.upper,\n true, keyRange.upperOpen);\n } catch (e) {\n if (e.name === \"DataError\" && e.code === 0) {\n return onBatch(); // we're done, startkey and endkey are equal\n }\n }\n } else {\n newKeyRange = IDBKeyRange.lowerBound(lastKey, true);\n }\n keyRange = newKeyRange;\n keysBatch = null;\n valuesBatch = null;\n objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;\n objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;\n }\n\n function onCursor(e) {\n var cursor = e.target.result;\n if (!cursor) { // done\n return onBatch();\n }\n // regular IDBCursor acts like a batch where batch size is always 1\n onBatch([cursor.key], [cursor.value], cursor);\n }\n\n if (useGetAll) {\n pseudoCursor = {\"continue\": continuePseudoCursor};\n objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;\n objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;\n } else if (descending) {\n objectStore.openCursor(keyRange, 'prev').onsuccess = onCursor;\n } else {\n objectStore.openCursor(keyRange).onsuccess = onCursor;\n }\n}\n\n// simple shim for objectStore.getAll(), falling back to IDBCursor\nfunction getAll(objectStore, keyRange, onSuccess) {\n if (typeof objectStore.getAll === 'function') {\n // use native getAll\n objectStore.getAll(keyRange).onsuccess = onSuccess;\n return;\n }\n // fall back to cursors\n var values = [];\n\n function onCursor(e) {\n var cursor = e.target.result;\n if (cursor) {\n values.push(cursor.value);\n cursor[\"continue\"]();\n } else {\n onSuccess({\n target: {\n result: values\n }\n });\n }\n }\n\n objectStore.openCursor(keyRange).onsuccess = onCursor;\n}\n\nfunction allDocsKeys(keys, docStore, onBatch) {\n // It's not guaranted to be returned in right order \n var valuesBatch = [];\n var count = 0;\n keys.forEach(function (key, index) {\n docStore.get(key).onsuccess = function (event) {\n if (event.target.result) {\n valuesBatch[index] = event.target.result;\n } else {\n valuesBatch[index] = {key: key, error: 'not_found'};\n }\n count++;\n if (count === keys.length) {\n onBatch(keys, valuesBatch, {});\n }\n };\n });\n}\n\nfunction createKeyRange(start, end, inclusiveEnd, key, descending) {\n try {\n if (start && end) {\n if (descending) {\n return IDBKeyRange.bound(end, start, !inclusiveEnd, false);\n } else {\n return IDBKeyRange.bound(start, end, false, !inclusiveEnd);\n }\n } else if (start) {\n if (descending) {\n return IDBKeyRange.upperBound(start);\n } else {\n return IDBKeyRange.lowerBound(start);\n }\n } else if (end) {\n if (descending) {\n return IDBKeyRange.lowerBound(end, !inclusiveEnd);\n } else {\n return IDBKeyRange.upperBound(end, !inclusiveEnd);\n }\n } else if (key) {\n return IDBKeyRange.only(key);\n }\n } catch (e) {\n return {error: e};\n }\n return null;\n}\n\nfunction idbAllDocs(opts, idb, callback) {\n var start = 'startkey' in opts ? opts.startkey : false;\n var end = 'endkey' in opts ? opts.endkey : false;\n var key = 'key' in opts ? opts.key : false;\n var keys = 'keys' in opts ? opts.keys : false; \n var skip = opts.skip || 0;\n var limit = typeof opts.limit === 'number' ? opts.limit : -1;\n var inclusiveEnd = opts.inclusive_end !== false;\n\n var keyRange; \n var keyRangeError;\n if (!keys) {\n keyRange = createKeyRange(start, end, inclusiveEnd, key, opts.descending);\n keyRangeError = keyRange && keyRange.error;\n if (keyRangeError && \n !(keyRangeError.name === \"DataError\" && keyRangeError.code === 0)) {\n // DataError with error code 0 indicates start is less than end, so\n // can just do an empty query. Else need to throw\n return callback(createError(IDB_ERROR,\n keyRangeError.name, keyRangeError.message));\n }\n }\n\n var stores = [DOC_STORE, BY_SEQ_STORE, META_STORE];\n\n if (opts.attachments) {\n stores.push(ATTACH_STORE);\n }\n var txnResult = openTransactionSafely(idb, stores, 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n txn.oncomplete = onTxnComplete;\n txn.onabort = idbError(callback);\n var docStore = txn.objectStore(DOC_STORE);\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var metaStore = txn.objectStore(META_STORE);\n var docIdRevIndex = seqStore.index('_doc_id_rev');\n var results = [];\n var docCount;\n var updateSeq;\n\n metaStore.get(META_STORE).onsuccess = function (e) {\n docCount = e.target.result.docCount;\n };\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n getMaxUpdateSeq(seqStore, function (e) { \n if (e.target.result && e.target.result.length > 0) {\n updateSeq = e.target.result[0];\n }\n });\n }\n\n function getMaxUpdateSeq(objectStore, onSuccess) {\n function onCursor(e) {\n var cursor = e.target.result;\n var maxKey = undefined;\n if (cursor && cursor.key) {\n maxKey = cursor.key;\n } \n return onSuccess({\n target: {\n result: [maxKey]\n }\n });\n }\n objectStore.openCursor(null, 'prev').onsuccess = onCursor;\n }\n\n // if the user specifies include_docs=true, then we don't\n // want to block the main cursor while we're fetching the doc\n function fetchDocAsynchronously(metadata, row, winningRev$$1) {\n var key = metadata.id + \"::\" + winningRev$$1;\n docIdRevIndex.get(key).onsuccess = function onGetDoc(e) {\n row.doc = decodeDoc(e.target.result);\n if (opts.conflicts) {\n var conflicts = collectConflicts(metadata);\n if (conflicts.length) {\n row.doc._conflicts = conflicts;\n }\n }\n fetchAttachmentsIfNecessary(row.doc, opts, txn);\n };\n }\n\n function allDocsInner(winningRev$$1, metadata) {\n var row = {\n id: metadata.id,\n key: metadata.id,\n value: {\n rev: winningRev$$1\n }\n };\n var deleted = metadata.deleted;\n if (deleted) {\n if (keys) {\n results.push(row);\n // deleted docs are okay with \"keys\" requests\n row.value.deleted = true;\n row.doc = null;\n }\n } else if (skip-- <= 0) {\n results.push(row);\n if (opts.include_docs) {\n fetchDocAsynchronously(metadata, row, winningRev$$1);\n }\n }\n }\n\n function processBatch(batchValues) {\n for (var i = 0, len = batchValues.length; i < len; i++) {\n if (results.length === limit) {\n break;\n }\n var batchValue = batchValues[i];\n if (batchValue.error && keys) {\n // key was not found with \"keys\" requests\n results.push(batchValue);\n continue;\n }\n var metadata = decodeMetadata(batchValue);\n var winningRev$$1 = metadata.winningRev;\n allDocsInner(winningRev$$1, metadata);\n }\n }\n\n function onBatch(batchKeys, batchValues, cursor) {\n if (!cursor) {\n return;\n }\n processBatch(batchValues);\n if (results.length < limit) {\n cursor[\"continue\"]();\n }\n }\n\n function onGetAll(e) {\n var values = e.target.result;\n if (opts.descending) {\n values = values.reverse();\n }\n processBatch(values);\n }\n\n function onResultsReady() {\n var returnVal = {\n total_rows: docCount,\n offset: opts.skip,\n rows: results\n };\n \n /* istanbul ignore if */\n if (opts.update_seq && updateSeq !== undefined) {\n returnVal.update_seq = updateSeq;\n }\n callback(null, returnVal);\n }\n\n function onTxnComplete() {\n if (opts.attachments) {\n postProcessAttachments(results, opts.binary).then(onResultsReady);\n } else {\n onResultsReady();\n }\n }\n\n // don't bother doing any requests if start > end or limit === 0\n if (keyRangeError || limit === 0) {\n return;\n }\n if (keys) {\n return allDocsKeys(opts.keys, docStore, onBatch);\n }\n if (limit === -1) { // just fetch everything\n return getAll(docStore, keyRange, onGetAll);\n }\n // else do a cursor\n // choose a batch size based on the skip, since we'll need to skip that many\n runBatchedCursor(docStore, keyRange, opts.descending, limit + skip, onBatch);\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\nfunction checkBlobSupport(txn) {\n return new PouchPromise(function (resolve) {\n var blob$$1 = createBlob(['']);\n var req = txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob$$1, 'key');\n\n req.onsuccess = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome ||\n parseInt(matchedChrome[1], 10) >= 43);\n };\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction countDocs(txn, cb) {\n var index = txn.objectStore(DOC_STORE).index('deletedOrLocal');\n index.count(IDBKeyRange.only('0')).onsuccess = function (e) {\n cb(e.target.result);\n };\n}\n\n// This task queue ensures that IDB open calls are done in their own tick\n// and sequentially - i.e. we wait for the async IDB open to *fully* complete\n// before calling the next one. This works around IE/Edge race conditions in IDB.\n\nvar running = false;\nvar queue = [];\n\nfunction tryCode(fun, err, res, PouchDB) {\n try {\n fun(err, res);\n } catch (err) {\n // Shouldn't happen, but in some odd cases\n // IndexedDB implementations might throw a sync\n // error, in which case this will at least log it.\n PouchDB.emit('error', err);\n }\n}\n\nfunction applyNext() {\n if (running || !queue.length) {\n return;\n }\n running = true;\n queue.shift()();\n}\n\nfunction enqueueTask(action, callback, PouchDB) {\n queue.push(function runAction() {\n action(function runCallback(err, res) {\n tryCode(callback, err, res, PouchDB);\n running = false;\n nextTick(function runNext() {\n applyNext(PouchDB);\n });\n });\n });\n applyNext();\n}\n\nfunction changes(opts, api, dbName, idb) {\n opts = clone(opts);\n\n if (opts.continuous) {\n var id = dbName + ':' + uuid();\n changesHandler$$1.addListener(dbName, id, api, opts);\n changesHandler$$1.notify(dbName);\n return {\n cancel: function () {\n changesHandler$$1.removeListener(dbName, id);\n }\n };\n }\n\n var docIds = opts.doc_ids && new ExportedSet(opts.doc_ids);\n\n opts.since = opts.since || 0;\n var lastSeq = opts.since;\n\n var limit = 'limit' in opts ? opts.limit : -1;\n if (limit === 0) {\n limit = 1; // per CouchDB _changes spec\n }\n var returnDocs;\n if ('return_docs' in opts) {\n returnDocs = opts.return_docs;\n } else if ('returnDocs' in opts) {\n // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n returnDocs = opts.returnDocs;\n } else {\n returnDocs = true;\n }\n\n var results = [];\n var numResults = 0;\n var filter = filterChange(opts);\n var docIdsToMetadata = new ExportedMap();\n\n var txn;\n var bySeqStore;\n var docStore;\n var docIdRevIndex;\n\n function onBatch(batchKeys, batchValues, cursor) {\n if (!cursor || !batchKeys.length) { // done\n return;\n }\n\n var winningDocs = new Array(batchKeys.length);\n var metadatas = new Array(batchKeys.length);\n\n function processMetadataAndWinningDoc(metadata, winningDoc) {\n var change = opts.processChange(winningDoc, metadata, opts);\n lastSeq = change.seq = metadata.seq;\n\n var filtered = filter(change);\n if (typeof filtered === 'object') { // anything but true/false indicates error\n return opts.complete(filtered);\n }\n\n if (filtered) {\n numResults++;\n if (returnDocs) {\n results.push(change);\n }\n // process the attachment immediately\n // for the benefit of live listeners\n if (opts.attachments && opts.include_docs) {\n fetchAttachmentsIfNecessary(winningDoc, opts, txn, function () {\n postProcessAttachments([change], opts.binary).then(function () {\n opts.onChange(change);\n });\n });\n } else {\n opts.onChange(change);\n }\n }\n }\n\n function onBatchDone() {\n for (var i = 0, len = winningDocs.length; i < len; i++) {\n if (numResults === limit) {\n break;\n }\n var winningDoc = winningDocs[i];\n if (!winningDoc) {\n continue;\n }\n var metadata = metadatas[i];\n processMetadataAndWinningDoc(metadata, winningDoc);\n }\n\n if (numResults !== limit) {\n cursor[\"continue\"]();\n }\n }\n\n // Fetch all metadatas/winningdocs from this batch in parallel, then process\n // them all only once all data has been collected. This is done in parallel\n // because it's faster than doing it one-at-a-time.\n var numDone = 0;\n batchValues.forEach(function (value, i) {\n var doc = decodeDoc(value);\n var seq = batchKeys[i];\n fetchWinningDocAndMetadata(doc, seq, function (metadata, winningDoc) {\n metadatas[i] = metadata;\n winningDocs[i] = winningDoc;\n if (++numDone === batchKeys.length) {\n onBatchDone();\n }\n });\n });\n }\n\n function onGetMetadata(doc, seq, metadata, cb) {\n if (metadata.seq !== seq) {\n // some other seq is later\n return cb();\n }\n\n if (metadata.winningRev === doc._rev) {\n // this is the winning doc\n return cb(metadata, doc);\n }\n\n // fetch winning doc in separate request\n var docIdRev = doc._id + '::' + metadata.winningRev;\n var req = docIdRevIndex.get(docIdRev);\n req.onsuccess = function (e) {\n cb(metadata, decodeDoc(e.target.result));\n };\n }\n\n function fetchWinningDocAndMetadata(doc, seq, cb) {\n if (docIds && !docIds.has(doc._id)) {\n return cb();\n }\n\n var metadata = docIdsToMetadata.get(doc._id);\n if (metadata) { // cached\n return onGetMetadata(doc, seq, metadata, cb);\n }\n // metadata not cached, have to go fetch it\n docStore.get(doc._id).onsuccess = function (e) {\n metadata = decodeMetadata(e.target.result);\n docIdsToMetadata.set(doc._id, metadata);\n onGetMetadata(doc, seq, metadata, cb);\n };\n }\n\n function finish() {\n opts.complete(null, {\n results: results,\n last_seq: lastSeq\n });\n }\n\n function onTxnComplete() {\n if (!opts.continuous && opts.attachments) {\n // cannot guarantee that postProcessing was already done,\n // so do it again\n postProcessAttachments(results).then(finish);\n } else {\n finish();\n }\n }\n\n var objectStores = [DOC_STORE, BY_SEQ_STORE];\n if (opts.attachments) {\n objectStores.push(ATTACH_STORE);\n }\n var txnResult = openTransactionSafely(idb, objectStores, 'readonly');\n if (txnResult.error) {\n return opts.complete(txnResult.error);\n }\n txn = txnResult.txn;\n txn.onabort = idbError(opts.complete);\n txn.oncomplete = onTxnComplete;\n\n bySeqStore = txn.objectStore(BY_SEQ_STORE);\n docStore = txn.objectStore(DOC_STORE);\n docIdRevIndex = bySeqStore.index('_doc_id_rev');\n\n var keyRange = (opts.since && !opts.descending) ?\n IDBKeyRange.lowerBound(opts.since, true) : null;\n\n runBatchedCursor(bySeqStore, keyRange, opts.descending, limit, onBatch);\n}\n\nvar cachedDBs = new ExportedMap();\nvar blobSupportPromise;\nvar openReqList = new ExportedMap();\n\nfunction IdbPouch(opts, callback) {\n var api = this;\n\n enqueueTask(function (thisCallback) {\n init(api, opts, thisCallback);\n }, callback, api.constructor);\n}\n\nfunction init(api, opts, callback) {\n\n var dbName = opts.name;\n\n var idb = null;\n api._meta = null;\n\n // called when creating a fresh new database\n function createSchema(db) {\n var docStore = db.createObjectStore(DOC_STORE, {keyPath : 'id'});\n db.createObjectStore(BY_SEQ_STORE, {autoIncrement: true})\n .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n db.createObjectStore(ATTACH_STORE, {keyPath: 'digest'});\n db.createObjectStore(META_STORE, {keyPath: 'id', autoIncrement: false});\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n\n // added in v2\n docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n // added in v3\n db.createObjectStore(LOCAL_STORE, {keyPath: '_id'});\n\n // added in v4\n var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n {autoIncrement: true});\n attAndSeqStore.createIndex('seq', 'seq');\n attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n }\n\n // migration to version 2\n // unfortunately \"deletedOrLocal\" is a misnomer now that we no longer\n // store local docs in the main doc-store, but whaddyagonnado\n function addDeletedOrLocalIndex(txn, callback) {\n var docStore = txn.objectStore(DOC_STORE);\n docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n docStore.openCursor().onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var metadata = cursor.value;\n var deleted = isDeleted(metadata);\n metadata.deletedOrLocal = deleted ? \"1\" : \"0\";\n docStore.put(metadata);\n cursor[\"continue\"]();\n } else {\n callback();\n }\n };\n }\n\n // migration to version 3 (part 1)\n function createLocalStoreSchema(db) {\n db.createObjectStore(LOCAL_STORE, {keyPath: '_id'})\n .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n }\n\n // migration to version 3 (part 2)\n function migrateLocalStore(txn, cb) {\n var localStore = txn.objectStore(LOCAL_STORE);\n var docStore = txn.objectStore(DOC_STORE);\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n\n var cursor = docStore.openCursor();\n cursor.onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var metadata = cursor.value;\n var docId = metadata.id;\n var local = isLocalId(docId);\n var rev$$1 = winningRev(metadata);\n if (local) {\n var docIdRev = docId + \"::\" + rev$$1;\n // remove all seq entries\n // associated with this docId\n var start = docId + \"::\";\n var end = docId + \"::~\";\n var index = seqStore.index('_doc_id_rev');\n var range = IDBKeyRange.bound(start, end, false, false);\n var seqCursor = index.openCursor(range);\n seqCursor.onsuccess = function (e) {\n seqCursor = e.target.result;\n if (!seqCursor) {\n // done\n docStore[\"delete\"](cursor.primaryKey);\n cursor[\"continue\"]();\n } else {\n var data = seqCursor.value;\n if (data._doc_id_rev === docIdRev) {\n localStore.put(data);\n }\n seqStore[\"delete\"](seqCursor.primaryKey);\n seqCursor[\"continue\"]();\n }\n };\n } else {\n cursor[\"continue\"]();\n }\n } else if (cb) {\n cb();\n }\n };\n }\n\n // migration to version 4 (part 1)\n function addAttachAndSeqStore(db) {\n var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n {autoIncrement: true});\n attAndSeqStore.createIndex('seq', 'seq');\n attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n }\n\n // migration to version 4 (part 2)\n function migrateAttsAndSeqs(txn, callback) {\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var attStore = txn.objectStore(ATTACH_STORE);\n var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n\n // need to actually populate the table. this is the expensive part,\n // so as an optimization, check first that this database even\n // contains attachments\n var req = attStore.count();\n req.onsuccess = function (e) {\n var count = e.target.result;\n if (!count) {\n return callback(); // done\n }\n\n seqStore.openCursor().onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n return callback(); // done\n }\n var doc = cursor.value;\n var seq = cursor.primaryKey;\n var atts = Object.keys(doc._attachments || {});\n var digestMap = {};\n for (var j = 0; j < atts.length; j++) {\n var att = doc._attachments[atts[j]];\n digestMap[att.digest] = true; // uniq digests, just in case\n }\n var digests = Object.keys(digestMap);\n for (j = 0; j < digests.length; j++) {\n var digest = digests[j];\n attAndSeqStore.put({\n seq: seq,\n digestSeq: digest + '::' + seq\n });\n }\n cursor[\"continue\"]();\n };\n };\n }\n\n // migration to version 5\n // Instead of relying on on-the-fly migration of metadata,\n // this brings the doc-store to its modern form:\n // - metadata.winningrev\n // - metadata.seq\n // - stringify the metadata when storing it\n function migrateMetadata(txn) {\n\n function decodeMetadataCompat(storedObject) {\n if (!storedObject.data) {\n // old format, when we didn't store it stringified\n storedObject.deleted = storedObject.deletedOrLocal === '1';\n return storedObject;\n }\n return decodeMetadata(storedObject);\n }\n\n // ensure that every metadata has a winningRev and seq,\n // which was previously created on-the-fly but better to migrate\n var bySeqStore = txn.objectStore(BY_SEQ_STORE);\n var docStore = txn.objectStore(DOC_STORE);\n var cursor = docStore.openCursor();\n cursor.onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n return; // done\n }\n var metadata = decodeMetadataCompat(cursor.value);\n\n metadata.winningRev = metadata.winningRev ||\n winningRev(metadata);\n\n function fetchMetadataSeq() {\n // metadata.seq was added post-3.2.0, so if it's missing,\n // we need to fetch it manually\n var start = metadata.id + '::';\n var end = metadata.id + '::\\uffff';\n var req = bySeqStore.index('_doc_id_rev').openCursor(\n IDBKeyRange.bound(start, end));\n\n var metadataSeq = 0;\n req.onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n metadata.seq = metadataSeq;\n return onGetMetadataSeq();\n }\n var seq = cursor.primaryKey;\n if (seq > metadataSeq) {\n metadataSeq = seq;\n }\n cursor[\"continue\"]();\n };\n }\n\n function onGetMetadataSeq() {\n var metadataToStore = encodeMetadata(metadata,\n metadata.winningRev, metadata.deleted);\n\n var req = docStore.put(metadataToStore);\n req.onsuccess = function () {\n cursor[\"continue\"]();\n };\n }\n\n if (metadata.seq) {\n return onGetMetadataSeq();\n }\n\n fetchMetadataSeq();\n };\n\n }\n\n api._remote = false;\n api.type = function () {\n return 'idb';\n };\n\n api._id = toPromise(function (callback) {\n callback(null, api._meta.instanceId);\n });\n\n api._bulkDocs = function idb_bulkDocs(req, reqOpts, callback) {\n idbBulkDocs(opts, req, reqOpts, api, idb, callback);\n };\n\n // First we look up the metadata in the ids database, then we fetch the\n // current revision(s) from the by sequence store\n api._get = function idb_get(id, opts, callback) {\n var doc;\n var metadata;\n var err;\n var txn = opts.ctx;\n if (!txn) {\n var txnResult = openTransactionSafely(idb,\n [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n }\n\n function finish() {\n callback(err, {doc: doc, metadata: metadata, ctx: txn});\n }\n\n txn.objectStore(DOC_STORE).get(id).onsuccess = function (e) {\n metadata = decodeMetadata(e.target.result);\n // we can determine the result here if:\n // 1. there is no such document\n // 2. the document is deleted and we don't ask about specific rev\n // When we ask with opts.rev we expect the answer to be either\n // doc (possibly with _deleted=true) or missing error\n if (!metadata) {\n err = createError(MISSING_DOC, 'missing');\n return finish();\n }\n\n var rev$$1;\n if (!opts.rev) {\n rev$$1 = metadata.winningRev;\n var deleted = isDeleted(metadata);\n if (deleted) {\n err = createError(MISSING_DOC, \"deleted\");\n return finish();\n }\n } else {\n rev$$1 = opts.latest ? latest(opts.rev, metadata) : opts.rev;\n }\n\n var objectStore = txn.objectStore(BY_SEQ_STORE);\n var key = metadata.id + '::' + rev$$1;\n\n objectStore.index('_doc_id_rev').get(key).onsuccess = function (e) {\n doc = e.target.result;\n if (doc) {\n doc = decodeDoc(doc);\n }\n if (!doc) {\n err = createError(MISSING_DOC, 'missing');\n return finish();\n }\n finish();\n };\n };\n };\n\n api._getAttachment = function (docId, attachId, attachment, opts, callback) {\n var txn;\n if (opts.ctx) {\n txn = opts.ctx;\n } else {\n var txnResult = openTransactionSafely(idb,\n [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n }\n var digest = attachment.digest;\n var type = attachment.content_type;\n\n txn.objectStore(ATTACH_STORE).get(digest).onsuccess = function (e) {\n var body = e.target.result.body;\n readBlobData(body, type, opts.binary, function (blobData) {\n callback(null, blobData);\n });\n };\n };\n\n api._info = function idb_info(callback) {\n var updateSeq;\n var docCount;\n\n var txnResult = openTransactionSafely(idb, [META_STORE, BY_SEQ_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {\n docCount = e.target.result.docCount;\n };\n txn.objectStore(BY_SEQ_STORE).openCursor(null, 'prev').onsuccess = function (e) {\n var cursor = e.target.result;\n updateSeq = cursor ? cursor.key : 0;\n };\n\n txn.oncomplete = function () {\n callback(null, {\n doc_count: docCount,\n update_seq: updateSeq,\n // for debugging\n idb_attachment_format: (api._meta.blobSupport ? 'binary' : 'base64')\n });\n };\n };\n\n api._allDocs = function idb_allDocs(opts, callback) {\n idbAllDocs(opts, idb, callback);\n };\n\n api._changes = function idbChanges(opts) {\n return changes(opts, api, dbName, idb);\n };\n\n api._close = function (callback) {\n // https://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase#close\n // \"Returns immediately and closes the connection in a separate thread...\"\n idb.close();\n cachedDBs[\"delete\"](dbName);\n callback();\n };\n\n api._getRevisionTree = function (docId, callback) {\n var txnResult = openTransactionSafely(idb, [DOC_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n var req = txn.objectStore(DOC_STORE).get(docId);\n req.onsuccess = function (event) {\n var doc = decodeMetadata(event.target.result);\n if (!doc) {\n callback(createError(MISSING_DOC));\n } else {\n callback(null, doc.rev_tree);\n }\n };\n };\n\n // This function removes revisions of document docId\n // which are listed in revs and sets this document\n // revision to to rev_tree\n api._doCompaction = function (docId, revs, callback) {\n var stores = [\n DOC_STORE,\n BY_SEQ_STORE,\n ATTACH_STORE,\n ATTACH_AND_SEQ_STORE\n ];\n var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n\n var docStore = txn.objectStore(DOC_STORE);\n\n docStore.get(docId).onsuccess = function (event) {\n var metadata = decodeMetadata(event.target.result);\n traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n revHash, ctx, opts) {\n var rev$$1 = pos + '-' + revHash;\n if (revs.indexOf(rev$$1) !== -1) {\n opts.status = 'missing';\n }\n });\n compactRevs(revs, docId, txn);\n var winningRev$$1 = metadata.winningRev;\n var deleted = metadata.deleted;\n txn.objectStore(DOC_STORE).put(\n encodeMetadata(metadata, winningRev$$1, deleted));\n };\n txn.onabort = idbError(callback);\n txn.oncomplete = function () {\n callback();\n };\n };\n\n\n api._getLocal = function (id, callback) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var tx = txnResult.txn;\n var req = tx.objectStore(LOCAL_STORE).get(id);\n\n req.onerror = idbError(callback);\n req.onsuccess = function (e) {\n var doc = e.target.result;\n if (!doc) {\n callback(createError(MISSING_DOC));\n } else {\n delete doc['_doc_id_rev']; // for backwards compat\n callback(null, doc);\n }\n };\n };\n\n api._putLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n delete doc._revisions; // ignore this, trust the rev\n var oldRev = doc._rev;\n var id = doc._id;\n if (!oldRev) {\n doc._rev = '0-1';\n } else {\n doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);\n }\n\n var tx = opts.ctx;\n var ret;\n if (!tx) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n tx = txnResult.txn;\n tx.onerror = idbError(callback);\n tx.oncomplete = function () {\n if (ret) {\n callback(null, ret);\n }\n };\n }\n\n var oStore = tx.objectStore(LOCAL_STORE);\n var req;\n if (oldRev) {\n req = oStore.get(id);\n req.onsuccess = function (e) {\n var oldDoc = e.target.result;\n if (!oldDoc || oldDoc._rev !== oldRev) {\n callback(createError(REV_CONFLICT));\n } else { // update\n var req = oStore.put(doc);\n req.onsuccess = function () {\n ret = {ok: true, id: doc._id, rev: doc._rev};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n };\n }\n };\n } else { // new doc\n req = oStore.add(doc);\n req.onerror = function (e) {\n // constraint error, already exists\n callback(createError(REV_CONFLICT));\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n };\n req.onsuccess = function () {\n ret = {ok: true, id: doc._id, rev: doc._rev};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n };\n }\n };\n\n api._removeLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var tx = opts.ctx;\n if (!tx) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n tx = txnResult.txn;\n tx.oncomplete = function () {\n if (ret) {\n callback(null, ret);\n }\n };\n }\n var ret;\n var id = doc._id;\n var oStore = tx.objectStore(LOCAL_STORE);\n var req = oStore.get(id);\n\n req.onerror = idbError(callback);\n req.onsuccess = function (e) {\n var oldDoc = e.target.result;\n if (!oldDoc || oldDoc._rev !== doc._rev) {\n callback(createError(MISSING_DOC));\n } else {\n oStore[\"delete\"](id);\n ret = {ok: true, id: id, rev: '0-0'};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n }\n };\n };\n\n api._destroy = function (opts, callback) {\n changesHandler$$1.removeAllListeners(dbName);\n\n //Close open request for \"dbName\" database to fix ie delay.\n var openReq = openReqList.get(dbName);\n if (openReq && openReq.result) {\n openReq.result.close();\n cachedDBs[\"delete\"](dbName);\n }\n var req = indexedDB.deleteDatabase(dbName);\n\n req.onsuccess = function () {\n //Remove open request from the list.\n openReqList[\"delete\"](dbName);\n if (hasLocalStorage() && (dbName in localStorage)) {\n delete localStorage[dbName];\n }\n callback(null, { 'ok': true });\n };\n\n req.onerror = idbError(callback);\n };\n\n var cached = cachedDBs.get(dbName);\n\n if (cached) {\n idb = cached.idb;\n api._meta = cached.global;\n return nextTick(function () {\n callback(null, api);\n });\n }\n\n var req;\n if (opts.storage) {\n req = tryStorageOption(dbName, opts.storage);\n } else {\n req = indexedDB.open(dbName, ADAPTER_VERSION);\n }\n\n openReqList.set(dbName, req);\n\n req.onupgradeneeded = function (e) {\n var db = e.target.result;\n if (e.oldVersion < 1) {\n return createSchema(db); // new db, initial schema\n }\n // do migrations\n\n var txn = e.currentTarget.transaction;\n // these migrations have to be done in this function, before\n // control is returned to the event loop, because IndexedDB\n\n if (e.oldVersion < 3) {\n createLocalStoreSchema(db); // v2 -> v3\n }\n if (e.oldVersion < 4) {\n addAttachAndSeqStore(db); // v3 -> v4\n }\n\n var migrations = [\n addDeletedOrLocalIndex, // v1 -> v2\n migrateLocalStore, // v2 -> v3\n migrateAttsAndSeqs, // v3 -> v4\n migrateMetadata // v4 -> v5\n ];\n\n var i = e.oldVersion;\n\n function next() {\n var migration = migrations[i - 1];\n i++;\n if (migration) {\n migration(txn, next);\n }\n }\n\n next();\n };\n\n req.onsuccess = function (e) {\n\n idb = e.target.result;\n\n idb.onversionchange = function () {\n idb.close();\n cachedDBs[\"delete\"](dbName);\n };\n\n idb.onabort = function (e) {\n guardedConsole('error', 'Database has a global failure', e.target.error);\n idb.close();\n cachedDBs[\"delete\"](dbName);\n };\n\n // Do a few setup operations (in parallel as much as possible):\n // 1. Fetch meta doc\n // 2. Check blob support\n // 3. Calculate docCount\n // 4. Generate an instanceId if necessary\n // 5. Store docCount and instanceId on meta doc\n\n var txn = idb.transaction([\n META_STORE,\n DETECT_BLOB_SUPPORT_STORE,\n DOC_STORE\n ], 'readwrite');\n\n var storedMetaDoc = false;\n var metaDoc;\n var docCount;\n var blobSupport;\n var instanceId;\n\n function completeSetup() {\n if (typeof blobSupport === 'undefined' || !storedMetaDoc) {\n return;\n }\n api._meta = {\n name: dbName,\n instanceId: instanceId,\n blobSupport: blobSupport\n };\n\n cachedDBs.set(dbName, {\n idb: idb,\n global: api._meta\n });\n callback(null, api);\n }\n\n function storeMetaDocIfReady() {\n if (typeof docCount === 'undefined' || typeof metaDoc === 'undefined') {\n return;\n }\n var instanceKey = dbName + '_id';\n if (instanceKey in metaDoc) {\n instanceId = metaDoc[instanceKey];\n } else {\n metaDoc[instanceKey] = instanceId = uuid();\n }\n metaDoc.docCount = docCount;\n txn.objectStore(META_STORE).put(metaDoc);\n }\n\n //\n // fetch or generate the instanceId\n //\n txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {\n metaDoc = e.target.result || { id: META_STORE };\n storeMetaDocIfReady();\n };\n\n //\n // countDocs\n //\n countDocs(txn, function (count) {\n docCount = count;\n storeMetaDocIfReady();\n });\n\n //\n // check blob support\n //\n if (!blobSupportPromise) {\n // make sure blob support is only checked once\n blobSupportPromise = checkBlobSupport(txn);\n }\n\n blobSupportPromise.then(function (val) {\n blobSupport = val;\n completeSetup();\n });\n\n // only when the metadata put transaction has completed,\n // consider the setup done\n txn.oncomplete = function () {\n storedMetaDoc = true;\n completeSetup();\n };\n txn.onabort = idbError(callback);\n };\n\n req.onerror = function () {\n var msg = 'Failed to open indexedDB, are you in private browsing mode?';\n guardedConsole('error', msg);\n callback(createError(IDB_ERROR, msg));\n };\n}\n\nIdbPouch.valid = function () {\n // Issue #2533, we finally gave up on doing bug\n // detection instead of browser sniffing. Safari brought us\n // to our knees.\n var isSafari = typeof openDatabase !== 'undefined' &&\n /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) &&\n !/Chrome/.test(navigator.userAgent) &&\n !/BlackBerry/.test(navigator.platform);\n\n // Safari <10.1 does not meet our requirements for IDB support (#5572)\n // since Safari 10.1 shipped with fetch, we can use that to detect it\n var hasFetch = typeof fetch === 'function' &&\n fetch.toString().indexOf('[native code') !== -1;\n\n // On Firefox SecurityError is thrown while referencing indexedDB if cookies\n // are not allowed. `typeof indexedDB` also triggers the error.\n try {\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n};\n\nfunction tryStorageOption(dbName, storage) {\n try { // option only available in Firefox 26+\n return indexedDB.open(dbName, {\n version: ADAPTER_VERSION,\n storage: storage\n });\n } catch (err) {\n return indexedDB.open(dbName, ADAPTER_VERSION);\n }\n}\n\nfunction IDBPouch (PouchDB) {\n PouchDB.adapter('idb', IdbPouch, true);\n}\n\n//\n// Parsing hex strings. Yeah.\n//\n// So basically we need this because of a bug in WebSQL:\n// https://code.google.com/p/chromium/issues/detail?id=422690\n// https://bugs.webkit.org/show_bug.cgi?id=137637\n//\n// UTF-8 and UTF-16 are provided as separate functions\n// for meager performance improvements\n//\n\nfunction decodeUtf8(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction hexToInt(charCode) {\n // '0'-'9' is 48-57\n // 'A'-'F' is 65-70\n // SQLite will only give us uppercase hex\n return charCode < 65 ? (charCode - 48) : (charCode - 55);\n}\n\n\n// Example:\n// pragma encoding=utf8;\n// select hex('A');\n// returns '41'\nfunction parseHexUtf8(str, start, end) {\n var result = '';\n while (start < end) {\n result += String.fromCharCode(\n (hexToInt(str.charCodeAt(start++)) << 4) |\n hexToInt(str.charCodeAt(start++)));\n }\n return result;\n}\n\n// Example:\n// pragma encoding=utf16;\n// select hex('A');\n// returns '4100'\n// notice that the 00 comes after the 41 (i.e. it's swizzled)\nfunction parseHexUtf16(str, start, end) {\n var result = '';\n while (start < end) {\n // UTF-16, so swizzle the bytes\n result += String.fromCharCode(\n (hexToInt(str.charCodeAt(start + 2)) << 12) |\n (hexToInt(str.charCodeAt(start + 3)) << 8) |\n (hexToInt(str.charCodeAt(start)) << 4) |\n hexToInt(str.charCodeAt(start + 1)));\n start += 4;\n }\n return result;\n}\n\nfunction parseHexString(str, encoding) {\n if (encoding === 'UTF-8') {\n return decodeUtf8(parseHexUtf8(str, 0, str.length));\n } else {\n return parseHexUtf16(str, 0, str.length);\n }\n}\n\nfunction quote(str) {\n return \"'\" + str + \"'\";\n}\n\nvar ADAPTER_VERSION$1 = 7; // used to manage migrations\n\n// The object stores created for each database\n// DOC_STORE stores the document meta data, its revision history and state\nvar DOC_STORE$1 = quote('document-store');\n// BY_SEQ_STORE stores a particular version of a document, keyed by its\n// sequence id\nvar BY_SEQ_STORE$1 = quote('by-sequence');\n// Where we store attachments\nvar ATTACH_STORE$1 = quote('attach-store');\nvar LOCAL_STORE$1 = quote('local-store');\nvar META_STORE$1 = quote('metadata-store');\n// where we store many-to-many relations between attachment\n// digests and seqs\nvar ATTACH_AND_SEQ_STORE$1 = quote('attach-seq-store');\n\n// escapeBlob and unescapeBlob are workarounds for a websql bug:\n// https://code.google.com/p/chromium/issues/detail?id=422690\n// https://bugs.webkit.org/show_bug.cgi?id=137637\n// The goal is to never actually insert the \\u0000 character\n// in the database.\nfunction escapeBlob(str) {\n return str\n .replace(/\\u0002/g, '\\u0002\\u0002')\n .replace(/\\u0001/g, '\\u0001\\u0002')\n .replace(/\\u0000/g, '\\u0001\\u0001');\n}\n\nfunction unescapeBlob(str) {\n return str\n .replace(/\\u0001\\u0001/g, '\\u0000')\n .replace(/\\u0001\\u0002/g, '\\u0001')\n .replace(/\\u0002\\u0002/g, '\\u0002');\n}\n\nfunction stringifyDoc(doc) {\n // don't bother storing the id/rev. it uses lots of space,\n // in persistent map/reduce especially\n delete doc._id;\n delete doc._rev;\n return JSON.stringify(doc);\n}\n\nfunction unstringifyDoc(doc, id, rev$$1) {\n doc = JSON.parse(doc);\n doc._id = id;\n doc._rev = rev$$1;\n return doc;\n}\n\n// question mark groups IN queries, e.g. 3 -> '(?,?,?)'\nfunction qMarks(num) {\n var s = '(';\n while (num--) {\n s += '?';\n if (num) {\n s += ',';\n }\n }\n return s + ')';\n}\n\nfunction select(selector, table, joiner, where, orderBy) {\n return 'SELECT ' + selector + ' FROM ' +\n (typeof table === 'string' ? table : table.join(' JOIN ')) +\n (joiner ? (' ON ' + joiner) : '') +\n (where ? (' WHERE ' +\n (typeof where === 'string' ? where : where.join(' AND '))) : '') +\n (orderBy ? (' ORDER BY ' + orderBy) : '');\n}\n\nfunction compactRevs$1(revs, docId, tx) {\n\n if (!revs.length) {\n return;\n }\n\n var numDone = 0;\n var seqs = [];\n\n function checkDone() {\n if (++numDone === revs.length) { // done\n deleteOrphans();\n }\n }\n\n function deleteOrphans() {\n // find orphaned attachment digests\n\n if (!seqs.length) {\n return;\n }\n\n var sql = 'SELECT DISTINCT digest AS digest FROM ' +\n ATTACH_AND_SEQ_STORE$1 + ' WHERE seq IN ' + qMarks(seqs.length);\n\n tx.executeSql(sql, seqs, function (tx, res) {\n\n var digestsToCheck = [];\n for (var i = 0; i < res.rows.length; i++) {\n digestsToCheck.push(res.rows.item(i).digest);\n }\n if (!digestsToCheck.length) {\n return;\n }\n\n var sql = 'DELETE FROM ' + ATTACH_AND_SEQ_STORE$1 +\n ' WHERE seq IN (' +\n seqs.map(function () { return '?'; }).join(',') +\n ')';\n tx.executeSql(sql, seqs, function (tx) {\n\n var sql = 'SELECT digest FROM ' + ATTACH_AND_SEQ_STORE$1 +\n ' WHERE digest IN (' +\n digestsToCheck.map(function () { return '?'; }).join(',') +\n ')';\n tx.executeSql(sql, digestsToCheck, function (tx, res) {\n var nonOrphanedDigests = new ExportedSet();\n for (var i = 0; i < res.rows.length; i++) {\n nonOrphanedDigests.add(res.rows.item(i).digest);\n }\n digestsToCheck.forEach(function (digest) {\n if (nonOrphanedDigests.has(digest)) {\n return;\n }\n tx.executeSql(\n 'DELETE FROM ' + ATTACH_AND_SEQ_STORE$1 + ' WHERE digest=?',\n [digest]);\n tx.executeSql(\n 'DELETE FROM ' + ATTACH_STORE$1 + ' WHERE digest=?', [digest]);\n });\n });\n });\n });\n }\n\n // update by-seq and attach stores in parallel\n revs.forEach(function (rev$$1) {\n var sql = 'SELECT seq FROM ' + BY_SEQ_STORE$1 +\n ' WHERE doc_id=? AND rev=?';\n\n tx.executeSql(sql, [docId, rev$$1], function (tx, res) {\n if (!res.rows.length) { // already deleted\n return checkDone();\n }\n var seq = res.rows.item(0).seq;\n seqs.push(seq);\n\n tx.executeSql(\n 'DELETE FROM ' + BY_SEQ_STORE$1 + ' WHERE seq=?', [seq], checkDone);\n });\n });\n}\n\nfunction websqlError(callback) {\n return function (event) {\n guardedConsole('error', 'WebSQL threw an error', event);\n // event may actually be a SQLError object, so report is as such\n var errorNameMatch = event && event.constructor.toString()\n .match(/function ([^(]+)/);\n var errorName = (errorNameMatch && errorNameMatch[1]) || event.type;\n var errorReason = event.target || event.message;\n callback(createError(WSQ_ERROR, errorReason, errorName));\n };\n}\n\nfunction getSize(opts) {\n if ('size' in opts) {\n // triggers immediate popup in iOS, fixes #2347\n // e.g. 5000001 asks for 5 MB, 10000001 asks for 10 MB,\n return opts.size * 1000000;\n }\n // In iOS, doesn't matter as long as it's <= 5000000.\n // Except that if you request too much, our tests fail\n // because of the native \"do you accept?\" popup.\n // In Android <=4.3, this value is actually used as an\n // honest-to-god ceiling for data, so we need to\n // set it to a decently high number.\n var isAndroid = typeof navigator !== 'undefined' &&\n /Android/.test(navigator.userAgent);\n return isAndroid ? 5000000 : 1; // in PhantomJS, if you use 0 it will crash\n}\n\nfunction websqlBulkDocs(dbOpts, req, opts, api, db, websqlChanges, callback) {\n var newEdits = opts.new_edits;\n var userDocs = req.docs;\n\n // Parse the docs, give them a sequence number for the result\n var docInfos = userDocs.map(function (doc) {\n if (doc._id && isLocalId(doc._id)) {\n return doc;\n }\n var newDoc = parseDoc(doc, newEdits);\n return newDoc;\n });\n\n var docInfoErrors = docInfos.filter(function (docInfo) {\n return docInfo.error;\n });\n if (docInfoErrors.length) {\n return callback(docInfoErrors[0]);\n }\n\n var tx;\n var results = new Array(docInfos.length);\n var fetchedDocs = new ExportedMap();\n\n var preconditionErrored;\n function complete() {\n if (preconditionErrored) {\n return callback(preconditionErrored);\n }\n websqlChanges.notify(api._name);\n callback(null, results);\n }\n\n function verifyAttachment(digest, callback) {\n var sql = 'SELECT count(*) as cnt FROM ' + ATTACH_STORE$1 +\n ' WHERE digest=?';\n tx.executeSql(sql, [digest], function (tx, result) {\n if (result.rows.item(0).cnt === 0) {\n var err = createError(MISSING_STUB,\n 'unknown stub attachment with digest ' +\n digest);\n callback(err);\n } else {\n callback();\n }\n });\n }\n\n function verifyAttachments(finish) {\n var digests = [];\n docInfos.forEach(function (docInfo) {\n if (docInfo.data && docInfo.data._attachments) {\n Object.keys(docInfo.data._attachments).forEach(function (filename) {\n var att = docInfo.data._attachments[filename];\n if (att.stub) {\n digests.push(att.digest);\n }\n });\n }\n });\n if (!digests.length) {\n return finish();\n }\n var numDone = 0;\n var err;\n\n function checkDone() {\n if (++numDone === digests.length) {\n finish(err);\n }\n }\n digests.forEach(function (digest) {\n verifyAttachment(digest, function (attErr) {\n if (attErr && !err) {\n err = attErr;\n }\n checkDone();\n });\n });\n }\n\n function writeDoc(docInfo, winningRev$$1, winningRevIsDeleted, newRevIsDeleted,\n isUpdate, delta, resultsIdx, callback) {\n\n function finish() {\n var data = docInfo.data;\n var deletedInt = newRevIsDeleted ? 1 : 0;\n\n var id = data._id;\n var rev = data._rev;\n var json = stringifyDoc(data);\n var sql = 'INSERT INTO ' + BY_SEQ_STORE$1 +\n ' (doc_id, rev, json, deleted) VALUES (?, ?, ?, ?);';\n var sqlArgs = [id, rev, json, deletedInt];\n\n // map seqs to attachment digests, which\n // we will need later during compaction\n function insertAttachmentMappings(seq, callback) {\n var attsAdded = 0;\n var attsToAdd = Object.keys(data._attachments || {});\n\n if (!attsToAdd.length) {\n return callback();\n }\n function checkDone() {\n if (++attsAdded === attsToAdd.length) {\n callback();\n }\n return false; // ack handling a constraint error\n }\n function add(att) {\n var sql = 'INSERT INTO ' + ATTACH_AND_SEQ_STORE$1 +\n ' (digest, seq) VALUES (?,?)';\n var sqlArgs = [data._attachments[att].digest, seq];\n tx.executeSql(sql, sqlArgs, checkDone, checkDone);\n // second callback is for a constaint error, which we ignore\n // because this docid/rev has already been associated with\n // the digest (e.g. when new_edits == false)\n }\n for (var i = 0; i < attsToAdd.length; i++) {\n add(attsToAdd[i]); // do in parallel\n }\n }\n\n tx.executeSql(sql, sqlArgs, function (tx, result) {\n var seq = result.insertId;\n insertAttachmentMappings(seq, function () {\n dataWritten(tx, seq);\n });\n }, function () {\n // constraint error, recover by updating instead (see #1638)\n var fetchSql = select('seq', BY_SEQ_STORE$1, null,\n 'doc_id=? AND rev=?');\n tx.executeSql(fetchSql, [id, rev], function (tx, res) {\n var seq = res.rows.item(0).seq;\n var sql = 'UPDATE ' + BY_SEQ_STORE$1 +\n ' SET json=?, deleted=? WHERE doc_id=? AND rev=?;';\n var sqlArgs = [json, deletedInt, id, rev];\n tx.executeSql(sql, sqlArgs, function (tx) {\n insertAttachmentMappings(seq, function () {\n dataWritten(tx, seq);\n });\n });\n });\n return false; // ack that we've handled the error\n });\n }\n\n function collectResults(attachmentErr) {\n if (!err) {\n if (attachmentErr) {\n err = attachmentErr;\n callback(err);\n } else if (recv === attachments.length) {\n finish();\n }\n }\n }\n\n var err = null;\n var recv = 0;\n\n docInfo.data._id = docInfo.metadata.id;\n docInfo.data._rev = docInfo.metadata.rev;\n var attachments = Object.keys(docInfo.data._attachments || {});\n\n\n if (newRevIsDeleted) {\n docInfo.data._deleted = true;\n }\n\n function attachmentSaved(err) {\n recv++;\n collectResults(err);\n }\n\n attachments.forEach(function (key) {\n var att = docInfo.data._attachments[key];\n if (!att.stub) {\n var data = att.data;\n delete att.data;\n att.revpos = parseInt(winningRev$$1, 10);\n var digest = att.digest;\n saveAttachment(digest, data, attachmentSaved);\n } else {\n recv++;\n collectResults();\n }\n });\n\n if (!attachments.length) {\n finish();\n }\n\n function dataWritten(tx, seq) {\n var id = docInfo.metadata.id;\n\n var revsToCompact = docInfo.stemmedRevs || [];\n if (isUpdate && api.auto_compaction) {\n revsToCompact = compactTree(docInfo.metadata).concat(revsToCompact);\n }\n if (revsToCompact.length) {\n compactRevs$1(revsToCompact, id, tx);\n }\n\n docInfo.metadata.seq = seq;\n var rev = docInfo.metadata.rev;\n delete docInfo.metadata.rev;\n\n var sql = isUpdate ?\n 'UPDATE ' + DOC_STORE$1 +\n ' SET json=?, max_seq=?, winningseq=' +\n '(SELECT seq FROM ' + BY_SEQ_STORE$1 +\n ' WHERE doc_id=' + DOC_STORE$1 + '.id AND rev=?) WHERE id=?'\n : 'INSERT INTO ' + DOC_STORE$1 +\n ' (id, winningseq, max_seq, json) VALUES (?,?,?,?);';\n var metadataStr = safeJsonStringify(docInfo.metadata);\n var params = isUpdate ?\n [metadataStr, seq, winningRev$$1, id] :\n [id, seq, seq, metadataStr];\n tx.executeSql(sql, params, function () {\n results[resultsIdx] = {\n ok: true,\n id: docInfo.metadata.id,\n rev: rev\n };\n fetchedDocs.set(id, docInfo.metadata);\n callback();\n });\n }\n }\n\n function websqlProcessDocs() {\n processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs, tx,\n results, writeDoc, opts);\n }\n\n function fetchExistingDocs(callback) {\n if (!docInfos.length) {\n return callback();\n }\n\n var numFetched = 0;\n\n function checkDone() {\n if (++numFetched === docInfos.length) {\n callback();\n }\n }\n\n docInfos.forEach(function (docInfo) {\n if (docInfo._id && isLocalId(docInfo._id)) {\n return checkDone(); // skip local docs\n }\n var id = docInfo.metadata.id;\n tx.executeSql('SELECT json FROM ' + DOC_STORE$1 +\n ' WHERE id = ?', [id], function (tx, result) {\n if (result.rows.length) {\n var metadata = safeJsonParse(result.rows.item(0).json);\n fetchedDocs.set(id, metadata);\n }\n checkDone();\n });\n });\n }\n\n function saveAttachment(digest, data, callback) {\n var sql = 'SELECT digest FROM ' + ATTACH_STORE$1 + ' WHERE digest=?';\n tx.executeSql(sql, [digest], function (tx, result) {\n if (result.rows.length) { // attachment already exists\n return callback();\n }\n // we could just insert before selecting and catch the error,\n // but my hunch is that it's cheaper not to serialize the blob\n // from JS to C if we don't have to (TODO: confirm this)\n sql = 'INSERT INTO ' + ATTACH_STORE$1 +\n ' (digest, body, escaped) VALUES (?,?,1)';\n tx.executeSql(sql, [digest, escapeBlob(data)], function () {\n callback();\n }, function () {\n // ignore constaint errors, means it already exists\n callback();\n return false; // ack we handled the error\n });\n });\n }\n\n preprocessAttachments(docInfos, 'binary', function (err) {\n if (err) {\n return callback(err);\n }\n db.transaction(function (txn) {\n tx = txn;\n verifyAttachments(function (err) {\n if (err) {\n preconditionErrored = err;\n } else {\n fetchExistingDocs(websqlProcessDocs);\n }\n });\n }, websqlError(callback), complete);\n });\n}\n\nvar cachedDatabases = new ExportedMap();\n\n// openDatabase passed in through opts (e.g. for node-websql)\nfunction openDatabaseWithOpts(opts) {\n return opts.websql(opts.name, opts.version, opts.description, opts.size);\n}\n\nfunction openDBSafely(opts) {\n try {\n return {\n db: openDatabaseWithOpts(opts)\n };\n } catch (err) {\n return {\n error: err\n };\n }\n}\n\nfunction openDB(opts) {\n var cachedResult = cachedDatabases.get(opts.name);\n if (!cachedResult) {\n cachedResult = openDBSafely(opts);\n cachedDatabases.set(opts.name, cachedResult);\n }\n return cachedResult;\n}\n\nvar websqlChanges = new Changes();\n\nfunction fetchAttachmentsIfNecessary$1(doc, opts, api, txn, cb) {\n var attachments = Object.keys(doc._attachments || {});\n if (!attachments.length) {\n return cb && cb();\n }\n var numDone = 0;\n\n function checkDone() {\n if (++numDone === attachments.length && cb) {\n cb();\n }\n }\n\n function fetchAttachment(doc, att) {\n var attObj = doc._attachments[att];\n var attOpts = {binary: opts.binary, ctx: txn};\n api._getAttachment(doc._id, att, attObj, attOpts, function (_, data) {\n doc._attachments[att] = $inject_Object_assign(\n pick(attObj, ['digest', 'content_type']),\n { data: data }\n );\n checkDone();\n });\n }\n\n attachments.forEach(function (att) {\n if (opts.attachments && opts.include_docs) {\n fetchAttachment(doc, att);\n } else {\n doc._attachments[att].stub = true;\n checkDone();\n }\n });\n}\n\nvar POUCH_VERSION = 1;\n\n// these indexes cover the ground for most allDocs queries\nvar BY_SEQ_STORE_DELETED_INDEX_SQL =\n 'CREATE INDEX IF NOT EXISTS \\'by-seq-deleted-idx\\' ON ' +\n BY_SEQ_STORE$1 + ' (seq, deleted)';\nvar BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL =\n 'CREATE UNIQUE INDEX IF NOT EXISTS \\'by-seq-doc-id-rev\\' ON ' +\n BY_SEQ_STORE$1 + ' (doc_id, rev)';\nvar DOC_STORE_WINNINGSEQ_INDEX_SQL =\n 'CREATE INDEX IF NOT EXISTS \\'doc-winningseq-idx\\' ON ' +\n DOC_STORE$1 + ' (winningseq)';\nvar ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL =\n 'CREATE INDEX IF NOT EXISTS \\'attach-seq-seq-idx\\' ON ' +\n ATTACH_AND_SEQ_STORE$1 + ' (seq)';\nvar ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL =\n 'CREATE UNIQUE INDEX IF NOT EXISTS \\'attach-seq-digest-idx\\' ON ' +\n ATTACH_AND_SEQ_STORE$1 + ' (digest, seq)';\n\nvar DOC_STORE_AND_BY_SEQ_JOINER = BY_SEQ_STORE$1 +\n '.seq = ' + DOC_STORE$1 + '.winningseq';\n\nvar SELECT_DOCS = BY_SEQ_STORE$1 + '.seq AS seq, ' +\n BY_SEQ_STORE$1 + '.deleted AS deleted, ' +\n BY_SEQ_STORE$1 + '.json AS data, ' +\n BY_SEQ_STORE$1 + '.rev AS rev, ' +\n DOC_STORE$1 + '.json AS metadata';\n\nfunction WebSqlPouch(opts, callback) {\n var api = this;\n var instanceId = null;\n var size = getSize(opts);\n var idRequests = [];\n var encoding;\n\n api._name = opts.name;\n\n // extend the options here, because sqlite plugin has a ton of options\n // and they are constantly changing, so it's more prudent to allow anything\n var websqlOpts = $inject_Object_assign({}, opts, {\n version: POUCH_VERSION,\n description: opts.name,\n size: size\n });\n var openDBResult = openDB(websqlOpts);\n if (openDBResult.error) {\n return websqlError(callback)(openDBResult.error);\n }\n var db = openDBResult.db;\n if (typeof db.readTransaction !== 'function') {\n // doesn't exist in sqlite plugin\n db.readTransaction = db.transaction;\n }\n\n function dbCreated() {\n // note the db name in case the browser upgrades to idb\n if (hasLocalStorage()) {\n window.localStorage['_pouch__websqldb_' + api._name] = true;\n }\n callback(null, api);\n }\n\n // In this migration, we added the 'deleted' and 'local' columns to the\n // by-seq and doc store tables.\n // To preserve existing user data, we re-process all the existing JSON\n // and add these values.\n // Called migration2 because it corresponds to adapter version (db_version) #2\n function runMigration2(tx, callback) {\n // index used for the join in the allDocs query\n tx.executeSql(DOC_STORE_WINNINGSEQ_INDEX_SQL);\n\n tx.executeSql('ALTER TABLE ' + BY_SEQ_STORE$1 +\n ' ADD COLUMN deleted TINYINT(1) DEFAULT 0', [], function () {\n tx.executeSql(BY_SEQ_STORE_DELETED_INDEX_SQL);\n tx.executeSql('ALTER TABLE ' + DOC_STORE$1 +\n ' ADD COLUMN local TINYINT(1) DEFAULT 0', [], function () {\n tx.executeSql('CREATE INDEX IF NOT EXISTS \\'doc-store-local-idx\\' ON ' +\n DOC_STORE$1 + ' (local, id)');\n\n var sql = 'SELECT ' + DOC_STORE$1 + '.winningseq AS seq, ' + DOC_STORE$1 +\n '.json AS metadata FROM ' + BY_SEQ_STORE$1 + ' JOIN ' + DOC_STORE$1 +\n ' ON ' + BY_SEQ_STORE$1 + '.seq = ' + DOC_STORE$1 + '.winningseq';\n\n tx.executeSql(sql, [], function (tx, result) {\n\n var deleted = [];\n var local = [];\n\n for (var i = 0; i < result.rows.length; i++) {\n var item = result.rows.item(i);\n var seq = item.seq;\n var metadata = JSON.parse(item.metadata);\n if (isDeleted(metadata)) {\n deleted.push(seq);\n }\n if (isLocalId(metadata.id)) {\n local.push(metadata.id);\n }\n }\n tx.executeSql('UPDATE ' + DOC_STORE$1 + 'SET local = 1 WHERE id IN ' +\n qMarks(local.length), local, function () {\n tx.executeSql('UPDATE ' + BY_SEQ_STORE$1 +\n ' SET deleted = 1 WHERE seq IN ' +\n qMarks(deleted.length), deleted, callback);\n });\n });\n });\n });\n }\n\n // in this migration, we make all the local docs unversioned\n function runMigration3(tx, callback) {\n var local = 'CREATE TABLE IF NOT EXISTS ' + LOCAL_STORE$1 +\n ' (id UNIQUE, rev, json)';\n tx.executeSql(local, [], function () {\n var sql = 'SELECT ' + DOC_STORE$1 + '.id AS id, ' +\n BY_SEQ_STORE$1 + '.json AS data ' +\n 'FROM ' + BY_SEQ_STORE$1 + ' JOIN ' +\n DOC_STORE$1 + ' ON ' + BY_SEQ_STORE$1 + '.seq = ' +\n DOC_STORE$1 + '.winningseq WHERE local = 1';\n tx.executeSql(sql, [], function (tx, res) {\n var rows = [];\n for (var i = 0; i < res.rows.length; i++) {\n rows.push(res.rows.item(i));\n }\n function doNext() {\n if (!rows.length) {\n return callback(tx);\n }\n var row = rows.shift();\n var rev$$1 = JSON.parse(row.data)._rev;\n tx.executeSql('INSERT INTO ' + LOCAL_STORE$1 +\n ' (id, rev, json) VALUES (?,?,?)',\n [row.id, rev$$1, row.data], function (tx) {\n tx.executeSql('DELETE FROM ' + DOC_STORE$1 + ' WHERE id=?',\n [row.id], function (tx) {\n tx.executeSql('DELETE FROM ' + BY_SEQ_STORE$1 + ' WHERE seq=?',\n [row.seq], function () {\n doNext();\n });\n });\n });\n }\n doNext();\n });\n });\n }\n\n // in this migration, we remove doc_id_rev and just use rev\n function runMigration4(tx, callback) {\n\n function updateRows(rows) {\n function doNext() {\n if (!rows.length) {\n return callback(tx);\n }\n var row = rows.shift();\n var doc_id_rev = parseHexString(row.hex, encoding);\n var idx = doc_id_rev.lastIndexOf('::');\n var doc_id = doc_id_rev.substring(0, idx);\n var rev$$1 = doc_id_rev.substring(idx + 2);\n var sql = 'UPDATE ' + BY_SEQ_STORE$1 +\n ' SET doc_id=?, rev=? WHERE doc_id_rev=?';\n tx.executeSql(sql, [doc_id, rev$$1, doc_id_rev], function () {\n doNext();\n });\n }\n doNext();\n }\n\n var sql = 'ALTER TABLE ' + BY_SEQ_STORE$1 + ' ADD COLUMN doc_id';\n tx.executeSql(sql, [], function (tx) {\n var sql = 'ALTER TABLE ' + BY_SEQ_STORE$1 + ' ADD COLUMN rev';\n tx.executeSql(sql, [], function (tx) {\n tx.executeSql(BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL, [], function (tx) {\n var sql = 'SELECT hex(doc_id_rev) as hex FROM ' + BY_SEQ_STORE$1;\n tx.executeSql(sql, [], function (tx, res) {\n var rows = [];\n for (var i = 0; i < res.rows.length; i++) {\n rows.push(res.rows.item(i));\n }\n updateRows(rows);\n });\n });\n });\n });\n }\n\n // in this migration, we add the attach_and_seq table\n // for issue #2818\n function runMigration5(tx, callback) {\n\n function migrateAttsAndSeqs(tx) {\n // need to actually populate the table. this is the expensive part,\n // so as an optimization, check first that this database even\n // contains attachments\n var sql = 'SELECT COUNT(*) AS cnt FROM ' + ATTACH_STORE$1;\n tx.executeSql(sql, [], function (tx, res) {\n var count = res.rows.item(0).cnt;\n if (!count) {\n return callback(tx);\n }\n\n var offset = 0;\n var pageSize = 10;\n function nextPage() {\n var sql = select(\n SELECT_DOCS + ', ' + DOC_STORE$1 + '.id AS id',\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE_AND_BY_SEQ_JOINER,\n null,\n DOC_STORE$1 + '.id '\n );\n sql += ' LIMIT ' + pageSize + ' OFFSET ' + offset;\n offset += pageSize;\n tx.executeSql(sql, [], function (tx, res) {\n if (!res.rows.length) {\n return callback(tx);\n }\n var digestSeqs = {};\n function addDigestSeq(digest, seq) {\n // uniq digest/seq pairs, just in case there are dups\n var seqs = digestSeqs[digest] = (digestSeqs[digest] || []);\n if (seqs.indexOf(seq) === -1) {\n seqs.push(seq);\n }\n }\n for (var i = 0; i < res.rows.length; i++) {\n var row = res.rows.item(i);\n var doc = unstringifyDoc(row.data, row.id, row.rev);\n var atts = Object.keys(doc._attachments || {});\n for (var j = 0; j < atts.length; j++) {\n var att = doc._attachments[atts[j]];\n addDigestSeq(att.digest, row.seq);\n }\n }\n var digestSeqPairs = [];\n Object.keys(digestSeqs).forEach(function (digest) {\n var seqs = digestSeqs[digest];\n seqs.forEach(function (seq) {\n digestSeqPairs.push([digest, seq]);\n });\n });\n if (!digestSeqPairs.length) {\n return nextPage();\n }\n var numDone = 0;\n digestSeqPairs.forEach(function (pair) {\n var sql = 'INSERT INTO ' + ATTACH_AND_SEQ_STORE$1 +\n ' (digest, seq) VALUES (?,?)';\n tx.executeSql(sql, pair, function () {\n if (++numDone === digestSeqPairs.length) {\n nextPage();\n }\n });\n });\n });\n }\n nextPage();\n });\n }\n\n var attachAndRev = 'CREATE TABLE IF NOT EXISTS ' +\n ATTACH_AND_SEQ_STORE$1 + ' (digest, seq INTEGER)';\n tx.executeSql(attachAndRev, [], function (tx) {\n tx.executeSql(\n ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL, [], function (tx) {\n tx.executeSql(\n ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL, [],\n migrateAttsAndSeqs);\n });\n });\n }\n\n // in this migration, we use escapeBlob() and unescapeBlob()\n // instead of reading out the binary as HEX, which is slow\n function runMigration6(tx, callback) {\n var sql = 'ALTER TABLE ' + ATTACH_STORE$1 +\n ' ADD COLUMN escaped TINYINT(1) DEFAULT 0';\n tx.executeSql(sql, [], callback);\n }\n\n // issue #3136, in this migration we need a \"latest seq\" as well\n // as the \"winning seq\" in the doc store\n function runMigration7(tx, callback) {\n var sql = 'ALTER TABLE ' + DOC_STORE$1 +\n ' ADD COLUMN max_seq INTEGER';\n tx.executeSql(sql, [], function (tx) {\n var sql = 'UPDATE ' + DOC_STORE$1 + ' SET max_seq=(SELECT MAX(seq) FROM ' +\n BY_SEQ_STORE$1 + ' WHERE doc_id=id)';\n tx.executeSql(sql, [], function (tx) {\n // add unique index after filling, else we'll get a constraint\n // error when we do the ALTER TABLE\n var sql =\n 'CREATE UNIQUE INDEX IF NOT EXISTS \\'doc-max-seq-idx\\' ON ' +\n DOC_STORE$1 + ' (max_seq)';\n tx.executeSql(sql, [], callback);\n });\n });\n }\n\n function checkEncoding(tx, cb) {\n // UTF-8 on chrome/android, UTF-16 on safari < 7.1\n tx.executeSql('SELECT HEX(\"a\") AS hex', [], function (tx, res) {\n var hex = res.rows.item(0).hex;\n encoding = hex.length === 2 ? 'UTF-8' : 'UTF-16';\n cb();\n }\n );\n }\n\n function onGetInstanceId() {\n while (idRequests.length > 0) {\n var idCallback = idRequests.pop();\n idCallback(null, instanceId);\n }\n }\n\n function onGetVersion(tx, dbVersion) {\n if (dbVersion === 0) {\n // initial schema\n\n var meta = 'CREATE TABLE IF NOT EXISTS ' + META_STORE$1 +\n ' (dbid, db_version INTEGER)';\n var attach = 'CREATE TABLE IF NOT EXISTS ' + ATTACH_STORE$1 +\n ' (digest UNIQUE, escaped TINYINT(1), body BLOB)';\n var attachAndRev = 'CREATE TABLE IF NOT EXISTS ' +\n ATTACH_AND_SEQ_STORE$1 + ' (digest, seq INTEGER)';\n // TODO: migrate winningseq to INTEGER\n var doc = 'CREATE TABLE IF NOT EXISTS ' + DOC_STORE$1 +\n ' (id unique, json, winningseq, max_seq INTEGER UNIQUE)';\n var seq = 'CREATE TABLE IF NOT EXISTS ' + BY_SEQ_STORE$1 +\n ' (seq INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +\n 'json, deleted TINYINT(1), doc_id, rev)';\n var local = 'CREATE TABLE IF NOT EXISTS ' + LOCAL_STORE$1 +\n ' (id UNIQUE, rev, json)';\n\n // creates\n tx.executeSql(attach);\n tx.executeSql(local);\n tx.executeSql(attachAndRev, [], function () {\n tx.executeSql(ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL);\n tx.executeSql(ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL);\n });\n tx.executeSql(doc, [], function () {\n tx.executeSql(DOC_STORE_WINNINGSEQ_INDEX_SQL);\n tx.executeSql(seq, [], function () {\n tx.executeSql(BY_SEQ_STORE_DELETED_INDEX_SQL);\n tx.executeSql(BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL);\n tx.executeSql(meta, [], function () {\n // mark the db version, and new dbid\n var initSeq = 'INSERT INTO ' + META_STORE$1 +\n ' (db_version, dbid) VALUES (?,?)';\n instanceId = uuid();\n var initSeqArgs = [ADAPTER_VERSION$1, instanceId];\n tx.executeSql(initSeq, initSeqArgs, function () {\n onGetInstanceId();\n });\n });\n });\n });\n } else { // version > 0\n\n var setupDone = function () {\n var migrated = dbVersion < ADAPTER_VERSION$1;\n if (migrated) {\n // update the db version within this transaction\n tx.executeSql('UPDATE ' + META_STORE$1 + ' SET db_version = ' +\n ADAPTER_VERSION$1);\n }\n // notify db.id() callers\n var sql = 'SELECT dbid FROM ' + META_STORE$1;\n tx.executeSql(sql, [], function (tx, result) {\n instanceId = result.rows.item(0).dbid;\n onGetInstanceId();\n });\n };\n\n // would love to use promises here, but then websql\n // ends the transaction early\n var tasks = [\n runMigration2,\n runMigration3,\n runMigration4,\n runMigration5,\n runMigration6,\n runMigration7,\n setupDone\n ];\n\n // run each migration sequentially\n var i = dbVersion;\n var nextMigration = function (tx) {\n tasks[i - 1](tx, nextMigration);\n i++;\n };\n nextMigration(tx);\n }\n }\n\n function setup() {\n db.transaction(function (tx) {\n // first check the encoding\n checkEncoding(tx, function () {\n // then get the version\n fetchVersion(tx);\n });\n }, websqlError(callback), dbCreated);\n }\n\n function fetchVersion(tx) {\n var sql = 'SELECT sql FROM sqlite_master WHERE tbl_name = ' + META_STORE$1;\n tx.executeSql(sql, [], function (tx, result) {\n if (!result.rows.length) {\n // database hasn't even been created yet (version 0)\n onGetVersion(tx, 0);\n } else if (!/db_version/.test(result.rows.item(0).sql)) {\n // table was created, but without the new db_version column,\n // so add it.\n tx.executeSql('ALTER TABLE ' + META_STORE$1 +\n ' ADD COLUMN db_version INTEGER', [], function () {\n // before version 2, this column didn't even exist\n onGetVersion(tx, 1);\n });\n } else { // column exists, we can safely get it\n tx.executeSql('SELECT db_version FROM ' + META_STORE$1,\n [], function (tx, result) {\n var dbVersion = result.rows.item(0).db_version;\n onGetVersion(tx, dbVersion);\n });\n }\n });\n }\n\n setup();\n\n function getMaxSeq(tx, callback) {\n var sql = 'SELECT MAX(seq) AS seq FROM ' + BY_SEQ_STORE$1;\n tx.executeSql(sql, [], function (tx, res) {\n var updateSeq = res.rows.item(0).seq || 0;\n callback(updateSeq);\n });\n }\n\n function countDocs(tx, callback) {\n // count the total rows\n var sql = select(\n 'COUNT(' + DOC_STORE$1 + '.id) AS \\'num\\'',\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE_AND_BY_SEQ_JOINER,\n BY_SEQ_STORE$1 + '.deleted=0');\n\n tx.executeSql(sql, [], function (tx, result) {\n callback(result.rows.item(0).num);\n });\n }\n\n api._remote = false;\n api.type = function () {\n return 'websql';\n };\n\n api._id = toPromise(function (callback) {\n callback(null, instanceId);\n });\n\n api._info = function (callback) {\n var seq;\n var docCount;\n db.readTransaction(function (tx) {\n getMaxSeq(tx, function (theSeq) {\n seq = theSeq;\n });\n countDocs(tx, function (theDocCount) {\n docCount = theDocCount;\n });\n }, websqlError(callback), function () {\n callback(null, {\n doc_count: docCount,\n update_seq: seq,\n websql_encoding: encoding\n });\n });\n };\n\n api._bulkDocs = function (req, reqOpts, callback) {\n websqlBulkDocs(opts, req, reqOpts, api, db, websqlChanges, callback);\n };\n\n function latest$$1(tx, id, rev$$1, callback, finish) {\n var sql = select(\n SELECT_DOCS,\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE_AND_BY_SEQ_JOINER,\n DOC_STORE$1 + '.id=?');\n var sqlArgs = [id];\n\n tx.executeSql(sql, sqlArgs, function (a, results) {\n if (!results.rows.length) {\n var err = createError(MISSING_DOC, 'missing');\n return finish(err);\n }\n var item = results.rows.item(0);\n var metadata = safeJsonParse(item.metadata);\n callback(latest(rev$$1, metadata));\n });\n }\n\n api._get = function (id, opts, callback) {\n var doc;\n var metadata;\n var tx = opts.ctx;\n if (!tx) {\n return db.readTransaction(function (txn) {\n api._get(id, $inject_Object_assign({ctx: txn}, opts), callback);\n });\n }\n\n function finish(err) {\n callback(err, {doc: doc, metadata: metadata, ctx: tx});\n }\n\n var sql;\n var sqlArgs;\n\n if (!opts.rev) {\n sql = select(\n SELECT_DOCS,\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE_AND_BY_SEQ_JOINER,\n DOC_STORE$1 + '.id=?');\n sqlArgs = [id];\n } else if (opts.latest) {\n latest$$1(tx, id, opts.rev, function (latestRev) {\n opts.latest = false;\n opts.rev = latestRev;\n api._get(id, opts, callback);\n }, finish);\n return;\n } else {\n sql = select(\n SELECT_DOCS,\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE$1 + '.id=' + BY_SEQ_STORE$1 + '.doc_id',\n [BY_SEQ_STORE$1 + '.doc_id=?', BY_SEQ_STORE$1 + '.rev=?']);\n sqlArgs = [id, opts.rev];\n }\n\n tx.executeSql(sql, sqlArgs, function (a, results) {\n if (!results.rows.length) {\n var missingErr = createError(MISSING_DOC, 'missing');\n return finish(missingErr);\n }\n var item = results.rows.item(0);\n metadata = safeJsonParse(item.metadata);\n if (item.deleted && !opts.rev) {\n var deletedErr = createError(MISSING_DOC, 'deleted');\n return finish(deletedErr);\n }\n doc = unstringifyDoc(item.data, metadata.id, item.rev);\n finish();\n });\n };\n\n api._allDocs = function (opts, callback) {\n var results = [];\n var totalRows;\n var updateSeq;\n\n var start = 'startkey' in opts ? opts.startkey : false;\n var end = 'endkey' in opts ? opts.endkey : false;\n var key = 'key' in opts ? opts.key : false;\n var keys = 'keys' in opts ? opts.keys : false;\n var descending = 'descending' in opts ? opts.descending : false;\n var limit = 'limit' in opts ? opts.limit : -1;\n var offset = 'skip' in opts ? opts.skip : 0;\n var inclusiveEnd = opts.inclusive_end !== false;\n \n var sqlArgs = [];\n var criteria = [];\n\n if (keys) {\n var destinctKeys = [];\n var bindingStr = \"\";\n keys.forEach(function (key) {\n if (destinctKeys.indexOf(key) === -1) {\n destinctKeys.push(key);\n bindingStr += '?,';\n }\n });\n bindingStr = bindingStr.substring(0, bindingStr.length - 1); // keys is never empty\n criteria.push(DOC_STORE$1 + '.id IN (' + bindingStr + ')');\n sqlArgs = sqlArgs.concat(destinctKeys);\n } else if (key !== false) {\n criteria.push(DOC_STORE$1 + '.id = ?');\n sqlArgs.push(key);\n } else if (start !== false || end !== false) {\n if (start !== false) {\n criteria.push(DOC_STORE$1 + '.id ' + (descending ? '<=' : '>=') + ' ?');\n sqlArgs.push(start);\n }\n if (end !== false) {\n var comparator = descending ? '>' : '<';\n if (inclusiveEnd) {\n comparator += '=';\n }\n criteria.push(DOC_STORE$1 + '.id ' + comparator + ' ?');\n sqlArgs.push(end);\n }\n if (key !== false) {\n criteria.push(DOC_STORE$1 + '.id = ?');\n sqlArgs.push(key);\n }\n }\n\n if (!keys) {\n // report deleted if keys are specified\n criteria.push(BY_SEQ_STORE$1 + '.deleted = 0');\n }\n\n db.readTransaction(function (tx) {\n // count the docs in parallel to other operations\n countDocs(tx, function (docCount) {\n totalRows = docCount;\n });\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n // get max sequence in parallel to other operations\n getMaxSeq(tx, function (theSeq) {\n updateSeq = theSeq;\n });\n }\n\n if (limit === 0) {\n return;\n }\n\n // do a single query to fetch the documents\n var sql = select(\n SELECT_DOCS,\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE_AND_BY_SEQ_JOINER,\n criteria,\n DOC_STORE$1 + '.id ' + (descending ? 'DESC' : 'ASC')\n );\n sql += ' LIMIT ' + limit + ' OFFSET ' + offset;\n\n tx.executeSql(sql, sqlArgs, function (tx, result) {\n for (var i = 0, l = result.rows.length; i < l; i++) {\n var item = result.rows.item(i);\n var metadata = safeJsonParse(item.metadata);\n var id = metadata.id;\n var data = unstringifyDoc(item.data, id, item.rev);\n var winningRev$$1 = data._rev;\n var doc = {\n id: id,\n key: id,\n value: {rev: winningRev$$1}\n };\n if (opts.include_docs) {\n doc.doc = data;\n doc.doc._rev = winningRev$$1;\n if (opts.conflicts) {\n var conflicts = collectConflicts(metadata);\n if (conflicts.length) {\n doc.doc._conflicts = conflicts;\n }\n }\n fetchAttachmentsIfNecessary$1(doc.doc, opts, api, tx);\n }\n if (item.deleted) {\n if (keys) {\n doc.value.deleted = true;\n doc.doc = null;\n } else {\n // propably should not happen\n continue;\n }\n }\n if (!keys) {\n results.push(doc);\n } else {\n var index = keys.indexOf(id, index);\n do {\n results[index] = doc;\n index = keys.indexOf(id, index + 1);\n } while (index > -1 && index < keys.length);\n }\n }\n if (keys) {\n keys.forEach(function (key, index) {\n if (!results[index]) {\n results[index] = {key: key, error: 'not_found'};\n }\n });\n }\n });\n }, websqlError(callback), function () {\n var returnVal = {\n total_rows: totalRows,\n offset: opts.skip,\n rows: results\n };\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n returnVal.update_seq = updateSeq;\n }\n callback(null, returnVal);\n });\n };\n\n api._changes = function (opts) {\n opts = clone(opts);\n\n if (opts.continuous) {\n var id = api._name + ':' + uuid();\n websqlChanges.addListener(api._name, id, api, opts);\n websqlChanges.notify(api._name);\n return {\n cancel: function () {\n websqlChanges.removeListener(api._name, id);\n }\n };\n }\n\n var descending = opts.descending;\n\n // Ignore the `since` parameter when `descending` is true\n opts.since = opts.since && !descending ? opts.since : 0;\n\n var limit = 'limit' in opts ? opts.limit : -1;\n if (limit === 0) {\n limit = 1; // per CouchDB _changes spec\n }\n\n var returnDocs;\n if ('return_docs' in opts) {\n returnDocs = opts.return_docs;\n } else if ('returnDocs' in opts) {\n // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n returnDocs = opts.returnDocs;\n } else {\n returnDocs = true;\n }\n var results = [];\n var numResults = 0;\n\n function fetchChanges() {\n\n var selectStmt =\n DOC_STORE$1 + '.json AS metadata, ' +\n DOC_STORE$1 + '.max_seq AS maxSeq, ' +\n BY_SEQ_STORE$1 + '.json AS winningDoc, ' +\n BY_SEQ_STORE$1 + '.rev AS winningRev ';\n\n var from = DOC_STORE$1 + ' JOIN ' + BY_SEQ_STORE$1;\n\n var joiner = DOC_STORE$1 + '.id=' + BY_SEQ_STORE$1 + '.doc_id' +\n ' AND ' + DOC_STORE$1 + '.winningseq=' + BY_SEQ_STORE$1 + '.seq';\n\n var criteria = ['maxSeq > ?'];\n var sqlArgs = [opts.since];\n\n if (opts.doc_ids) {\n criteria.push(DOC_STORE$1 + '.id IN ' + qMarks(opts.doc_ids.length));\n sqlArgs = sqlArgs.concat(opts.doc_ids);\n }\n\n var orderBy = 'maxSeq ' + (descending ? 'DESC' : 'ASC');\n\n var sql = select(selectStmt, from, joiner, criteria, orderBy);\n\n var filter = filterChange(opts);\n if (!opts.view && !opts.filter) {\n // we can just limit in the query\n sql += ' LIMIT ' + limit;\n }\n\n var lastSeq = opts.since || 0;\n db.readTransaction(function (tx) {\n tx.executeSql(sql, sqlArgs, function (tx, result) {\n function reportChange(change) {\n return function () {\n opts.onChange(change);\n };\n }\n for (var i = 0, l = result.rows.length; i < l; i++) {\n var item = result.rows.item(i);\n var metadata = safeJsonParse(item.metadata);\n lastSeq = item.maxSeq;\n\n var doc = unstringifyDoc(item.winningDoc, metadata.id,\n item.winningRev);\n var change = opts.processChange(doc, metadata, opts);\n change.seq = item.maxSeq;\n\n var filtered = filter(change);\n if (typeof filtered === 'object') {\n return opts.complete(filtered);\n }\n\n if (filtered) {\n numResults++;\n if (returnDocs) {\n results.push(change);\n }\n // process the attachment immediately\n // for the benefit of live listeners\n if (opts.attachments && opts.include_docs) {\n fetchAttachmentsIfNecessary$1(doc, opts, api, tx,\n reportChange(change));\n } else {\n reportChange(change)();\n }\n }\n if (numResults === limit) {\n break;\n }\n }\n });\n }, websqlError(opts.complete), function () {\n if (!opts.continuous) {\n opts.complete(null, {\n results: results,\n last_seq: lastSeq\n });\n }\n });\n }\n\n fetchChanges();\n };\n\n api._close = function (callback) {\n //WebSQL databases do not need to be closed\n callback();\n };\n\n api._getAttachment = function (docId, attachId, attachment, opts, callback) {\n var res;\n var tx = opts.ctx;\n var digest = attachment.digest;\n var type = attachment.content_type;\n var sql = 'SELECT escaped, ' +\n 'CASE WHEN escaped = 1 THEN body ELSE HEX(body) END AS body FROM ' +\n ATTACH_STORE$1 + ' WHERE digest=?';\n tx.executeSql(sql, [digest], function (tx, result) {\n // websql has a bug where \\u0000 causes early truncation in strings\n // and blobs. to work around this, we used to use the hex() function,\n // but that's not performant. after migration 6, we remove \\u0000\n // and add it back in afterwards\n var item = result.rows.item(0);\n var data = item.escaped ? unescapeBlob(item.body) :\n parseHexString(item.body, encoding);\n if (opts.binary) {\n res = binStringToBluffer(data, type);\n } else {\n res = thisBtoa(data);\n }\n callback(null, res);\n });\n };\n\n api._getRevisionTree = function (docId, callback) {\n db.readTransaction(function (tx) {\n var sql = 'SELECT json AS metadata FROM ' + DOC_STORE$1 + ' WHERE id = ?';\n tx.executeSql(sql, [docId], function (tx, result) {\n if (!result.rows.length) {\n callback(createError(MISSING_DOC));\n } else {\n var data = safeJsonParse(result.rows.item(0).metadata);\n callback(null, data.rev_tree);\n }\n });\n });\n };\n\n api._doCompaction = function (docId, revs, callback) {\n if (!revs.length) {\n return callback();\n }\n db.transaction(function (tx) {\n\n // update doc store\n var sql = 'SELECT json AS metadata FROM ' + DOC_STORE$1 + ' WHERE id = ?';\n tx.executeSql(sql, [docId], function (tx, result) {\n var metadata = safeJsonParse(result.rows.item(0).metadata);\n traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n revHash, ctx, opts) {\n var rev$$1 = pos + '-' + revHash;\n if (revs.indexOf(rev$$1) !== -1) {\n opts.status = 'missing';\n }\n });\n\n var sql = 'UPDATE ' + DOC_STORE$1 + ' SET json = ? WHERE id = ?';\n tx.executeSql(sql, [safeJsonStringify(metadata), docId]);\n });\n\n compactRevs$1(revs, docId, tx);\n }, websqlError(callback), function () {\n callback();\n });\n };\n\n api._getLocal = function (id, callback) {\n db.readTransaction(function (tx) {\n var sql = 'SELECT json, rev FROM ' + LOCAL_STORE$1 + ' WHERE id=?';\n tx.executeSql(sql, [id], function (tx, res) {\n if (res.rows.length) {\n var item = res.rows.item(0);\n var doc = unstringifyDoc(item.json, id, item.rev);\n callback(null, doc);\n } else {\n callback(createError(MISSING_DOC));\n }\n });\n });\n };\n\n api._putLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n delete doc._revisions; // ignore this, trust the rev\n var oldRev = doc._rev;\n var id = doc._id;\n var newRev;\n if (!oldRev) {\n newRev = doc._rev = '0-1';\n } else {\n newRev = doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);\n }\n var json = stringifyDoc(doc);\n\n var ret;\n function putLocal(tx) {\n var sql;\n var values;\n if (oldRev) {\n sql = 'UPDATE ' + LOCAL_STORE$1 + ' SET rev=?, json=? ' +\n 'WHERE id=? AND rev=?';\n values = [newRev, json, id, oldRev];\n } else {\n sql = 'INSERT INTO ' + LOCAL_STORE$1 + ' (id, rev, json) VALUES (?,?,?)';\n values = [id, newRev, json];\n }\n tx.executeSql(sql, values, function (tx, res) {\n if (res.rowsAffected) {\n ret = {ok: true, id: id, rev: newRev};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n } else {\n callback(createError(REV_CONFLICT));\n }\n }, function () {\n callback(createError(REV_CONFLICT));\n return false; // ack that we handled the error\n });\n }\n\n if (opts.ctx) {\n putLocal(opts.ctx);\n } else {\n db.transaction(putLocal, websqlError(callback), function () {\n if (ret) {\n callback(null, ret);\n }\n });\n }\n };\n\n api._removeLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var ret;\n\n function removeLocal(tx) {\n var sql = 'DELETE FROM ' + LOCAL_STORE$1 + ' WHERE id=? AND rev=?';\n var params = [doc._id, doc._rev];\n tx.executeSql(sql, params, function (tx, res) {\n if (!res.rowsAffected) {\n return callback(createError(MISSING_DOC));\n }\n ret = {ok: true, id: doc._id, rev: '0-0'};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n });\n }\n\n if (opts.ctx) {\n removeLocal(opts.ctx);\n } else {\n db.transaction(removeLocal, websqlError(callback), function () {\n if (ret) {\n callback(null, ret);\n }\n });\n }\n };\n\n api._destroy = function (opts, callback) {\n websqlChanges.removeAllListeners(api._name);\n db.transaction(function (tx) {\n var stores = [DOC_STORE$1, BY_SEQ_STORE$1, ATTACH_STORE$1, META_STORE$1,\n LOCAL_STORE$1, ATTACH_AND_SEQ_STORE$1];\n stores.forEach(function (store) {\n tx.executeSql('DROP TABLE IF EXISTS ' + store, []);\n });\n }, websqlError(callback), function () {\n if (hasLocalStorage()) {\n delete window.localStorage['_pouch__websqldb_' + api._name];\n delete window.localStorage[api._name];\n }\n callback(null, {'ok': true});\n });\n };\n}\n\nfunction canOpenTestDB() {\n try {\n openDatabase('_pouch_validate_websql', 1, '', 1);\n return true;\n } catch (err) {\n return false;\n }\n}\n\n// WKWebView had a bug where WebSQL would throw a DOM Exception 18\n// (see https://bugs.webkit.org/show_bug.cgi?id=137760 and\n// https://github.com/pouchdb/pouchdb/issues/5079)\n// This has been fixed in latest WebKit, so we try to detect it here.\nfunction isValidWebSQL() {\n // WKWebView UA:\n // Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X)\n // AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13C75\n // Chrome for iOS UA:\n // Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en)\n // AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60\n // Mobile/9B206 Safari/7534.48.3\n // Firefox for iOS UA:\n // Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4\n // (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4\n\n // indexedDB is null on some UIWebViews and undefined in others\n // see: https://bugs.webkit.org/show_bug.cgi?id=137034\n if (typeof indexedDB === 'undefined' || indexedDB === null ||\n !/iP(hone|od|ad)/.test(navigator.userAgent)) {\n // definitely not WKWebView, avoid creating an unnecessary database\n return true;\n }\n // Cache the result in LocalStorage. Reason we do this is because if we\n // call openDatabase() too many times, Safari craps out in SauceLabs and\n // starts throwing DOM Exception 14s.\n var hasLS = hasLocalStorage();\n // Include user agent in the hash, so that if Safari is upgraded, we don't\n // continually think it's broken.\n var localStorageKey = '_pouch__websqldb_valid_' + navigator.userAgent;\n if (hasLS && localStorage[localStorageKey]) {\n return localStorage[localStorageKey] === '1';\n }\n var openedTestDB = canOpenTestDB();\n if (hasLS) {\n localStorage[localStorageKey] = openedTestDB ? '1' : '0';\n }\n return openedTestDB;\n}\n\nfunction valid() {\n if (typeof openDatabase !== 'function') {\n return false;\n }\n return isValidWebSQL();\n}\n\nfunction openDB$2(name, version, description, size) {\n // Traditional WebSQL API\n return openDatabase(name, version, description, size);\n}\n\nfunction WebSQLPouch(opts, callback) {\n var msg = 'WebSQL is deprecated and will be removed in future releases of PouchDB. ' +\n 'Please migrate to IndexedDB: https://pouchdb.com/2018/01/23/pouchdb-6.4.2.html';\n guardedConsole('warn', msg);\n var _opts = $inject_Object_assign({\n websql: openDB$2\n }, opts);\n\n WebSqlPouch.call(this, _opts, callback);\n}\n\nWebSQLPouch.valid = valid;\n\nWebSQLPouch.use_prefix = true;\n\nfunction WebSqlPouch$1 (PouchDB) {\n PouchDB.adapter('websql', WebSQLPouch, true);\n}\n\n/* global fetch */\n/* global Headers */\nfunction wrappedFetch() {\n var wrappedPromise = {};\n\n var promise = new PouchPromise(function (resolve, reject) {\n wrappedPromise.resolve = resolve;\n wrappedPromise.reject = reject;\n });\n\n var args = new Array(arguments.length);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n wrappedPromise.promise = promise;\n\n PouchPromise.resolve().then(function () {\n return fetch.apply(null, args);\n }).then(function (response) {\n wrappedPromise.resolve(response);\n })[\"catch\"](function (error) {\n wrappedPromise.reject(error);\n });\n\n return wrappedPromise;\n}\n\nfunction fetchRequest(options, callback) {\n var wrappedPromise, timer, response;\n\n var headers = new Headers();\n\n var fetchOptions = {\n method: options.method,\n credentials: 'include',\n headers: headers\n };\n\n if (options.json) {\n headers.set('Accept', 'application/json');\n headers.set('Content-Type', options.headers['Content-Type'] ||\n 'application/json');\n }\n\n if (options.body &&\n options.processData &&\n typeof options.body !== 'string') {\n fetchOptions.body = JSON.stringify(options.body);\n } else if ('body' in options) {\n fetchOptions.body = options.body;\n } else {\n fetchOptions.body = null;\n }\n\n Object.keys(options.headers).forEach(function (key) {\n if (options.headers.hasOwnProperty(key)) {\n headers.set(key, options.headers[key]);\n }\n });\n\n wrappedPromise = wrappedFetch(options.url, fetchOptions);\n\n if (options.timeout > 0) {\n timer = setTimeout(function () {\n wrappedPromise.reject(new Error('Load timeout for resource: ' +\n options.url));\n }, options.timeout);\n }\n\n wrappedPromise.promise.then(function (fetchResponse) {\n response = {\n statusCode: fetchResponse.status\n };\n\n if (options.timeout > 0) {\n clearTimeout(timer);\n }\n\n if (response.statusCode >= 200 && response.statusCode < 300) {\n return options.binary ? fetchResponse.blob() : fetchResponse.text();\n }\n\n return fetchResponse.json();\n }).then(function (result) {\n if (response.statusCode >= 200 && response.statusCode < 300) {\n callback(null, response, result);\n } else {\n result.status = response.statusCode;\n callback(result);\n }\n })[\"catch\"](function (error) {\n if (!error) {\n // this happens when the listener is canceled\n error = new Error('canceled');\n }\n callback(error);\n });\n\n return {abort: wrappedPromise.reject};\n}\n\nfunction xhRequest(options, callback) {\n\n var xhr, timer;\n var timedout = false;\n\n var abortReq = function () {\n xhr.abort();\n cleanUp();\n };\n\n var timeoutReq = function () {\n timedout = true;\n xhr.abort();\n cleanUp();\n };\n\n var ret = {abort: abortReq};\n\n var cleanUp = function () {\n clearTimeout(timer);\n ret.abort = function () {};\n if (xhr) {\n xhr.onprogress = undefined;\n if (xhr.upload) {\n xhr.upload.onprogress = undefined;\n }\n xhr.onreadystatechange = undefined;\n xhr = undefined;\n }\n };\n\n if (options.xhr) {\n xhr = new options.xhr();\n } else {\n xhr = new XMLHttpRequest();\n }\n\n try {\n xhr.open(options.method, options.url);\n } catch (exception) {\n return callback(new Error(exception.name || 'Url is invalid'));\n }\n\n xhr.withCredentials = ('withCredentials' in options) ?\n options.withCredentials : true;\n\n if (options.method === 'GET') {\n delete options.headers['Content-Type'];\n } else if (options.json) {\n options.headers.Accept = 'application/json';\n options.headers['Content-Type'] = options.headers['Content-Type'] ||\n 'application/json';\n if (options.body &&\n options.processData &&\n typeof options.body !== \"string\") {\n options.body = JSON.stringify(options.body);\n }\n }\n\n if (options.binary) {\n xhr.responseType = 'arraybuffer';\n }\n\n if (!('body' in options)) {\n options.body = null;\n }\n\n for (var key in options.headers) {\n if (options.headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, options.headers[key]);\n }\n }\n\n if (options.timeout > 0) {\n timer = setTimeout(timeoutReq, options.timeout);\n xhr.onprogress = function () {\n clearTimeout(timer);\n if (xhr.readyState !== 4) {\n timer = setTimeout(timeoutReq, options.timeout);\n }\n };\n if (typeof xhr.upload !== 'undefined') { // does not exist in ie9\n xhr.upload.onprogress = xhr.onprogress;\n }\n }\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState !== 4) {\n return;\n }\n\n var response = {\n statusCode: xhr.status\n };\n\n if (xhr.status >= 200 && xhr.status < 300) {\n var data;\n if (options.binary) {\n data = createBlob([xhr.response || ''], {\n type: xhr.getResponseHeader('Content-Type')\n });\n } else {\n data = xhr.responseText;\n }\n callback(null, response, data);\n } else {\n var err = {};\n if (timedout) {\n err = new Error('ETIMEDOUT');\n err.code = 'ETIMEDOUT';\n } else if (typeof xhr.response === 'string' && xhr.response !== '') {\n try {\n err = JSON.parse(xhr.response);\n } catch (e) {}\n }\n\n err.status = xhr.status;\n\n callback(err);\n }\n cleanUp();\n };\n\n if (options.body && (options.body instanceof Blob)) {\n readAsArrayBuffer(options.body, function (arrayBuffer) {\n xhr.send(arrayBuffer);\n });\n } else {\n xhr.send(options.body);\n }\n\n return ret;\n}\n\nfunction testXhr() {\n try {\n new XMLHttpRequest();\n return true;\n } catch (err) {\n return false;\n }\n}\n\nvar hasXhr = testXhr();\n\nfunction ajax(options, callback) {\n if (!false && (hasXhr || options.xhr)) {\n return xhRequest(options, callback);\n } else {\n return fetchRequest(options, callback);\n }\n}\n\n// the blob already has a type; do nothing\n\nfunction defaultBody() {\n return '';\n}\n\nfunction ajaxCore(options, callback) {\n\n options = clone(options);\n\n var defaultOptions = {\n method : \"GET\",\n headers: {},\n json: true,\n processData: true,\n timeout: 10000,\n cache: false\n };\n\n options = $inject_Object_assign(defaultOptions, options);\n\n function onSuccess(obj, resp, cb) {\n if (!options.binary && options.json && typeof obj === 'string') {\n /* istanbul ignore next */\n try {\n obj = JSON.parse(obj);\n } catch (e) {\n // Probably a malformed JSON from server\n return cb(e);\n }\n }\n if (Array.isArray(obj)) {\n obj = obj.map(function (v) {\n if (v.error || v.missing) {\n return generateErrorFromResponse(v);\n } else {\n return v;\n }\n });\n }\n if (options.binary) {\n \n }\n cb(null, obj, resp);\n }\n\n if (options.json) {\n if (!options.binary) {\n options.headers.Accept = 'application/json';\n }\n options.headers['Content-Type'] = options.headers['Content-Type'] ||\n 'application/json';\n }\n\n if (options.binary) {\n options.encoding = null;\n options.json = false;\n }\n\n if (!options.processData) {\n options.json = false;\n }\n\n return ajax(options, function (err, response, body) {\n\n if (err) {\n return callback(generateErrorFromResponse(err));\n }\n\n var error;\n var content_type = response.headers && response.headers['content-type'];\n var data = body || defaultBody();\n\n // CouchDB doesn't always return the right content-type for JSON data, so\n // we check for ^{ and }$ (ignoring leading/trailing whitespace)\n if (!options.binary && (options.json || !options.processData) &&\n typeof data !== 'object' &&\n (/json/.test(content_type) ||\n (/^[\\s]*\\{/.test(data) && /\\}[\\s]*$/.test(data)))) {\n try {\n data = JSON.parse(data.toString());\n } catch (e) {}\n }\n\n if (response.statusCode >= 200 && response.statusCode < 300) {\n onSuccess(data, response, callback);\n } else {\n error = generateErrorFromResponse(data);\n error.status = response.statusCode;\n callback(error);\n }\n });\n}\n\nfunction ajax$1(opts, callback) {\n\n // cache-buster, specifically designed to work around IE's aggressive caching\n // see http://www.dashbay.com/2011/05/internet-explorer-caches-ajax/\n // Also Safari caches POSTs, so we need to cache-bust those too.\n var ua = (navigator && navigator.userAgent) ?\n navigator.userAgent.toLowerCase() : '';\n\n var isSafari = ua.indexOf('safari') !== -1 && ua.indexOf('chrome') === -1;\n var isIE = ua.indexOf('msie') !== -1;\n var isTrident = ua.indexOf('trident') !== -1;\n var isEdge = ua.indexOf('edge') !== -1;\n\n // it appears the new version of safari also caches GETs,\n // see https://github.com/pouchdb/pouchdb/issues/5010\n var shouldCacheBust = (isSafari ||\n ((isIE || isTrident || isEdge) && opts.method === 'GET'));\n\n var cache = 'cache' in opts ? opts.cache : true;\n\n var isBlobUrl = /^blob:/.test(opts.url); // don't append nonces for blob URLs\n\n if (!isBlobUrl && (shouldCacheBust || !cache)) {\n var hasArgs = opts.url.indexOf('?') !== -1;\n opts.url += (hasArgs ? '&' : '?') + '_nonce=' + Date.now();\n }\n\n return ajaxCore(opts, callback);\n}\n\n// dead simple promise pool, inspired by https://github.com/timdp/es6-promise-pool\n// but much smaller in code size. limits the number of concurrent promises that are executed\n\n\nfunction pool(promiseFactories, limit) {\n return new PouchPromise(function (resolve, reject) {\n var running = 0;\n var current = 0;\n var done = 0;\n var len = promiseFactories.length;\n var err;\n\n function runNext() {\n running++;\n promiseFactories[current++]().then(onSuccess, onError);\n }\n\n function doNext() {\n if (++done === len) {\n /* istanbul ignore if */\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n } else {\n runNextBatch();\n }\n }\n\n function onSuccess() {\n running--;\n doNext();\n }\n\n /* istanbul ignore next */\n function onError(thisErr) {\n running--;\n err = err || thisErr;\n doNext();\n }\n\n function runNextBatch() {\n while (running < limit && current < len) {\n runNext();\n }\n }\n\n runNextBatch();\n });\n}\n\nvar CHANGES_BATCH_SIZE = 25;\nvar MAX_SIMULTANEOUS_REVS = 50;\nvar CHANGES_TIMEOUT_BUFFER = 5000;\nvar DEFAULT_HEARTBEAT = 10000;\n\nvar supportsBulkGetMap = {};\n\nfunction readAttachmentsAsBlobOrBuffer(row) {\n var doc = row.doc || row.ok;\n var atts = doc._attachments;\n if (!atts) {\n return;\n }\n Object.keys(atts).forEach(function (filename) {\n var att = atts[filename];\n att.data = b64ToBluffer(att.data, att.content_type);\n });\n}\n\nfunction encodeDocId(id) {\n if (/^_design/.test(id)) {\n return '_design/' + encodeURIComponent(id.slice(8));\n }\n if (/^_local/.test(id)) {\n return '_local/' + encodeURIComponent(id.slice(7));\n }\n return encodeURIComponent(id);\n}\n\nfunction preprocessAttachments$2(doc) {\n if (!doc._attachments || !Object.keys(doc._attachments)) {\n return PouchPromise.resolve();\n }\n\n return PouchPromise.all(Object.keys(doc._attachments).map(function (key) {\n var attachment = doc._attachments[key];\n if (attachment.data && typeof attachment.data !== 'string') {\n return new PouchPromise(function (resolve) {\n blobToBase64(attachment.data, resolve);\n }).then(function (b64) {\n attachment.data = b64;\n });\n }\n }));\n}\n\nfunction hasUrlPrefix(opts) {\n if (!opts.prefix) {\n return false;\n }\n\n var protocol = parseUri(opts.prefix).protocol;\n\n return protocol === 'http' || protocol === 'https';\n}\n\n// Get all the information you possibly can about the URI given by name and\n// return it as a suitable object.\nfunction getHost(name, opts) {\n\n // encode db name if opts.prefix is a url (#5574)\n if (hasUrlPrefix(opts)) {\n var dbName = opts.name.substr(opts.prefix.length);\n name = opts.prefix + encodeURIComponent(dbName);\n }\n\n // Prase the URI into all its little bits\n var uri = parseUri(name);\n\n // Store the user and password as a separate auth object\n if (uri.user || uri.password) {\n uri.auth = {username: uri.user, password: uri.password};\n }\n\n // Split the path part of the URI into parts using '/' as the delimiter\n // after removing any leading '/' and any trailing '/'\n var parts = uri.path.replace(/(^\\/|\\/$)/g, '').split('/');\n\n // Store the first part as the database name and remove it from the parts\n // array\n uri.db = parts.pop();\n // Prevent double encoding of URI component\n if (uri.db.indexOf('%') === -1) {\n uri.db = encodeURIComponent(uri.db);\n }\n\n // Restore the path by joining all the remaining parts (all the parts\n // except for the database name) with '/'s\n uri.path = parts.join('/');\n\n return uri;\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genDBUrl(opts, path) {\n return genUrl(opts, opts.db + '/' + path);\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genUrl(opts, path) {\n // If the host already has a path, then we need to have a path delimiter\n // Otherwise, the path delimiter is the empty string\n var pathDel = !opts.path ? '' : '/';\n\n // If the host already has a path, then we need to have a path delimiter\n // Otherwise, the path delimiter is the empty string\n return opts.protocol + '://' + opts.host +\n (opts.port ? (':' + opts.port) : '') +\n '/' + opts.path + pathDel + path;\n}\n\nfunction paramsToStr(params) {\n return '?' + Object.keys(params).map(function (k) {\n return k + '=' + encodeURIComponent(params[k]);\n }).join('&');\n}\n\n// Implements the PouchDB API for dealing with CouchDB instances over HTTP\nfunction HttpPouch(opts, callback) {\n\n // The functions that will be publicly available for HttpPouch\n var api = this;\n\n var host = getHost(opts.name, opts);\n var dbUrl = genDBUrl(host, '');\n\n opts = clone(opts);\n var ajaxOpts = opts.ajax || {};\n\n if (opts.auth || host.auth) {\n var nAuth = opts.auth || host.auth;\n var str = nAuth.username + ':' + nAuth.password;\n var token = thisBtoa(unescape(encodeURIComponent(str)));\n ajaxOpts.headers = ajaxOpts.headers || {};\n ajaxOpts.headers.Authorization = 'Basic ' + token;\n }\n\n // Not strictly necessary, but we do this because numerous tests\n // rely on swapping ajax in and out.\n api._ajax = ajax$1;\n\n function ajax(userOpts, options, callback) {\n var reqAjax = (userOpts || {}).ajax || {};\n var reqOpts = $inject_Object_assign(clone(ajaxOpts), reqAjax, options);\n var defaultHeaders = clone(ajaxOpts.headers || {});\n reqOpts.headers = $inject_Object_assign(defaultHeaders, reqAjax.headers,\n options.headers || {});\n /* istanbul ignore if */\n if (api.constructor.listeners('debug').length) {\n api.constructor.emit('debug', ['http', reqOpts.method, reqOpts.url]);\n }\n return api._ajax(reqOpts, callback);\n }\n\n function ajaxPromise(userOpts, opts) {\n return new PouchPromise(function (resolve, reject) {\n ajax(userOpts, opts, function (err, res) {\n /* istanbul ignore if */\n if (err) {\n return reject(err);\n }\n resolve(res);\n });\n });\n }\n\n function adapterFun$$1(name, fun) {\n return adapterFun(name, getArguments(function (args) {\n setup().then(function () {\n return fun.apply(this, args);\n })[\"catch\"](function (e) {\n var callback = args.pop();\n callback(e);\n });\n }));\n }\n\n var setupPromise;\n\n function setup() {\n // TODO: Remove `skipSetup` in favor of `skip_setup` in a future release\n if (opts.skipSetup || opts.skip_setup) {\n return PouchPromise.resolve();\n }\n\n // If there is a setup in process or previous successful setup\n // done then we will use that\n // If previous setups have been rejected we will try again\n if (setupPromise) {\n return setupPromise;\n }\n\n var checkExists = {method: 'GET', url: dbUrl};\n setupPromise = ajaxPromise({}, checkExists)[\"catch\"](function (err) {\n if (err && err.status && err.status === 404) {\n // Doesnt exist, create it\n explainError(404, 'PouchDB is just detecting if the remote exists.');\n return ajaxPromise({}, {method: 'PUT', url: dbUrl});\n } else {\n return PouchPromise.reject(err);\n }\n })[\"catch\"](function (err) {\n // If we try to create a database that already exists, skipped in\n // istanbul since its catching a race condition.\n /* istanbul ignore if */\n if (err && err.status && err.status === 412) {\n return true;\n }\n return PouchPromise.reject(err);\n });\n\n setupPromise[\"catch\"](function () {\n setupPromise = null;\n });\n\n return setupPromise;\n }\n\n nextTick(function () {\n callback(null, api);\n });\n\n api._remote = true;\n /* istanbul ignore next */\n api.type = function () {\n return 'http';\n };\n\n api.id = adapterFun$$1('id', function (callback) {\n ajax({}, {method: 'GET', url: genUrl(host, '')}, function (err, result) {\n var uuid$$1 = (result && result.uuid) ?\n (result.uuid + host.db) : genDBUrl(host, '');\n callback(null, uuid$$1);\n });\n });\n\n api.request = adapterFun$$1('request', function (options, callback) {\n options.url = genDBUrl(host, options.url);\n ajax({}, options, callback);\n });\n\n // Sends a POST request to the host calling the couchdb _compact function\n // version: The version of CouchDB it is running\n api.compact = adapterFun$$1('compact', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n ajax(opts, {\n url: genDBUrl(host, '_compact'),\n method: 'POST'\n }, function () {\n function ping() {\n api.info(function (err, res) {\n // CouchDB may send a \"compact_running:true\" if it's\n // already compacting. PouchDB Server doesn't.\n /* istanbul ignore else */\n if (res && !res.compact_running) {\n callback(null, {ok: true});\n } else {\n setTimeout(ping, opts.interval || 200);\n }\n });\n }\n // Ping the http if it's finished compaction\n ping();\n });\n });\n\n api.bulkGet = adapterFun('bulkGet', function (opts, callback) {\n var self = this;\n\n function doBulkGet(cb) {\n var params = {};\n if (opts.revs) {\n params.revs = true;\n }\n if (opts.attachments) {\n /* istanbul ignore next */\n params.attachments = true;\n }\n if (opts.latest) {\n params.latest = true;\n }\n ajax(opts, {\n url: genDBUrl(host, '_bulk_get' + paramsToStr(params)),\n method: 'POST',\n body: { docs: opts.docs}\n }, function (err, result) {\n if (!err && opts.attachments && opts.binary) {\n result.results.forEach(function (res) {\n res.docs.forEach(readAttachmentsAsBlobOrBuffer);\n });\n }\n cb(err, result);\n });\n }\n\n /* istanbul ignore next */\n function doBulkGetShim() {\n // avoid \"url too long error\" by splitting up into multiple requests\n var batchSize = MAX_SIMULTANEOUS_REVS;\n var numBatches = Math.ceil(opts.docs.length / batchSize);\n var numDone = 0;\n var results = new Array(numBatches);\n\n function onResult(batchNum) {\n return function (err, res) {\n // err is impossible because shim returns a list of errs in that case\n results[batchNum] = res.results;\n if (++numDone === numBatches) {\n callback(null, {results: flatten(results)});\n }\n };\n }\n\n for (var i = 0; i < numBatches; i++) {\n var subOpts = pick(opts, ['revs', 'attachments', 'binary', 'latest']);\n subOpts.ajax = ajaxOpts;\n subOpts.docs = opts.docs.slice(i * batchSize,\n Math.min(opts.docs.length, (i + 1) * batchSize));\n bulkGet(self, subOpts, onResult(i));\n }\n }\n\n // mark the whole database as either supporting or not supporting _bulk_get\n var dbUrl = genUrl(host, '');\n var supportsBulkGet = supportsBulkGetMap[dbUrl];\n\n /* istanbul ignore next */\n if (typeof supportsBulkGet !== 'boolean') {\n // check if this database supports _bulk_get\n doBulkGet(function (err, res) {\n if (err) {\n supportsBulkGetMap[dbUrl] = false;\n explainError(\n err.status,\n 'PouchDB is just detecting if the remote ' +\n 'supports the _bulk_get API.'\n );\n doBulkGetShim();\n } else {\n supportsBulkGetMap[dbUrl] = true;\n callback(null, res);\n }\n });\n } else if (supportsBulkGet) {\n doBulkGet(callback);\n } else {\n doBulkGetShim();\n }\n });\n\n // Calls GET on the host, which gets back a JSON string containing\n // couchdb: A welcome string\n // version: The version of CouchDB it is running\n api._info = function (callback) {\n setup().then(function () {\n ajax({}, {\n method: 'GET',\n url: genDBUrl(host, '')\n }, function (err, res) {\n /* istanbul ignore next */\n if (err) {\n return callback(err);\n }\n res.host = genDBUrl(host, '');\n callback(null, res);\n });\n })[\"catch\"](callback);\n };\n\n // Get the document with the given id from the database given by host.\n // The id could be solely the _id in the database, or it may be a\n // _design/ID or _local/ID path\n api.get = adapterFun$$1('get', function (id, opts, callback) {\n // If no options were given, set the callback to the second parameter\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n\n // List of parameters to add to the GET request\n var params = {};\n\n if (opts.revs) {\n params.revs = true;\n }\n\n if (opts.revs_info) {\n params.revs_info = true;\n }\n\n if (opts.latest) {\n params.latest = true;\n }\n\n if (opts.open_revs) {\n if (opts.open_revs !== \"all\") {\n opts.open_revs = JSON.stringify(opts.open_revs);\n }\n params.open_revs = opts.open_revs;\n }\n\n if (opts.rev) {\n params.rev = opts.rev;\n }\n\n if (opts.conflicts) {\n params.conflicts = opts.conflicts;\n }\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = opts.update_seq;\n }\n\n id = encodeDocId(id);\n\n // Set the options for the ajax call\n var options = {\n method: 'GET',\n url: genDBUrl(host, id + paramsToStr(params))\n };\n\n function fetchAttachments(doc) {\n var atts = doc._attachments;\n var filenames = atts && Object.keys(atts);\n if (!atts || !filenames.length) {\n return;\n }\n // we fetch these manually in separate XHRs, because\n // Sync Gateway would normally send it back as multipart/mixed,\n // which we cannot parse. Also, this is more efficient than\n // receiving attachments as base64-encoded strings.\n function fetch(filename) {\n var att = atts[filename];\n var path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +\n '?rev=' + doc._rev;\n return ajaxPromise(opts, {\n method: 'GET',\n url: genDBUrl(host, path),\n binary: true\n }).then(function (blob) {\n if (opts.binary) {\n return blob;\n }\n return new PouchPromise(function (resolve) {\n blobToBase64(blob, resolve);\n });\n }).then(function (data) {\n delete att.stub;\n delete att.length;\n att.data = data;\n });\n }\n\n var promiseFactories = filenames.map(function (filename) {\n return function () {\n return fetch(filename);\n };\n });\n\n // This limits the number of parallel xhr requests to 5 any time\n // to avoid issues with maximum browser request limits\n return pool(promiseFactories, 5);\n }\n\n function fetchAllAttachments(docOrDocs) {\n if (Array.isArray(docOrDocs)) {\n return PouchPromise.all(docOrDocs.map(function (doc) {\n if (doc.ok) {\n return fetchAttachments(doc.ok);\n }\n }));\n }\n return fetchAttachments(docOrDocs);\n }\n\n ajaxPromise(opts, options).then(function (res) {\n return PouchPromise.resolve().then(function () {\n if (opts.attachments) {\n return fetchAllAttachments(res);\n }\n }).then(function () {\n callback(null, res);\n });\n })[\"catch\"](function (e) {\n e.docId = id;\n callback(e);\n });\n });\n\n // Delete the document given by doc from the database given by host.\n api.remove = adapterFun$$1('remove',\n function (docOrId, optsOrRev, opts, callback) {\n var doc;\n if (typeof optsOrRev === 'string') {\n // id, rev, opts, callback style\n doc = {\n _id: docOrId,\n _rev: optsOrRev\n };\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n } else {\n // doc, opts, callback style\n doc = docOrId;\n if (typeof optsOrRev === 'function') {\n callback = optsOrRev;\n opts = {};\n } else {\n callback = opts;\n opts = optsOrRev;\n }\n }\n\n var rev$$1 = (doc._rev || opts.rev);\n\n // Delete the document\n ajax(opts, {\n method: 'DELETE',\n url: genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev$$1\n }, callback);\n });\n\n function encodeAttachmentId(attachmentId) {\n return attachmentId.split(\"/\").map(encodeURIComponent).join(\"/\");\n }\n\n // Get the attachment\n api.getAttachment =\n adapterFun$$1('getAttachment', function (docId, attachmentId, opts,\n callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var params = opts.rev ? ('?rev=' + opts.rev) : '';\n var url = genDBUrl(host, encodeDocId(docId)) + '/' +\n encodeAttachmentId(attachmentId) + params;\n ajax(opts, {\n method: 'GET',\n url: url,\n binary: true\n }, callback);\n });\n\n // Remove the attachment given by the id and rev\n api.removeAttachment =\n adapterFun$$1('removeAttachment', function (docId, attachmentId, rev$$1,\n callback) {\n\n var url = genDBUrl(host, encodeDocId(docId) + '/' +\n encodeAttachmentId(attachmentId)) + '?rev=' + rev$$1;\n\n ajax({}, {\n method: 'DELETE',\n url: url\n }, callback);\n });\n\n // Add the attachment given by blob and its contentType property\n // to the document with the given id, the revision given by rev, and\n // add it to the database given by host.\n api.putAttachment =\n adapterFun$$1('putAttachment', function (docId, attachmentId, rev$$1, blob,\n type, callback) {\n if (typeof type === 'function') {\n callback = type;\n type = blob;\n blob = rev$$1;\n rev$$1 = null;\n }\n var id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);\n var url = genDBUrl(host, id);\n if (rev$$1) {\n url += '?rev=' + rev$$1;\n }\n\n if (typeof blob === 'string') {\n // input is assumed to be a base64 string\n var binary;\n try {\n binary = thisAtob(blob);\n } catch (err) {\n return callback(createError(BAD_ARG,\n 'Attachment is not a valid base64 string'));\n }\n blob = binary ? binStringToBluffer(binary, type) : '';\n }\n\n var opts = {\n headers: {'Content-Type': type},\n method: 'PUT',\n url: url,\n processData: false,\n body: blob,\n timeout: ajaxOpts.timeout || 60000\n };\n // Add the attachment\n ajax({}, opts, callback);\n });\n\n // Update/create multiple documents given by req in the database\n // given by host.\n api._bulkDocs = function (req, opts, callback) {\n // If new_edits=false then it prevents the database from creating\n // new revision numbers for the documents. Instead it just uses\n // the old ones. This is used in database replication.\n req.new_edits = opts.new_edits;\n\n setup().then(function () {\n return PouchPromise.all(req.docs.map(preprocessAttachments$2));\n }).then(function () {\n // Update/create the documents\n ajax(opts, {\n method: 'POST',\n url: genDBUrl(host, '_bulk_docs'),\n timeout: opts.timeout,\n body: req\n }, function (err, results) {\n if (err) {\n return callback(err);\n }\n results.forEach(function (result) {\n result.ok = true; // smooths out cloudant not adding this\n });\n callback(null, results);\n });\n })[\"catch\"](callback);\n };\n\n\n // Update/create document\n api._put = function (doc, opts, callback) {\n setup().then(function () {\n return preprocessAttachments$2(doc);\n }).then(function () {\n // Update/create the document\n ajax(opts, {\n method: 'PUT',\n url: genDBUrl(host, encodeDocId(doc._id)),\n body: doc\n }, function (err, result) {\n if (err) {\n err.docId = doc && doc._id;\n return callback(err);\n }\n callback(null, result);\n });\n })[\"catch\"](callback);\n };\n\n\n // Get a listing of the documents in the database given\n // by host and ordered by increasing id.\n api.allDocs = adapterFun$$1('allDocs', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n\n // List of parameters to add to the GET request\n var params = {};\n var body;\n var method = 'GET';\n\n if (opts.conflicts) {\n params.conflicts = true;\n }\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = true;\n }\n\n if (opts.descending) {\n params.descending = true;\n }\n\n if (opts.include_docs) {\n params.include_docs = true;\n }\n\n // added in CouchDB 1.6.0\n if (opts.attachments) {\n params.attachments = true;\n }\n\n if (opts.key) {\n params.key = JSON.stringify(opts.key);\n }\n\n if (opts.start_key) {\n opts.startkey = opts.start_key;\n }\n\n if (opts.startkey) {\n params.startkey = JSON.stringify(opts.startkey);\n }\n\n if (opts.end_key) {\n opts.endkey = opts.end_key;\n }\n\n if (opts.endkey) {\n params.endkey = JSON.stringify(opts.endkey);\n }\n\n if (typeof opts.inclusive_end !== 'undefined') {\n params.inclusive_end = !!opts.inclusive_end;\n }\n\n if (typeof opts.limit !== 'undefined') {\n params.limit = opts.limit;\n }\n\n if (typeof opts.skip !== 'undefined') {\n params.skip = opts.skip;\n }\n\n var paramStr = paramsToStr(params);\n\n if (typeof opts.keys !== 'undefined') {\n method = 'POST';\n body = {keys: opts.keys};\n }\n\n // Get the document listing\n ajaxPromise(opts, {\n method: method,\n url: genDBUrl(host, '_all_docs' + paramStr),\n body: body\n }).then(function (res) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n res.rows.forEach(readAttachmentsAsBlobOrBuffer);\n }\n callback(null, res);\n })[\"catch\"](callback);\n });\n\n // Get a list of changes made to documents in the database given by host.\n // TODO According to the README, there should be two other methods here,\n // api.changes.addListener and api.changes.removeListener.\n api._changes = function (opts) {\n\n // We internally page the results of a changes request, this means\n // if there is a large set of changes to be returned we can start\n // processing them quicker instead of waiting on the entire\n // set of changes to return and attempting to process them at once\n var batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;\n\n opts = clone(opts);\n\n if (opts.continuous && !('heartbeat' in opts)) {\n opts.heartbeat = DEFAULT_HEARTBEAT;\n }\n\n var requestTimeout = ('timeout' in opts) ? opts.timeout :\n ('timeout' in ajaxOpts) ? ajaxOpts.timeout :\n 30 * 1000;\n\n // ensure CHANGES_TIMEOUT_BUFFER applies\n if ('timeout' in opts && opts.timeout &&\n (requestTimeout - opts.timeout) < CHANGES_TIMEOUT_BUFFER) {\n requestTimeout = opts.timeout + CHANGES_TIMEOUT_BUFFER;\n }\n\n if ('heartbeat' in opts && opts.heartbeat &&\n (requestTimeout - opts.heartbeat) < CHANGES_TIMEOUT_BUFFER) {\n requestTimeout = opts.heartbeat + CHANGES_TIMEOUT_BUFFER;\n }\n\n var params = {};\n if ('timeout' in opts && opts.timeout) {\n params.timeout = opts.timeout;\n }\n\n var limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;\n var returnDocs;\n if ('return_docs' in opts) {\n returnDocs = opts.return_docs;\n } else if ('returnDocs' in opts) {\n // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n returnDocs = opts.returnDocs;\n } else {\n returnDocs = true;\n }\n //\n var leftToFetch = limit;\n\n if (opts.style) {\n params.style = opts.style;\n }\n\n if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {\n params.include_docs = true;\n }\n\n if (opts.attachments) {\n params.attachments = true;\n }\n\n if (opts.continuous) {\n params.feed = 'longpoll';\n }\n\n if (opts.seq_interval) {\n params.seq_interval = opts.seq_interval;\n }\n\n if (opts.conflicts) {\n params.conflicts = true;\n }\n\n if (opts.descending) {\n params.descending = true;\n }\n \n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = true;\n }\n\n if ('heartbeat' in opts) {\n // If the heartbeat value is false, it disables the default heartbeat\n if (opts.heartbeat) {\n params.heartbeat = opts.heartbeat;\n }\n }\n\n if (opts.filter && typeof opts.filter === 'string') {\n params.filter = opts.filter;\n }\n\n if (opts.view && typeof opts.view === 'string') {\n params.filter = '_view';\n params.view = opts.view;\n }\n\n // If opts.query_params exists, pass it through to the changes request.\n // These parameters may be used by the filter on the source database.\n if (opts.query_params && typeof opts.query_params === 'object') {\n for (var param_name in opts.query_params) {\n /* istanbul ignore else */\n if (opts.query_params.hasOwnProperty(param_name)) {\n params[param_name] = opts.query_params[param_name];\n }\n }\n }\n\n var method = 'GET';\n var body;\n\n if (opts.doc_ids) {\n // set this automagically for the user; it's annoying that couchdb\n // requires both a \"filter\" and a \"doc_ids\" param.\n params.filter = '_doc_ids';\n method = 'POST';\n body = {doc_ids: opts.doc_ids };\n }\n /* istanbul ignore next */\n else if (opts.selector) {\n // set this automagically for the user, similar to above\n params.filter = '_selector';\n method = 'POST';\n body = {selector: opts.selector };\n }\n\n var xhr;\n var lastFetchedSeq;\n\n // Get all the changes starting wtih the one immediately after the\n // sequence number given by since.\n var fetch = function (since, callback) {\n if (opts.aborted) {\n return;\n }\n params.since = since;\n // \"since\" can be any kind of json object in Coudant/CouchDB 2.x\n /* istanbul ignore next */\n if (typeof params.since === \"object\") {\n params.since = JSON.stringify(params.since);\n }\n\n if (opts.descending) {\n if (limit) {\n params.limit = leftToFetch;\n }\n } else {\n params.limit = (!limit || leftToFetch > batchSize) ?\n batchSize : leftToFetch;\n }\n\n // Set the options for the ajax call\n var xhrOpts = {\n method: method,\n url: genDBUrl(host, '_changes' + paramsToStr(params)),\n timeout: requestTimeout,\n body: body\n };\n lastFetchedSeq = since;\n\n /* istanbul ignore if */\n if (opts.aborted) {\n return;\n }\n\n // Get the changes\n setup().then(function () {\n xhr = ajax(opts, xhrOpts, callback);\n })[\"catch\"](callback);\n };\n\n // If opts.since exists, get all the changes from the sequence\n // number given by opts.since. Otherwise, get all the changes\n // from the sequence number 0.\n var results = {results: []};\n\n var fetched = function (err, res) {\n if (opts.aborted) {\n return;\n }\n var raw_results_length = 0;\n // If the result of the ajax call (res) contains changes (res.results)\n if (res && res.results) {\n raw_results_length = res.results.length;\n results.last_seq = res.last_seq;\n var pending = null;\n var lastSeq = null;\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof res.pending === 'number') {\n pending = res.pending;\n }\n if (typeof results.last_seq === 'string' || typeof results.last_seq === 'number') {\n lastSeq = results.last_seq;\n }\n // For each change\n var req = {};\n req.query = opts.query_params;\n res.results = res.results.filter(function (c) {\n leftToFetch--;\n var ret = filterChange(opts)(c);\n if (ret) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n readAttachmentsAsBlobOrBuffer(c);\n }\n if (returnDocs) {\n results.results.push(c);\n }\n opts.onChange(c, pending, lastSeq);\n }\n return ret;\n });\n } else if (err) {\n // In case of an error, stop listening for changes and call\n // opts.complete\n opts.aborted = true;\n opts.complete(err);\n return;\n }\n\n // The changes feed may have timed out with no results\n // if so reuse last update sequence\n if (res && res.last_seq) {\n lastFetchedSeq = res.last_seq;\n }\n\n var finished = (limit && leftToFetch <= 0) ||\n (res && raw_results_length < batchSize) ||\n (opts.descending);\n\n if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {\n // Queue a call to fetch again with the newest sequence number\n nextTick(function () { fetch(lastFetchedSeq, fetched); });\n } else {\n // We're done, call the callback\n opts.complete(null, results);\n }\n };\n\n fetch(opts.since || 0, fetched);\n\n // Return a method to cancel this method from processing any more\n return {\n cancel: function () {\n opts.aborted = true;\n if (xhr) {\n xhr.abort();\n }\n }\n };\n };\n\n // Given a set of document/revision IDs (given by req), tets the subset of\n // those that do NOT correspond to revisions stored in the database.\n // See http://wiki.apache.org/couchdb/HttpPostRevsDiff\n api.revsDiff = adapterFun$$1('revsDiff', function (req, opts, callback) {\n // If no options were given, set the callback to be the second parameter\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n // Get the missing document/revision IDs\n ajax(opts, {\n method: 'POST',\n url: genDBUrl(host, '_revs_diff'),\n body: req\n }, callback);\n });\n\n api._close = function (callback) {\n callback();\n };\n\n api._destroy = function (options, callback) {\n ajax(options, {\n url: genDBUrl(host, ''),\n method: 'DELETE'\n }, function (err, resp) {\n if (err && err.status && err.status !== 404) {\n return callback(err);\n }\n callback(null, resp);\n });\n };\n}\n\n// HttpPouch is a valid adapter.\nHttpPouch.valid = function () {\n return true;\n};\n\nfunction HttpPouch$1 (PouchDB) {\n PouchDB.adapter('http', HttpPouch, false);\n PouchDB.adapter('https', HttpPouch, false);\n}\n\nfunction QueryParseError(message) {\n this.status = 400;\n this.name = 'query_parse_error';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, QueryParseError);\n } catch (e) {}\n}\n\ninherits(QueryParseError, Error);\n\nfunction NotFoundError(message) {\n this.status = 404;\n this.name = 'not_found';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, NotFoundError);\n } catch (e) {}\n}\n\ninherits(NotFoundError, Error);\n\nfunction BuiltInError(message) {\n this.status = 500;\n this.name = 'invalid_value';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, BuiltInError);\n } catch (e) {}\n}\n\ninherits(BuiltInError, Error);\n\nfunction promisedCallback(promise, callback) {\n if (callback) {\n promise.then(function (res) {\n nextTick(function () {\n callback(null, res);\n });\n }, function (reason) {\n nextTick(function () {\n callback(reason);\n });\n });\n }\n return promise;\n}\n\nfunction callbackify(fun) {\n return getArguments(function (args) {\n var cb = args.pop();\n var promise = fun.apply(this, args);\n if (typeof cb === 'function') {\n promisedCallback(promise, cb);\n }\n return promise;\n });\n}\n\n// Promise finally util similar to Q.finally\nfunction fin(promise, finalPromiseFactory) {\n return promise.then(function (res) {\n return finalPromiseFactory().then(function () {\n return res;\n });\n }, function (reason) {\n return finalPromiseFactory().then(function () {\n throw reason;\n });\n });\n}\n\nfunction sequentialize(queue, promiseFactory) {\n return function () {\n var args = arguments;\n var that = this;\n return queue.add(function () {\n return promiseFactory.apply(that, args);\n });\n };\n}\n\n// uniq an array of strings, order not guaranteed\n// similar to underscore/lodash _.uniq\nfunction uniq(arr) {\n var theSet = new ExportedSet(arr);\n var result = new Array(theSet.size);\n var index = -1;\n theSet.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n\nfunction mapToKeysArray(map) {\n var result = new Array(map.size);\n var index = -1;\n map.forEach(function (value, key) {\n result[++index] = key;\n });\n return result;\n}\n\nfunction createBuiltInError(name) {\n var message = 'builtin ' + name +\n ' function requires map values to be numbers' +\n ' or number arrays';\n return new BuiltInError(message);\n}\n\nfunction sum(values) {\n var result = 0;\n for (var i = 0, len = values.length; i < len; i++) {\n var num = values[i];\n if (typeof num !== 'number') {\n if (Array.isArray(num)) {\n // lists of numbers are also allowed, sum them separately\n result = typeof result === 'number' ? [result] : result;\n for (var j = 0, jLen = num.length; j < jLen; j++) {\n var jNum = num[j];\n if (typeof jNum !== 'number') {\n throw createBuiltInError('_sum');\n } else if (typeof result[j] === 'undefined') {\n result.push(jNum);\n } else {\n result[j] += jNum;\n }\n }\n } else { // not array/number\n throw createBuiltInError('_sum');\n }\n } else if (typeof result === 'number') {\n result += num;\n } else { // add number to array\n result[0] += num;\n }\n }\n return result;\n}\n\nvar log = guardedConsole.bind(null, 'log');\nvar isArray = Array.isArray;\nvar toJSON = JSON.parse;\n\nfunction evalFunctionWithEval(func, emit) {\n return scopeEval(\n \"return (\" + func.replace(/;\\s*$/, \"\") + \");\",\n {\n emit: emit,\n sum: sum,\n log: log,\n isArray: isArray,\n toJSON: toJSON\n }\n );\n}\n\n/*\n * Simple task queue to sequentialize actions. Assumes\n * callbacks will eventually fire (once).\n */\n\n\nfunction TaskQueue$2() {\n this.promise = new PouchPromise(function (fulfill) {fulfill(); });\n}\nTaskQueue$2.prototype.add = function (promiseFactory) {\n this.promise = this.promise[\"catch\"](function () {\n // just recover\n }).then(function () {\n return promiseFactory();\n });\n return this.promise;\n};\nTaskQueue$2.prototype.finish = function () {\n return this.promise;\n};\n\nfunction stringify(input) {\n if (!input) {\n return 'undefined'; // backwards compat for empty reduce\n }\n // for backwards compat with mapreduce, functions/strings are stringified\n // as-is. everything else is JSON-stringified.\n switch (typeof input) {\n case 'function':\n // e.g. a mapreduce map\n return input.toString();\n case 'string':\n // e.g. a mapreduce built-in _reduce function\n return input.toString();\n default:\n // e.g. a JSON object in the case of mango queries\n return JSON.stringify(input);\n }\n}\n\n/* create a string signature for a view so we can cache it and uniq it */\nfunction createViewSignature(mapFun, reduceFun) {\n // the \"undefined\" part is for backwards compatibility\n return stringify(mapFun) + stringify(reduceFun) + 'undefined';\n}\n\nfunction createView(sourceDB, viewName, mapFun, reduceFun, temporary, localDocName) {\n var viewSignature = createViewSignature(mapFun, reduceFun);\n\n var cachedViews;\n if (!temporary) {\n // cache this to ensure we don't try to update the same view twice\n cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};\n if (cachedViews[viewSignature]) {\n return cachedViews[viewSignature];\n }\n }\n\n var promiseForView = sourceDB.info().then(function (info) {\n\n var depDbName = info.db_name + '-mrview-' +\n (temporary ? 'temp' : stringMd5(viewSignature));\n\n // save the view name in the source db so it can be cleaned up if necessary\n // (e.g. when the _design doc is deleted, remove all associated view data)\n function diffFunction(doc) {\n doc.views = doc.views || {};\n var fullViewName = viewName;\n if (fullViewName.indexOf('/') === -1) {\n fullViewName = viewName + '/' + viewName;\n }\n var depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};\n /* istanbul ignore if */\n if (depDbs[depDbName]) {\n return; // no update necessary\n }\n depDbs[depDbName] = true;\n return doc;\n }\n return upsert(sourceDB, '_local/' + localDocName, diffFunction).then(function () {\n return sourceDB.registerDependentDatabase(depDbName).then(function (res) {\n var db = res.db;\n db.auto_compaction = true;\n var view = {\n name: depDbName,\n db: db,\n sourceDB: sourceDB,\n adapter: sourceDB.adapter,\n mapFun: mapFun,\n reduceFun: reduceFun\n };\n return view.db.get('_local/lastSeq')[\"catch\"](function (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n throw err;\n }\n }).then(function (lastSeqDoc) {\n view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;\n if (cachedViews) {\n view.db.once('destroyed', function () {\n delete cachedViews[viewSignature];\n });\n }\n return view;\n });\n });\n });\n });\n\n if (cachedViews) {\n cachedViews[viewSignature] = promiseForView;\n }\n return promiseForView;\n}\n\nvar persistentQueues = {};\nvar tempViewQueue = new TaskQueue$2();\nvar CHANGES_BATCH_SIZE$1 = 50;\n\nfunction parseViewName(name) {\n // can be either 'ddocname/viewname' or just 'viewname'\n // (where the ddoc name is the same)\n return name.indexOf('/') === -1 ? [name, name] : name.split('/');\n}\n\nfunction isGenOne(changes) {\n // only return true if the current change is 1-\n // and there are no other leafs\n return changes.length === 1 && /^1-/.test(changes[0].rev);\n}\n\nfunction emitError(db, e) {\n try {\n db.emit('error', e);\n } catch (err) {\n guardedConsole('error',\n 'The user\\'s map/reduce function threw an uncaught error.\\n' +\n 'You can debug this error by doing:\\n' +\n 'myDatabase.on(\\'error\\', function (err) { debugger; });\\n' +\n 'Please double-check your map/reduce function.');\n guardedConsole('error', e);\n }\n}\n\n/**\n * Returns an \"abstract\" mapreduce object of the form:\n *\n * {\n * query: queryFun,\n * viewCleanup: viewCleanupFun\n * }\n *\n * Arguments are:\n *\n * localDoc: string\n * This is for the local doc that gets saved in order to track the\n * \"dependent\" DBs and clean them up for viewCleanup. It should be\n * unique, so that indexer plugins don't collide with each other.\n * mapper: function (mapFunDef, emit)\n * Returns a map function based on the mapFunDef, which in the case of\n * normal map/reduce is just the de-stringified function, but may be\n * something else, such as an object in the case of pouchdb-find.\n * reducer: function (reduceFunDef)\n * Ditto, but for reducing. Modules don't have to support reducing\n * (e.g. pouchdb-find).\n * ddocValidator: function (ddoc, viewName)\n * Throws an error if the ddoc or viewName is not valid.\n * This could be a way to communicate to the user that the configuration for the\n * indexer is invalid.\n */\nfunction createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator) {\n\n function tryMap(db, fun, doc) {\n // emit an event if there was an error thrown by a map function.\n // putting try/catches in a single function also avoids deoptimizations.\n try {\n fun(doc);\n } catch (e) {\n emitError(db, e);\n }\n }\n\n function tryReduce(db, fun, keys, values, rereduce) {\n // same as above, but returning the result or an error. there are two separate\n // functions to avoid extra memory allocations since the tryCode() case is used\n // for custom map functions (common) vs this function, which is only used for\n // custom reduce functions (rare)\n try {\n return {output : fun(keys, values, rereduce)};\n } catch (e) {\n emitError(db, e);\n return {error: e};\n }\n }\n\n function sortByKeyThenValue(x, y) {\n var keyCompare = collate(x.key, y.key);\n return keyCompare !== 0 ? keyCompare : collate(x.value, y.value);\n }\n\n function sliceResults(results, limit, skip) {\n skip = skip || 0;\n if (typeof limit === 'number') {\n return results.slice(skip, limit + skip);\n } else if (skip > 0) {\n return results.slice(skip);\n }\n return results;\n }\n\n function rowToDocId(row) {\n var val = row.value;\n // Users can explicitly specify a joined doc _id, or it\n // defaults to the doc _id that emitted the key/value.\n var docId = (val && typeof val === 'object' && val._id) || row.id;\n return docId;\n }\n\n function readAttachmentsAsBlobOrBuffer(res) {\n res.rows.forEach(function (row) {\n var atts = row.doc && row.doc._attachments;\n if (!atts) {\n return;\n }\n Object.keys(atts).forEach(function (filename) {\n var att = atts[filename];\n atts[filename].data = b64ToBluffer(att.data, att.content_type);\n });\n });\n }\n\n function postprocessAttachments(opts) {\n return function (res) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n readAttachmentsAsBlobOrBuffer(res);\n }\n return res;\n };\n }\n\n function addHttpParam(paramName, opts, params, asJson) {\n // add an http param from opts to params, optionally json-encoded\n var val = opts[paramName];\n if (typeof val !== 'undefined') {\n if (asJson) {\n val = encodeURIComponent(JSON.stringify(val));\n }\n params.push(paramName + '=' + val);\n }\n }\n\n function coerceInteger(integerCandidate) {\n if (typeof integerCandidate !== 'undefined') {\n var asNumber = Number(integerCandidate);\n // prevents e.g. '1foo' or '1.1' being coerced to 1\n if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {\n return asNumber;\n } else {\n return integerCandidate;\n }\n }\n }\n\n function coerceOptions(opts) {\n opts.group_level = coerceInteger(opts.group_level);\n opts.limit = coerceInteger(opts.limit);\n opts.skip = coerceInteger(opts.skip);\n return opts;\n }\n\n function checkPositiveInteger(number) {\n if (number) {\n if (typeof number !== 'number') {\n return new QueryParseError('Invalid value for integer: \"' +\n number + '\"');\n }\n if (number < 0) {\n return new QueryParseError('Invalid value for positive integer: ' +\n '\"' + number + '\"');\n }\n }\n }\n\n function checkQueryParseError(options, fun) {\n var startkeyName = options.descending ? 'endkey' : 'startkey';\n var endkeyName = options.descending ? 'startkey' : 'endkey';\n\n if (typeof options[startkeyName] !== 'undefined' &&\n typeof options[endkeyName] !== 'undefined' &&\n collate(options[startkeyName], options[endkeyName]) > 0) {\n throw new QueryParseError('No rows can match your key range, ' +\n 'reverse your start_key and end_key or set {descending : true}');\n } else if (fun.reduce && options.reduce !== false) {\n if (options.include_docs) {\n throw new QueryParseError('{include_docs:true} is invalid for reduce');\n } else if (options.keys && options.keys.length > 1 &&\n !options.group && !options.group_level) {\n throw new QueryParseError('Multi-key fetches for reduce views must use ' +\n '{group: true}');\n }\n }\n ['group_level', 'limit', 'skip'].forEach(function (optionName) {\n var error = checkPositiveInteger(options[optionName]);\n if (error) {\n throw error;\n }\n });\n }\n\n function httpQuery(db, fun, opts) {\n // List of parameters to add to the PUT request\n var params = [];\n var body;\n var method = 'GET';\n\n // If opts.reduce exists and is defined, then add it to the list\n // of parameters.\n // If reduce=false then the results are that of only the map function\n // not the final result of map and reduce.\n addHttpParam('reduce', opts, params);\n addHttpParam('include_docs', opts, params);\n addHttpParam('attachments', opts, params);\n addHttpParam('limit', opts, params);\n addHttpParam('descending', opts, params);\n addHttpParam('group', opts, params);\n addHttpParam('group_level', opts, params);\n addHttpParam('skip', opts, params);\n addHttpParam('stale', opts, params);\n addHttpParam('conflicts', opts, params);\n addHttpParam('startkey', opts, params, true);\n addHttpParam('start_key', opts, params, true);\n addHttpParam('endkey', opts, params, true);\n addHttpParam('end_key', opts, params, true);\n addHttpParam('inclusive_end', opts, params);\n addHttpParam('key', opts, params, true);\n addHttpParam('update_seq', opts, params);\n\n // Format the list of parameters into a valid URI query string\n params = params.join('&');\n params = params === '' ? '' : '?' + params;\n\n // If keys are supplied, issue a POST to circumvent GET query string limits\n // see http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options\n if (typeof opts.keys !== 'undefined') {\n var MAX_URL_LENGTH = 2000;\n // according to http://stackoverflow.com/a/417184/680742,\n // the de facto URL length limit is 2000 characters\n\n var keysAsString =\n 'keys=' + encodeURIComponent(JSON.stringify(opts.keys));\n if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {\n // If the keys are short enough, do a GET. we do this to work around\n // Safari not understanding 304s on POSTs (see pouchdb/pouchdb#1239)\n params += (params[0] === '?' ? '&' : '?') + keysAsString;\n } else {\n method = 'POST';\n if (typeof fun === 'string') {\n body = {keys: opts.keys};\n } else { // fun is {map : mapfun}, so append to this\n fun.keys = opts.keys;\n }\n }\n }\n\n // We are referencing a query defined in the design doc\n if (typeof fun === 'string') {\n var parts = parseViewName(fun);\n return db.request({\n method: method,\n url: '_design/' + parts[0] + '/_view/' + parts[1] + params,\n body: body\n }).then(\n /* istanbul ignore next */\n function (result) {\n // fail the entire request if the result contains an error\n result.rows.forEach(function (row) {\n if (row.value && row.value.error && row.value.error === \"builtin_reduce_error\") {\n throw new Error(row.reason);\n }\n });\n\n return result;\n })\n .then(postprocessAttachments(opts));\n }\n\n // We are using a temporary view, terrible for performance, good for testing\n body = body || {};\n Object.keys(fun).forEach(function (key) {\n if (Array.isArray(fun[key])) {\n body[key] = fun[key];\n } else {\n body[key] = fun[key].toString();\n }\n });\n return db.request({\n method: 'POST',\n url: '_temp_view' + params,\n body: body\n }).then(postprocessAttachments(opts));\n }\n\n // custom adapters can define their own api._query\n // and override the default behavior\n /* istanbul ignore next */\n function customQuery(db, fun, opts) {\n return new PouchPromise(function (resolve, reject) {\n db._query(fun, opts, function (err, res) {\n if (err) {\n return reject(err);\n }\n resolve(res);\n });\n });\n }\n\n // custom adapters can define their own api._viewCleanup\n // and override the default behavior\n /* istanbul ignore next */\n function customViewCleanup(db) {\n return new PouchPromise(function (resolve, reject) {\n db._viewCleanup(function (err, res) {\n if (err) {\n return reject(err);\n }\n resolve(res);\n });\n });\n }\n\n function defaultsTo(value) {\n return function (reason) {\n /* istanbul ignore else */\n if (reason.status === 404) {\n return value;\n } else {\n throw reason;\n }\n };\n }\n\n // returns a promise for a list of docs to update, based on the input docId.\n // the order doesn't matter, because post-3.2.0, bulkDocs\n // is an atomic operation in all three adapters.\n function getDocsToPersist(docId, view, docIdsToChangesAndEmits) {\n var metaDocId = '_local/doc_' + docId;\n var defaultMetaDoc = {_id: metaDocId, keys: []};\n var docData = docIdsToChangesAndEmits.get(docId);\n var indexableKeysToKeyValues = docData[0];\n var changes = docData[1];\n\n function getMetaDoc() {\n if (isGenOne(changes)) {\n // generation 1, so we can safely assume initial state\n // for performance reasons (avoids unnecessary GETs)\n return PouchPromise.resolve(defaultMetaDoc);\n }\n return view.db.get(metaDocId)[\"catch\"](defaultsTo(defaultMetaDoc));\n }\n\n function getKeyValueDocs(metaDoc) {\n if (!metaDoc.keys.length) {\n // no keys, no need for a lookup\n return PouchPromise.resolve({rows: []});\n }\n return view.db.allDocs({\n keys: metaDoc.keys,\n include_docs: true\n });\n }\n\n function processKeyValueDocs(metaDoc, kvDocsRes) {\n var kvDocs = [];\n var oldKeys = new ExportedSet();\n\n for (var i = 0, len = kvDocsRes.rows.length; i < len; i++) {\n var row = kvDocsRes.rows[i];\n var doc = row.doc;\n if (!doc) { // deleted\n continue;\n }\n kvDocs.push(doc);\n oldKeys.add(doc._id);\n doc._deleted = !indexableKeysToKeyValues.has(doc._id);\n if (!doc._deleted) {\n var keyValue = indexableKeysToKeyValues.get(doc._id);\n if ('value' in keyValue) {\n doc.value = keyValue.value;\n }\n }\n }\n var newKeys = mapToKeysArray(indexableKeysToKeyValues);\n newKeys.forEach(function (key) {\n if (!oldKeys.has(key)) {\n // new doc\n var kvDoc = {\n _id: key\n };\n var keyValue = indexableKeysToKeyValues.get(key);\n if ('value' in keyValue) {\n kvDoc.value = keyValue.value;\n }\n kvDocs.push(kvDoc);\n }\n });\n metaDoc.keys = uniq(newKeys.concat(metaDoc.keys));\n kvDocs.push(metaDoc);\n\n return kvDocs;\n }\n\n return getMetaDoc().then(function (metaDoc) {\n return getKeyValueDocs(metaDoc).then(function (kvDocsRes) {\n return processKeyValueDocs(metaDoc, kvDocsRes);\n });\n });\n }\n\n // updates all emitted key/value docs and metaDocs in the mrview database\n // for the given batch of documents from the source database\n function saveKeyValues(view, docIdsToChangesAndEmits, seq) {\n var seqDocId = '_local/lastSeq';\n return view.db.get(seqDocId)[\n \"catch\"](defaultsTo({_id: seqDocId, seq: 0}))\n .then(function (lastSeqDoc) {\n var docIds = mapToKeysArray(docIdsToChangesAndEmits);\n return PouchPromise.all(docIds.map(function (docId) {\n return getDocsToPersist(docId, view, docIdsToChangesAndEmits);\n })).then(function (listOfDocsToPersist) {\n var docsToPersist = flatten(listOfDocsToPersist);\n lastSeqDoc.seq = seq;\n docsToPersist.push(lastSeqDoc);\n // write all docs in a single operation, update the seq once\n return view.db.bulkDocs({docs : docsToPersist});\n });\n });\n }\n\n function getQueue(view) {\n var viewName = typeof view === 'string' ? view : view.name;\n var queue = persistentQueues[viewName];\n if (!queue) {\n queue = persistentQueues[viewName] = new TaskQueue$2();\n }\n return queue;\n }\n\n function updateView(view) {\n return sequentialize(getQueue(view), function () {\n return updateViewInQueue(view);\n })();\n }\n\n function updateViewInQueue(view) {\n // bind the emit function once\n var mapResults;\n var doc;\n\n function emit(key, value) {\n var output = {id: doc._id, key: normalizeKey(key)};\n // Don't explicitly store the value unless it's defined and non-null.\n // This saves on storage space, because often people don't use it.\n if (typeof value !== 'undefined' && value !== null) {\n output.value = normalizeKey(value);\n }\n mapResults.push(output);\n }\n\n var mapFun = mapper(view.mapFun, emit);\n\n var currentSeq = view.seq || 0;\n\n function processChange(docIdsToChangesAndEmits, seq) {\n return function () {\n return saveKeyValues(view, docIdsToChangesAndEmits, seq);\n };\n }\n\n var queue = new TaskQueue$2();\n\n function processNextBatch() {\n return view.sourceDB.changes({\n conflicts: true,\n include_docs: true,\n style: 'all_docs',\n since: currentSeq,\n limit: CHANGES_BATCH_SIZE$1\n }).then(processBatch);\n }\n\n function processBatch(response) {\n var results = response.results;\n if (!results.length) {\n return;\n }\n var docIdsToChangesAndEmits = createDocIdsToChangesAndEmits(results);\n queue.add(processChange(docIdsToChangesAndEmits, currentSeq));\n if (results.length < CHANGES_BATCH_SIZE$1) {\n return;\n }\n return processNextBatch();\n }\n\n function createDocIdsToChangesAndEmits(results) {\n var docIdsToChangesAndEmits = new ExportedMap();\n for (var i = 0, len = results.length; i < len; i++) {\n var change = results[i];\n if (change.doc._id[0] !== '_') {\n mapResults = [];\n doc = change.doc;\n\n if (!doc._deleted) {\n tryMap(view.sourceDB, mapFun, doc);\n }\n mapResults.sort(sortByKeyThenValue);\n\n var indexableKeysToKeyValues = createIndexableKeysToKeyValues(mapResults);\n docIdsToChangesAndEmits.set(change.doc._id, [\n indexableKeysToKeyValues,\n change.changes\n ]);\n }\n currentSeq = change.seq;\n }\n return docIdsToChangesAndEmits;\n }\n\n function createIndexableKeysToKeyValues(mapResults) {\n var indexableKeysToKeyValues = new ExportedMap();\n var lastKey;\n for (var i = 0, len = mapResults.length; i < len; i++) {\n var emittedKeyValue = mapResults[i];\n var complexKey = [emittedKeyValue.key, emittedKeyValue.id];\n if (i > 0 && collate(emittedKeyValue.key, lastKey) === 0) {\n complexKey.push(i); // dup key+id, so make it unique\n }\n indexableKeysToKeyValues.set(toIndexableString(complexKey), emittedKeyValue);\n lastKey = emittedKeyValue.key;\n }\n return indexableKeysToKeyValues;\n }\n\n return processNextBatch().then(function () {\n return queue.finish();\n }).then(function () {\n view.seq = currentSeq;\n });\n }\n\n function reduceView(view, results, options) {\n if (options.group_level === 0) {\n delete options.group_level;\n }\n\n var shouldGroup = options.group || options.group_level;\n\n var reduceFun = reducer(view.reduceFun);\n\n var groups = [];\n var lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY :\n options.group_level;\n results.forEach(function (e) {\n var last = groups[groups.length - 1];\n var groupKey = shouldGroup ? e.key : null;\n\n // only set group_level for array keys\n if (shouldGroup && Array.isArray(groupKey)) {\n groupKey = groupKey.slice(0, lvl);\n }\n\n if (last && collate(last.groupKey, groupKey) === 0) {\n last.keys.push([e.key, e.id]);\n last.values.push(e.value);\n return;\n }\n groups.push({\n keys: [[e.key, e.id]],\n values: [e.value],\n groupKey: groupKey\n });\n });\n results = [];\n for (var i = 0, len = groups.length; i < len; i++) {\n var e = groups[i];\n var reduceTry = tryReduce(view.sourceDB, reduceFun, e.keys, e.values, false);\n if (reduceTry.error && reduceTry.error instanceof BuiltInError) {\n // CouchDB returns an error if a built-in errors out\n throw reduceTry.error;\n }\n results.push({\n // CouchDB just sets the value to null if a non-built-in errors out\n value: reduceTry.error ? null : reduceTry.output,\n key: e.groupKey\n });\n }\n // no total_rows/offset when reducing\n return {rows: sliceResults(results, options.limit, options.skip)};\n }\n\n function queryView(view, opts) {\n return sequentialize(getQueue(view), function () {\n return queryViewInQueue(view, opts);\n })();\n }\n\n function queryViewInQueue(view, opts) {\n var totalRows;\n var shouldReduce = view.reduceFun && opts.reduce !== false;\n var skip = opts.skip || 0;\n if (typeof opts.keys !== 'undefined' && !opts.keys.length) {\n // equivalent query\n opts.limit = 0;\n delete opts.keys;\n }\n\n function fetchFromView(viewOpts) {\n viewOpts.include_docs = true;\n return view.db.allDocs(viewOpts).then(function (res) {\n totalRows = res.total_rows;\n return res.rows.map(function (result) {\n\n // implicit migration - in older versions of PouchDB,\n // we explicitly stored the doc as {id: ..., key: ..., value: ...}\n // this is tested in a migration test\n /* istanbul ignore next */\n if ('value' in result.doc && typeof result.doc.value === 'object' &&\n result.doc.value !== null) {\n var keys = Object.keys(result.doc.value).sort();\n // this detection method is not perfect, but it's unlikely the user\n // emitted a value which was an object with these 3 exact keys\n var expectedKeys = ['id', 'key', 'value'];\n if (!(keys < expectedKeys || keys > expectedKeys)) {\n return result.doc.value;\n }\n }\n\n var parsedKeyAndDocId = parseIndexableString(result.doc._id);\n return {\n key: parsedKeyAndDocId[0],\n id: parsedKeyAndDocId[1],\n value: ('value' in result.doc ? result.doc.value : null)\n };\n });\n });\n }\n\n function onMapResultsReady(rows) {\n var finalResults;\n if (shouldReduce) {\n finalResults = reduceView(view, rows, opts);\n } else {\n finalResults = {\n total_rows: totalRows,\n offset: skip,\n rows: rows\n };\n }\n /* istanbul ignore if */\n if (opts.update_seq) {\n finalResults.update_seq = view.seq;\n }\n if (opts.include_docs) {\n var docIds = uniq(rows.map(rowToDocId));\n\n return view.sourceDB.allDocs({\n keys: docIds,\n include_docs: true,\n conflicts: opts.conflicts,\n attachments: opts.attachments,\n binary: opts.binary\n }).then(function (allDocsRes) {\n var docIdsToDocs = new ExportedMap();\n allDocsRes.rows.forEach(function (row) {\n docIdsToDocs.set(row.id, row.doc);\n });\n rows.forEach(function (row) {\n var docId = rowToDocId(row);\n var doc = docIdsToDocs.get(docId);\n if (doc) {\n row.doc = doc;\n }\n });\n return finalResults;\n });\n } else {\n return finalResults;\n }\n }\n\n if (typeof opts.keys !== 'undefined') {\n var keys = opts.keys;\n var fetchPromises = keys.map(function (key) {\n var viewOpts = {\n startkey : toIndexableString([key]),\n endkey : toIndexableString([key, {}])\n };\n /* istanbul ignore if */\n if (opts.update_seq) {\n viewOpts.update_seq = true;\n }\n return fetchFromView(viewOpts);\n });\n return PouchPromise.all(fetchPromises).then(flatten).then(onMapResultsReady);\n } else { // normal query, no 'keys'\n var viewOpts = {\n descending : opts.descending\n };\n /* istanbul ignore if */\n if (opts.update_seq) {\n viewOpts.update_seq = true;\n }\n var startkey;\n var endkey;\n if ('start_key' in opts) {\n startkey = opts.start_key;\n }\n if ('startkey' in opts) {\n startkey = opts.startkey;\n }\n if ('end_key' in opts) {\n endkey = opts.end_key;\n }\n if ('endkey' in opts) {\n endkey = opts.endkey;\n }\n if (typeof startkey !== 'undefined') {\n viewOpts.startkey = opts.descending ?\n toIndexableString([startkey, {}]) :\n toIndexableString([startkey]);\n }\n if (typeof endkey !== 'undefined') {\n var inclusiveEnd = opts.inclusive_end !== false;\n if (opts.descending) {\n inclusiveEnd = !inclusiveEnd;\n }\n\n viewOpts.endkey = toIndexableString(\n inclusiveEnd ? [endkey, {}] : [endkey]);\n }\n if (typeof opts.key !== 'undefined') {\n var keyStart = toIndexableString([opts.key]);\n var keyEnd = toIndexableString([opts.key, {}]);\n if (viewOpts.descending) {\n viewOpts.endkey = keyStart;\n viewOpts.startkey = keyEnd;\n } else {\n viewOpts.startkey = keyStart;\n viewOpts.endkey = keyEnd;\n }\n }\n if (!shouldReduce) {\n if (typeof opts.limit === 'number') {\n viewOpts.limit = opts.limit;\n }\n viewOpts.skip = skip;\n }\n return fetchFromView(viewOpts).then(onMapResultsReady);\n }\n }\n\n function httpViewCleanup(db) {\n return db.request({\n method: 'POST',\n url: '_view_cleanup'\n });\n }\n\n function localViewCleanup(db) {\n return db.get('_local/' + localDocName).then(function (metaDoc) {\n var docsToViews = new ExportedMap();\n Object.keys(metaDoc.views).forEach(function (fullViewName) {\n var parts = parseViewName(fullViewName);\n var designDocName = '_design/' + parts[0];\n var viewName = parts[1];\n var views = docsToViews.get(designDocName);\n if (!views) {\n views = new ExportedSet();\n docsToViews.set(designDocName, views);\n }\n views.add(viewName);\n });\n var opts = {\n keys : mapToKeysArray(docsToViews),\n include_docs : true\n };\n return db.allDocs(opts).then(function (res) {\n var viewsToStatus = {};\n res.rows.forEach(function (row) {\n var ddocName = row.key.substring(8); // cuts off '_design/'\n docsToViews.get(row.key).forEach(function (viewName) {\n var fullViewName = ddocName + '/' + viewName;\n /* istanbul ignore if */\n if (!metaDoc.views[fullViewName]) {\n // new format, without slashes, to support PouchDB 2.2.0\n // migration test in pouchdb's browser.migration.js verifies this\n fullViewName = viewName;\n }\n var viewDBNames = Object.keys(metaDoc.views[fullViewName]);\n // design doc deleted, or view function nonexistent\n var statusIsGood = row.doc && row.doc.views &&\n row.doc.views[viewName];\n viewDBNames.forEach(function (viewDBName) {\n viewsToStatus[viewDBName] =\n viewsToStatus[viewDBName] || statusIsGood;\n });\n });\n });\n var dbsToDelete = Object.keys(viewsToStatus).filter(\n function (viewDBName) { return !viewsToStatus[viewDBName]; });\n var destroyPromises = dbsToDelete.map(function (viewDBName) {\n return sequentialize(getQueue(viewDBName), function () {\n return new db.constructor(viewDBName, db.__opts).destroy();\n })();\n });\n return PouchPromise.all(destroyPromises).then(function () {\n return {ok: true};\n });\n });\n }, defaultsTo({ok: true}));\n }\n\n function queryPromised(db, fun, opts) {\n /* istanbul ignore next */\n if (typeof db._query === 'function') {\n return customQuery(db, fun, opts);\n }\n if (isRemote(db)) {\n return httpQuery(db, fun, opts);\n }\n \n if (typeof fun !== 'string') {\n // temp_view\n checkQueryParseError(opts, fun);\n\n tempViewQueue.add(function () {\n var createViewPromise = createView(\n /* sourceDB */ db,\n /* viewName */ 'temp_view/temp_view',\n /* mapFun */ fun.map,\n /* reduceFun */ fun.reduce,\n /* temporary */ true,\n /* localDocName */ localDocName);\n return createViewPromise.then(function (view) {\n return fin(updateView(view).then(function () {\n return queryView(view, opts);\n }), function () {\n return view.db.destroy();\n });\n });\n });\n return tempViewQueue.finish();\n } else {\n // persistent view\n var fullViewName = fun;\n var parts = parseViewName(fullViewName);\n var designDocName = parts[0];\n var viewName = parts[1];\n return db.get('_design/' + designDocName).then(function (doc) {\n var fun = doc.views && doc.views[viewName];\n\n if (!fun) {\n // basic validator; it's assumed that every subclass would want this\n throw new NotFoundError('ddoc ' + doc._id + ' has no view named ' +\n viewName);\n }\n\n ddocValidator(doc, viewName);\n checkQueryParseError(opts, fun);\n\n var createViewPromise = createView(\n /* sourceDB */ db,\n /* viewName */ fullViewName,\n /* mapFun */ fun.map,\n /* reduceFun */ fun.reduce,\n /* temporary */ false,\n /* localDocName */ localDocName);\n return createViewPromise.then(function (view) {\n if (opts.stale === 'ok' || opts.stale === 'update_after') {\n if (opts.stale === 'update_after') {\n nextTick(function () {\n updateView(view);\n });\n }\n return queryView(view, opts);\n } else { // stale not ok\n return updateView(view).then(function () {\n return queryView(view, opts);\n });\n }\n });\n });\n }\n }\n\n function abstractQuery(fun, opts, callback) {\n var db = this;\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = opts ? coerceOptions(opts) : {};\n\n if (typeof fun === 'function') {\n fun = {map : fun};\n }\n\n var promise = PouchPromise.resolve().then(function () {\n return queryPromised(db, fun, opts);\n });\n promisedCallback(promise, callback);\n return promise;\n }\n\n var abstractViewCleanup = callbackify(function () {\n var db = this;\n /* istanbul ignore next */\n if (typeof db._viewCleanup === 'function') {\n return customViewCleanup(db);\n }\n if (isRemote(db)) {\n return httpViewCleanup(db);\n }\n return localViewCleanup(db);\n });\n\n return {\n query: abstractQuery,\n viewCleanup: abstractViewCleanup\n };\n}\n\nvar builtInReduce = {\n _sum: function (keys, values) {\n return sum(values);\n },\n\n _count: function (keys, values) {\n return values.length;\n },\n\n _stats: function (keys, values) {\n // no need to implement rereduce=true, because Pouch\n // will never call it\n function sumsqr(values) {\n var _sumsqr = 0;\n for (var i = 0, len = values.length; i < len; i++) {\n var num = values[i];\n _sumsqr += (num * num);\n }\n return _sumsqr;\n }\n return {\n sum : sum(values),\n min : Math.min.apply(null, values),\n max : Math.max.apply(null, values),\n count : values.length,\n sumsqr : sumsqr(values)\n };\n }\n};\n\nfunction getBuiltIn(reduceFunString) {\n if (/^_sum/.test(reduceFunString)) {\n return builtInReduce._sum;\n } else if (/^_count/.test(reduceFunString)) {\n return builtInReduce._count;\n } else if (/^_stats/.test(reduceFunString)) {\n return builtInReduce._stats;\n } else if (/^_/.test(reduceFunString)) {\n throw new Error(reduceFunString + ' is not a supported reduce function.');\n }\n}\n\nfunction mapper(mapFun, emit) {\n // for temp_views one can use emit(doc, emit), see #38\n if (typeof mapFun === \"function\" && mapFun.length === 2) {\n var origMap = mapFun;\n return function (doc) {\n return origMap(doc, emit);\n };\n } else {\n return evalFunctionWithEval(mapFun.toString(), emit);\n }\n}\n\nfunction reducer(reduceFun) {\n var reduceFunString = reduceFun.toString();\n var builtIn = getBuiltIn(reduceFunString);\n if (builtIn) {\n return builtIn;\n } else {\n return evalFunctionWithEval(reduceFunString);\n }\n}\n\nfunction ddocValidator(ddoc, viewName) {\n var fun = ddoc.views && ddoc.views[viewName];\n if (typeof fun.map !== 'string') {\n throw new NotFoundError('ddoc ' + ddoc._id + ' has no string view named ' +\n viewName + ', instead found object of type: ' + typeof fun.map);\n }\n}\n\nvar localDocName = 'mrviews';\nvar abstract = createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator);\n\nfunction query(fun, opts, callback) {\n return abstract.query.call(this, fun, opts, callback);\n}\n\nfunction viewCleanup(callback) {\n return abstract.viewCleanup.call(this, callback);\n}\n\nvar mapreduce = {\n query: query,\n viewCleanup: viewCleanup\n};\n\nfunction isGenOne$1(rev$$1) {\n return /^1-/.test(rev$$1);\n}\n\nfunction fileHasChanged(localDoc, remoteDoc, filename) {\n return !localDoc._attachments ||\n !localDoc._attachments[filename] ||\n localDoc._attachments[filename].digest !== remoteDoc._attachments[filename].digest;\n}\n\nfunction getDocAttachments(db, doc) {\n var filenames = Object.keys(doc._attachments);\n return PouchPromise.all(filenames.map(function (filename) {\n return db.getAttachment(doc._id, filename, {rev: doc._rev});\n }));\n}\n\nfunction getDocAttachmentsFromTargetOrSource(target, src, doc) {\n var doCheckForLocalAttachments = isRemote(src) && !isRemote(target);\n var filenames = Object.keys(doc._attachments);\n\n if (!doCheckForLocalAttachments) {\n return getDocAttachments(src, doc);\n }\n\n return target.get(doc._id).then(function (localDoc) {\n return PouchPromise.all(filenames.map(function (filename) {\n if (fileHasChanged(localDoc, doc, filename)) {\n return src.getAttachment(doc._id, filename);\n }\n\n return target.getAttachment(localDoc._id, filename);\n }));\n })[\"catch\"](function (error) {\n /* istanbul ignore if */\n if (error.status !== 404) {\n throw error;\n }\n\n return getDocAttachments(src, doc);\n });\n}\n\nfunction createBulkGetOpts(diffs) {\n var requests = [];\n Object.keys(diffs).forEach(function (id) {\n var missingRevs = diffs[id].missing;\n missingRevs.forEach(function (missingRev) {\n requests.push({\n id: id,\n rev: missingRev\n });\n });\n });\n\n return {\n docs: requests,\n revs: true,\n latest: true\n };\n}\n\n//\n// Fetch all the documents from the src as described in the \"diffs\",\n// which is a mapping of docs IDs to revisions. If the state ever\n// changes to \"cancelled\", then the returned promise will be rejected.\n// Else it will be resolved with a list of fetched documents.\n//\nfunction getDocs(src, target, diffs, state) {\n diffs = clone(diffs); // we do not need to modify this\n\n var resultDocs = [],\n ok = true;\n\n function getAllDocs() {\n\n var bulkGetOpts = createBulkGetOpts(diffs);\n\n if (!bulkGetOpts.docs.length) { // optimization: skip empty requests\n return;\n }\n\n return src.bulkGet(bulkGetOpts).then(function (bulkGetResponse) {\n /* istanbul ignore if */\n if (state.cancelled) {\n throw new Error('cancelled');\n }\n return PouchPromise.all(bulkGetResponse.results.map(function (bulkGetInfo) {\n return PouchPromise.all(bulkGetInfo.docs.map(function (doc) {\n var remoteDoc = doc.ok;\n\n if (doc.error) {\n // when AUTO_COMPACTION is set, docs can be returned which look\n // like this: {\"missing\":\"1-7c3ac256b693c462af8442f992b83696\"}\n ok = false;\n }\n\n if (!remoteDoc || !remoteDoc._attachments) {\n return remoteDoc;\n }\n\n return getDocAttachmentsFromTargetOrSource(target, src, remoteDoc)\n .then(function (attachments) {\n var filenames = Object.keys(remoteDoc._attachments);\n attachments\n .forEach(function (attachment, i) {\n var att = remoteDoc._attachments[filenames[i]];\n delete att.stub;\n delete att.length;\n att.data = attachment;\n });\n\n return remoteDoc;\n });\n }));\n }))\n\n .then(function (results) {\n resultDocs = resultDocs.concat(flatten(results).filter(Boolean));\n });\n });\n }\n\n function hasAttachments(doc) {\n return doc._attachments && Object.keys(doc._attachments).length > 0;\n }\n\n function hasConflicts(doc) {\n return doc._conflicts && doc._conflicts.length > 0;\n }\n\n function fetchRevisionOneDocs(ids) {\n // Optimization: fetch gen-1 docs and attachments in\n // a single request using _all_docs\n return src.allDocs({\n keys: ids,\n include_docs: true,\n conflicts: true\n }).then(function (res) {\n if (state.cancelled) {\n throw new Error('cancelled');\n }\n res.rows.forEach(function (row) {\n if (row.deleted || !row.doc || !isGenOne$1(row.value.rev) ||\n hasAttachments(row.doc) || hasConflicts(row.doc)) {\n // if any of these conditions apply, we need to fetch using get()\n return;\n }\n\n // strip _conflicts array to appease CSG (#5793)\n /* istanbul ignore if */\n if (row.doc._conflicts) {\n delete row.doc._conflicts;\n }\n\n // the doc we got back from allDocs() is sufficient\n resultDocs.push(row.doc);\n delete diffs[row.id];\n });\n });\n }\n\n function getRevisionOneDocs() {\n // filter out the generation 1 docs and get them\n // leaving the non-generation one docs to be got otherwise\n var ids = Object.keys(diffs).filter(function (id) {\n var missing = diffs[id].missing;\n return missing.length === 1 && isGenOne$1(missing[0]);\n });\n if (ids.length > 0) {\n return fetchRevisionOneDocs(ids);\n }\n }\n\n function returnResult() {\n return { ok:ok, docs:resultDocs };\n }\n\n return PouchPromise.resolve()\n .then(getRevisionOneDocs)\n .then(getAllDocs)\n .then(returnResult);\n}\n\nvar CHECKPOINT_VERSION = 1;\nvar REPLICATOR = \"pouchdb\";\n// This is an arbitrary number to limit the\n// amount of replication history we save in the checkpoint.\n// If we save too much, the checkpoing docs will become very big,\n// if we save fewer, we'll run a greater risk of having to\n// read all the changes from 0 when checkpoint PUTs fail\n// CouchDB 2.0 has a more involved history pruning,\n// but let's go for the simple version for now.\nvar CHECKPOINT_HISTORY_SIZE = 5;\nvar LOWEST_SEQ = 0;\n\nfunction updateCheckpoint(db, id, checkpoint, session, returnValue) {\n return db.get(id)[\"catch\"](function (err) {\n if (err.status === 404) {\n if (db.adapter === 'http' || db.adapter === 'https') {\n explainError(\n 404, 'PouchDB is just checking if a remote checkpoint exists.'\n );\n }\n return {\n session_id: session,\n _id: id,\n history: [],\n replicator: REPLICATOR,\n version: CHECKPOINT_VERSION\n };\n }\n throw err;\n }).then(function (doc) {\n if (returnValue.cancelled) {\n return;\n }\n\n // if the checkpoint has not changed, do not update\n if (doc.last_seq === checkpoint) {\n return;\n }\n\n // Filter out current entry for this replication\n doc.history = (doc.history || []).filter(function (item) {\n return item.session_id !== session;\n });\n\n // Add the latest checkpoint to history\n doc.history.unshift({\n last_seq: checkpoint,\n session_id: session\n });\n\n // Just take the last pieces in history, to\n // avoid really big checkpoint docs.\n // see comment on history size above\n doc.history = doc.history.slice(0, CHECKPOINT_HISTORY_SIZE);\n\n doc.version = CHECKPOINT_VERSION;\n doc.replicator = REPLICATOR;\n\n doc.session_id = session;\n doc.last_seq = checkpoint;\n\n return db.put(doc)[\"catch\"](function (err) {\n if (err.status === 409) {\n // retry; someone is trying to write a checkpoint simultaneously\n return updateCheckpoint(db, id, checkpoint, session, returnValue);\n }\n throw err;\n });\n });\n}\n\nfunction Checkpointer(src, target, id, returnValue, opts) {\n this.src = src;\n this.target = target;\n this.id = id;\n this.returnValue = returnValue;\n this.opts = opts || {};\n}\n\nCheckpointer.prototype.writeCheckpoint = function (checkpoint, session) {\n var self = this;\n return this.updateTarget(checkpoint, session).then(function () {\n return self.updateSource(checkpoint, session);\n });\n};\n\nCheckpointer.prototype.updateTarget = function (checkpoint, session) {\n if (this.opts.writeTargetCheckpoint) {\n return updateCheckpoint(this.target, this.id, checkpoint,\n session, this.returnValue);\n } else {\n return PouchPromise.resolve(true);\n }\n};\n\nCheckpointer.prototype.updateSource = function (checkpoint, session) {\n if (this.opts.writeSourceCheckpoint) {\n var self = this;\n return updateCheckpoint(this.src, this.id, checkpoint,\n session, this.returnValue)[\n \"catch\"](function (err) {\n if (isForbiddenError(err)) {\n self.opts.writeSourceCheckpoint = false;\n return true;\n }\n throw err;\n });\n } else {\n return PouchPromise.resolve(true);\n }\n};\n\nvar comparisons = {\n \"undefined\": function (targetDoc, sourceDoc) {\n // This is the previous comparison function\n if (collate(targetDoc.last_seq, sourceDoc.last_seq) === 0) {\n return sourceDoc.last_seq;\n }\n /* istanbul ignore next */\n return 0;\n },\n \"1\": function (targetDoc, sourceDoc) {\n // This is the comparison function ported from CouchDB\n return compareReplicationLogs(sourceDoc, targetDoc).last_seq;\n }\n};\n\nCheckpointer.prototype.getCheckpoint = function () {\n var self = this;\n\n if (self.opts && self.opts.writeSourceCheckpoint && !self.opts.writeTargetCheckpoint) {\n return self.src.get(self.id).then(function (sourceDoc) {\n return sourceDoc.last_seq || LOWEST_SEQ;\n })[\"catch\"](function (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n throw err;\n }\n return LOWEST_SEQ;\n });\n }\n\n return self.target.get(self.id).then(function (targetDoc) {\n if (self.opts && self.opts.writeTargetCheckpoint && !self.opts.writeSourceCheckpoint) {\n return targetDoc.last_seq || LOWEST_SEQ;\n }\n\n return self.src.get(self.id).then(function (sourceDoc) {\n // Since we can't migrate an old version doc to a new one\n // (no session id), we just go with the lowest seq in this case\n /* istanbul ignore if */\n if (targetDoc.version !== sourceDoc.version) {\n return LOWEST_SEQ;\n }\n\n var version;\n if (targetDoc.version) {\n version = targetDoc.version.toString();\n } else {\n version = \"undefined\";\n }\n\n if (version in comparisons) {\n return comparisons[version](targetDoc, sourceDoc);\n }\n /* istanbul ignore next */\n return LOWEST_SEQ;\n }, function (err) {\n if (err.status === 404 && targetDoc.last_seq) {\n return self.src.put({\n _id: self.id,\n last_seq: LOWEST_SEQ\n }).then(function () {\n return LOWEST_SEQ;\n }, function (err) {\n if (isForbiddenError(err)) {\n self.opts.writeSourceCheckpoint = false;\n return targetDoc.last_seq;\n }\n /* istanbul ignore next */\n return LOWEST_SEQ;\n });\n }\n throw err;\n });\n })[\"catch\"](function (err) {\n if (err.status !== 404) {\n throw err;\n }\n return LOWEST_SEQ;\n });\n};\n// This checkpoint comparison is ported from CouchDBs source\n// they come from here:\n// https://github.com/apache/couchdb-couch-replicator/blob/master/src/couch_replicator.erl#L863-L906\n\nfunction compareReplicationLogs(srcDoc, tgtDoc) {\n if (srcDoc.session_id === tgtDoc.session_id) {\n return {\n last_seq: srcDoc.last_seq,\n history: srcDoc.history\n };\n }\n\n return compareReplicationHistory(srcDoc.history, tgtDoc.history);\n}\n\nfunction compareReplicationHistory(sourceHistory, targetHistory) {\n // the erlang loop via function arguments is not so easy to repeat in JS\n // therefore, doing this as recursion\n var S = sourceHistory[0];\n var sourceRest = sourceHistory.slice(1);\n var T = targetHistory[0];\n var targetRest = targetHistory.slice(1);\n\n if (!S || targetHistory.length === 0) {\n return {\n last_seq: LOWEST_SEQ,\n history: []\n };\n }\n\n var sourceId = S.session_id;\n /* istanbul ignore if */\n if (hasSessionId(sourceId, targetHistory)) {\n return {\n last_seq: S.last_seq,\n history: sourceHistory\n };\n }\n\n var targetId = T.session_id;\n if (hasSessionId(targetId, sourceRest)) {\n return {\n last_seq: T.last_seq,\n history: targetRest\n };\n }\n\n return compareReplicationHistory(sourceRest, targetRest);\n}\n\nfunction hasSessionId(sessionId, history) {\n var props = history[0];\n var rest = history.slice(1);\n\n if (!sessionId || history.length === 0) {\n return false;\n }\n\n if (sessionId === props.session_id) {\n return true;\n }\n\n return hasSessionId(sessionId, rest);\n}\n\nfunction isForbiddenError(err) {\n return typeof err.status === 'number' && Math.floor(err.status / 100) === 4;\n}\n\nvar STARTING_BACK_OFF = 0;\n\nfunction backOff(opts, returnValue, error, callback) {\n if (opts.retry === false) {\n returnValue.emit('error', error);\n returnValue.removeAllListeners();\n return;\n }\n if (typeof opts.back_off_function !== 'function') {\n opts.back_off_function = defaultBackOff;\n }\n returnValue.emit('requestError', error);\n if (returnValue.state === 'active' || returnValue.state === 'pending') {\n returnValue.emit('paused', error);\n returnValue.state = 'stopped';\n var backOffSet = function backoffTimeSet() {\n opts.current_back_off = STARTING_BACK_OFF;\n };\n var removeBackOffSetter = function removeBackOffTimeSet() {\n returnValue.removeListener('active', backOffSet);\n };\n returnValue.once('paused', removeBackOffSetter);\n returnValue.once('active', backOffSet);\n }\n\n opts.current_back_off = opts.current_back_off || STARTING_BACK_OFF;\n opts.current_back_off = opts.back_off_function(opts.current_back_off);\n setTimeout(callback, opts.current_back_off);\n}\n\nfunction sortObjectPropertiesByKey(queryParams) {\n return Object.keys(queryParams).sort(collate).reduce(function (result, key) {\n result[key] = queryParams[key];\n return result;\n }, {});\n}\n\n// Generate a unique id particular to this replication.\n// Not guaranteed to align perfectly with CouchDB's rep ids.\nfunction generateReplicationId(src, target, opts) {\n var docIds = opts.doc_ids ? opts.doc_ids.sort(collate) : '';\n var filterFun = opts.filter ? opts.filter.toString() : '';\n var queryParams = '';\n var filterViewName = '';\n var selector = '';\n\n // possibility for checkpoints to be lost here as behaviour of\n // JSON.stringify is not stable (see #6226)\n /* istanbul ignore if */\n if (opts.selector) {\n selector = JSON.stringify(opts.selector);\n }\n\n if (opts.filter && opts.query_params) {\n queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));\n }\n\n if (opts.filter && opts.filter === '_view') {\n filterViewName = opts.view.toString();\n }\n\n return PouchPromise.all([src.id(), target.id()]).then(function (res) {\n var queryData = res[0] + res[1] + filterFun + filterViewName +\n queryParams + docIds + selector;\n return new PouchPromise(function (resolve) {\n binaryMd5(queryData, resolve);\n });\n }).then(function (md5sum) {\n // can't use straight-up md5 alphabet, because\n // the char '/' is interpreted as being for attachments,\n // and + is also not url-safe\n md5sum = md5sum.replace(/\\//g, '.').replace(/\\+/g, '_');\n return '_local/' + md5sum;\n });\n}\n\nfunction replicate(src, target, opts, returnValue, result) {\n var batches = []; // list of batches to be processed\n var currentBatch; // the batch currently being processed\n var pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n }; // next batch, not yet ready to be processed\n var writingCheckpoint = false; // true while checkpoint is being written\n var changesCompleted = false; // true when all changes received\n var replicationCompleted = false; // true when replication has completed\n var last_seq = 0;\n var continuous = opts.continuous || opts.live || false;\n var batch_size = opts.batch_size || 100;\n var batches_limit = opts.batches_limit || 10;\n var changesPending = false; // true while src.changes is running\n var doc_ids = opts.doc_ids;\n var selector = opts.selector;\n var repId;\n var checkpointer;\n var changedDocs = [];\n // Like couchdb, every replication gets a unique session id\n var session = uuid();\n var seq_interval = opts.seq_interval;\n\n result = result || {\n ok: true,\n start_time: new Date(),\n docs_read: 0,\n docs_written: 0,\n doc_write_failures: 0,\n errors: []\n };\n\n var changesOpts = {};\n returnValue.ready(src, target);\n\n function initCheckpointer() {\n if (checkpointer) {\n return PouchPromise.resolve();\n }\n return generateReplicationId(src, target, opts).then(function (res) {\n repId = res;\n\n var checkpointOpts = {};\n if (opts.checkpoint === false) {\n checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: false };\n } else if (opts.checkpoint === 'source') {\n checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: false };\n } else if (opts.checkpoint === 'target') {\n checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: true };\n } else {\n checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: true };\n }\n\n checkpointer = new Checkpointer(src, target, repId, returnValue, checkpointOpts);\n });\n }\n\n function writeDocs() {\n changedDocs = [];\n\n if (currentBatch.docs.length === 0) {\n return;\n }\n var docs = currentBatch.docs;\n var bulkOpts = {timeout: opts.timeout};\n return target.bulkDocs({docs: docs, new_edits: false}, bulkOpts).then(function (res) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n\n // `res` doesn't include full documents (which live in `docs`), so we create a map of \n // (id -> error), and check for errors while iterating over `docs`\n var errorsById = Object.create(null);\n res.forEach(function (res) {\n if (res.error) {\n errorsById[res.id] = res;\n }\n });\n\n var errorsNo = Object.keys(errorsById).length;\n result.doc_write_failures += errorsNo;\n result.docs_written += docs.length - errorsNo;\n\n docs.forEach(function (doc) {\n var error = errorsById[doc._id];\n if (error) {\n result.errors.push(error);\n // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)\n var errorName = (error.name || '').toLowerCase();\n if (errorName === 'unauthorized' || errorName === 'forbidden') {\n returnValue.emit('denied', clone(error));\n } else {\n throw error;\n }\n } else {\n changedDocs.push(doc);\n }\n });\n\n }, function (err) {\n result.doc_write_failures += docs.length;\n throw err;\n });\n }\n\n function finishBatch() {\n if (currentBatch.error) {\n throw new Error('There was a problem getting docs.');\n }\n result.last_seq = last_seq = currentBatch.seq;\n var outResult = clone(result);\n if (changedDocs.length) {\n outResult.docs = changedDocs;\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof currentBatch.pending === 'number') {\n outResult.pending = currentBatch.pending;\n delete currentBatch.pending;\n }\n returnValue.emit('change', outResult);\n }\n writingCheckpoint = true;\n return checkpointer.writeCheckpoint(currentBatch.seq,\n session).then(function () {\n writingCheckpoint = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n currentBatch = undefined;\n getChanges();\n })[\"catch\"](function (err) {\n onCheckpointError(err);\n throw err;\n });\n }\n\n function getDiffs() {\n var diff = {};\n currentBatch.changes.forEach(function (change) {\n // Couchbase Sync Gateway emits these, but we can ignore them\n /* istanbul ignore if */\n if (change.id === \"_user/\") {\n return;\n }\n diff[change.id] = change.changes.map(function (x) {\n return x.rev;\n });\n });\n return target.revsDiff(diff).then(function (diffs) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n // currentBatch.diffs elements are deleted as the documents are written\n currentBatch.diffs = diffs;\n });\n }\n\n function getBatchDocs() {\n return getDocs(src, target, currentBatch.diffs, returnValue).then(function (got) {\n currentBatch.error = !got.ok;\n got.docs.forEach(function (doc) {\n delete currentBatch.diffs[doc._id];\n result.docs_read++;\n currentBatch.docs.push(doc);\n });\n });\n }\n\n function startNextBatch() {\n if (returnValue.cancelled || currentBatch) {\n return;\n }\n if (batches.length === 0) {\n processPendingBatch(true);\n return;\n }\n currentBatch = batches.shift();\n getDiffs()\n .then(getBatchDocs)\n .then(writeDocs)\n .then(finishBatch)\n .then(startNextBatch)[\n \"catch\"](function (err) {\n abortReplication('batch processing terminated with error', err);\n });\n }\n\n\n function processPendingBatch(immediate) {\n if (pendingBatch.changes.length === 0) {\n if (batches.length === 0 && !currentBatch) {\n if ((continuous && changesOpts.live) || changesCompleted) {\n returnValue.state = 'pending';\n returnValue.emit('paused');\n }\n if (changesCompleted) {\n completeReplication();\n }\n }\n return;\n }\n if (\n immediate ||\n changesCompleted ||\n pendingBatch.changes.length >= batch_size\n ) {\n batches.push(pendingBatch);\n pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n };\n if (returnValue.state === 'pending' || returnValue.state === 'stopped') {\n returnValue.state = 'active';\n returnValue.emit('active');\n }\n startNextBatch();\n }\n }\n\n\n function abortReplication(reason, err) {\n if (replicationCompleted) {\n return;\n }\n if (!err.message) {\n err.message = reason;\n }\n result.ok = false;\n result.status = 'aborting';\n batches = [];\n pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n };\n completeReplication(err);\n }\n\n\n function completeReplication(fatalError) {\n if (replicationCompleted) {\n return;\n }\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n result.status = 'cancelled';\n if (writingCheckpoint) {\n return;\n }\n }\n result.status = result.status || 'complete';\n result.end_time = new Date();\n result.last_seq = last_seq;\n replicationCompleted = true;\n\n if (fatalError) {\n // need to extend the error because Firefox considers \".result\" read-only\n fatalError = createError(fatalError);\n fatalError.result = result;\n\n // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)\n var errorName = (fatalError.name || '').toLowerCase();\n if (errorName === 'unauthorized' || errorName === 'forbidden') {\n returnValue.emit('error', fatalError);\n returnValue.removeAllListeners();\n } else {\n backOff(opts, returnValue, fatalError, function () {\n replicate(src, target, opts, returnValue);\n });\n }\n } else {\n returnValue.emit('complete', result);\n returnValue.removeAllListeners();\n }\n }\n\n\n function onChange(change, pending, lastSeq) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof pending === 'number') {\n pendingBatch.pending = pending;\n }\n\n var filter = filterChange(opts)(change);\n if (!filter) {\n return;\n }\n pendingBatch.seq = change.seq || lastSeq;\n pendingBatch.changes.push(change);\n processPendingBatch(batches.length === 0 && changesOpts.live);\n }\n\n\n function onChangesComplete(changes) {\n changesPending = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n\n // if no results were returned then we're done,\n // else fetch more\n if (changes.results.length > 0) {\n changesOpts.since = changes.last_seq;\n getChanges();\n processPendingBatch(true);\n } else {\n\n var complete = function () {\n if (continuous) {\n changesOpts.live = true;\n getChanges();\n } else {\n changesCompleted = true;\n }\n processPendingBatch(true);\n };\n\n // update the checkpoint so we start from the right seq next time\n if (!currentBatch && changes.results.length === 0) {\n writingCheckpoint = true;\n checkpointer.writeCheckpoint(changes.last_seq,\n session).then(function () {\n writingCheckpoint = false;\n result.last_seq = last_seq = changes.last_seq;\n complete();\n })[\n \"catch\"](onCheckpointError);\n } else {\n complete();\n }\n }\n }\n\n\n function onChangesError(err) {\n changesPending = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n abortReplication('changes rejected', err);\n }\n\n\n function getChanges() {\n if (!(\n !changesPending &&\n !changesCompleted &&\n batches.length < batches_limit\n )) {\n return;\n }\n changesPending = true;\n function abortChanges() {\n changes.cancel();\n }\n function removeListener() {\n returnValue.removeListener('cancel', abortChanges);\n }\n\n if (returnValue._changes) { // remove old changes() and listeners\n returnValue.removeListener('cancel', returnValue._abortChanges);\n returnValue._changes.cancel();\n }\n returnValue.once('cancel', abortChanges);\n\n var changes = src.changes(changesOpts)\n .on('change', onChange);\n changes.then(removeListener, removeListener);\n changes.then(onChangesComplete)[\n \"catch\"](onChangesError);\n\n if (opts.retry) {\n // save for later so we can cancel if necessary\n returnValue._changes = changes;\n returnValue._abortChanges = abortChanges;\n }\n }\n\n\n function startChanges() {\n initCheckpointer().then(function () {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n return;\n }\n return checkpointer.getCheckpoint().then(function (checkpoint) {\n last_seq = checkpoint;\n changesOpts = {\n since: last_seq,\n limit: batch_size,\n batch_size: batch_size,\n style: 'all_docs',\n doc_ids: doc_ids,\n selector: selector,\n return_docs: true // required so we know when we're done\n };\n if (seq_interval !== false) {\n changesOpts.seq_interval = seq_interval || batch_size;\n }\n if (opts.filter) {\n if (typeof opts.filter !== 'string') {\n // required for the client-side filter in onChange\n changesOpts.include_docs = true;\n } else { // ddoc filter\n changesOpts.filter = opts.filter;\n }\n }\n if ('heartbeat' in opts) {\n changesOpts.heartbeat = opts.heartbeat;\n }\n if ('timeout' in opts) {\n changesOpts.timeout = opts.timeout;\n }\n if (opts.query_params) {\n changesOpts.query_params = opts.query_params;\n }\n if (opts.view) {\n changesOpts.view = opts.view;\n }\n getChanges();\n });\n })[\"catch\"](function (err) {\n abortReplication('getCheckpoint rejected with ', err);\n });\n }\n\n /* istanbul ignore next */\n function onCheckpointError(err) {\n writingCheckpoint = false;\n abortReplication('writeCheckpoint completed with error', err);\n }\n\n /* istanbul ignore if */\n if (returnValue.cancelled) { // cancelled immediately\n completeReplication();\n return;\n }\n\n if (!returnValue._addedListeners) {\n returnValue.once('cancel', completeReplication);\n\n if (typeof opts.complete === 'function') {\n returnValue.once('error', opts.complete);\n returnValue.once('complete', function (result) {\n opts.complete(null, result);\n });\n }\n returnValue._addedListeners = true;\n }\n\n if (typeof opts.since === 'undefined') {\n startChanges();\n } else {\n initCheckpointer().then(function () {\n writingCheckpoint = true;\n return checkpointer.writeCheckpoint(opts.since, session);\n }).then(function () {\n writingCheckpoint = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n return;\n }\n last_seq = opts.since;\n startChanges();\n })[\"catch\"](onCheckpointError);\n }\n}\n\n// We create a basic promise so the caller can cancel the replication possibly\n// before we have actually started listening to changes etc\ninherits(Replication, events.EventEmitter);\nfunction Replication() {\n events.EventEmitter.call(this);\n this.cancelled = false;\n this.state = 'pending';\n var self = this;\n var promise = new PouchPromise(function (fulfill, reject) {\n self.once('complete', fulfill);\n self.once('error', reject);\n });\n self.then = function (resolve, reject) {\n return promise.then(resolve, reject);\n };\n self[\"catch\"] = function (reject) {\n return promise[\"catch\"](reject);\n };\n // As we allow error handling via \"error\" event as well,\n // put a stub in here so that rejecting never throws UnhandledError.\n self[\"catch\"](function () {});\n}\n\nReplication.prototype.cancel = function () {\n this.cancelled = true;\n this.state = 'cancelled';\n this.emit('cancel');\n};\n\nReplication.prototype.ready = function (src, target) {\n var self = this;\n if (self._readyCalled) {\n return;\n }\n self._readyCalled = true;\n\n function onDestroy() {\n self.cancel();\n }\n src.once('destroyed', onDestroy);\n target.once('destroyed', onDestroy);\n function cleanup() {\n src.removeListener('destroyed', onDestroy);\n target.removeListener('destroyed', onDestroy);\n }\n self.once('complete', cleanup);\n};\n\nfunction toPouch(db, opts) {\n var PouchConstructor = opts.PouchConstructor;\n if (typeof db === 'string') {\n return new PouchConstructor(db, opts);\n } else {\n return db;\n }\n}\n\nfunction replicateWrapper(src, target, opts, callback) {\n\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof opts === 'undefined') {\n opts = {};\n }\n\n if (opts.doc_ids && !Array.isArray(opts.doc_ids)) {\n throw createError(BAD_REQUEST,\n \"`doc_ids` filter parameter is not a list.\");\n }\n\n opts.complete = callback;\n opts = clone(opts);\n opts.continuous = opts.continuous || opts.live;\n opts.retry = ('retry' in opts) ? opts.retry : false;\n /*jshint validthis:true */\n opts.PouchConstructor = opts.PouchConstructor || this;\n var replicateRet = new Replication(opts);\n var srcPouch = toPouch(src, opts);\n var targetPouch = toPouch(target, opts);\n replicate(srcPouch, targetPouch, opts, replicateRet);\n return replicateRet;\n}\n\ninherits(Sync, events.EventEmitter);\nfunction sync$1(src, target, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof opts === 'undefined') {\n opts = {};\n }\n opts = clone(opts);\n /*jshint validthis:true */\n opts.PouchConstructor = opts.PouchConstructor || this;\n src = toPouch(src, opts);\n target = toPouch(target, opts);\n return new Sync(src, target, opts, callback);\n}\n\nfunction Sync(src, target, opts, callback) {\n var self = this;\n this.canceled = false;\n\n var optsPush = opts.push ? $inject_Object_assign({}, opts, opts.push) : opts;\n var optsPull = opts.pull ? $inject_Object_assign({}, opts, opts.pull) : opts;\n\n this.push = replicateWrapper(src, target, optsPush);\n this.pull = replicateWrapper(target, src, optsPull);\n\n this.pushPaused = true;\n this.pullPaused = true;\n\n function pullChange(change) {\n self.emit('change', {\n direction: 'pull',\n change: change\n });\n }\n function pushChange(change) {\n self.emit('change', {\n direction: 'push',\n change: change\n });\n }\n function pushDenied(doc) {\n self.emit('denied', {\n direction: 'push',\n doc: doc\n });\n }\n function pullDenied(doc) {\n self.emit('denied', {\n direction: 'pull',\n doc: doc\n });\n }\n function pushPaused() {\n self.pushPaused = true;\n /* istanbul ignore if */\n if (self.pullPaused) {\n self.emit('paused');\n }\n }\n function pullPaused() {\n self.pullPaused = true;\n /* istanbul ignore if */\n if (self.pushPaused) {\n self.emit('paused');\n }\n }\n function pushActive() {\n self.pushPaused = false;\n /* istanbul ignore if */\n if (self.pullPaused) {\n self.emit('active', {\n direction: 'push'\n });\n }\n }\n function pullActive() {\n self.pullPaused = false;\n /* istanbul ignore if */\n if (self.pushPaused) {\n self.emit('active', {\n direction: 'pull'\n });\n }\n }\n\n var removed = {};\n\n function removeAll(type) { // type is 'push' or 'pull'\n return function (event, func) {\n var isChange = event === 'change' &&\n (func === pullChange || func === pushChange);\n var isDenied = event === 'denied' &&\n (func === pullDenied || func === pushDenied);\n var isPaused = event === 'paused' &&\n (func === pullPaused || func === pushPaused);\n var isActive = event === 'active' &&\n (func === pullActive || func === pushActive);\n\n if (isChange || isDenied || isPaused || isActive) {\n if (!(event in removed)) {\n removed[event] = {};\n }\n removed[event][type] = true;\n if (Object.keys(removed[event]).length === 2) {\n // both push and pull have asked to be removed\n self.removeAllListeners(event);\n }\n }\n };\n }\n\n if (opts.live) {\n this.push.on('complete', self.pull.cancel.bind(self.pull));\n this.pull.on('complete', self.push.cancel.bind(self.push));\n }\n\n function addOneListener(ee, event, listener) {\n if (ee.listeners(event).indexOf(listener) == -1) {\n ee.on(event, listener);\n }\n }\n\n this.on('newListener', function (event) {\n if (event === 'change') {\n addOneListener(self.pull, 'change', pullChange);\n addOneListener(self.push, 'change', pushChange);\n } else if (event === 'denied') {\n addOneListener(self.pull, 'denied', pullDenied);\n addOneListener(self.push, 'denied', pushDenied);\n } else if (event === 'active') {\n addOneListener(self.pull, 'active', pullActive);\n addOneListener(self.push, 'active', pushActive);\n } else if (event === 'paused') {\n addOneListener(self.pull, 'paused', pullPaused);\n addOneListener(self.push, 'paused', pushPaused);\n }\n });\n\n this.on('removeListener', function (event) {\n if (event === 'change') {\n self.pull.removeListener('change', pullChange);\n self.push.removeListener('change', pushChange);\n } else if (event === 'denied') {\n self.pull.removeListener('denied', pullDenied);\n self.push.removeListener('denied', pushDenied);\n } else if (event === 'active') {\n self.pull.removeListener('active', pullActive);\n self.push.removeListener('active', pushActive);\n } else if (event === 'paused') {\n self.pull.removeListener('paused', pullPaused);\n self.push.removeListener('paused', pushPaused);\n }\n });\n\n this.pull.on('removeListener', removeAll('pull'));\n this.push.on('removeListener', removeAll('push'));\n\n var promise = PouchPromise.all([\n this.push,\n this.pull\n ]).then(function (resp) {\n var out = {\n push: resp[0],\n pull: resp[1]\n };\n self.emit('complete', out);\n if (callback) {\n callback(null, out);\n }\n self.removeAllListeners();\n return out;\n }, function (err) {\n self.cancel();\n if (callback) {\n // if there's a callback, then the callback can receive\n // the error event\n callback(err);\n } else {\n // if there's no callback, then we're safe to emit an error\n // event, which would otherwise throw an unhandled error\n // due to 'error' being a special event in EventEmitters\n self.emit('error', err);\n }\n self.removeAllListeners();\n if (callback) {\n // no sense throwing if we're already emitting an 'error' event\n throw err;\n }\n });\n\n this.then = function (success, err) {\n return promise.then(success, err);\n };\n\n this[\"catch\"] = function (err) {\n return promise[\"catch\"](err);\n };\n}\n\nSync.prototype.cancel = function () {\n if (!this.canceled) {\n this.canceled = true;\n this.push.cancel();\n this.pull.cancel();\n }\n};\n\nfunction replication(PouchDB) {\n PouchDB.replicate = replicateWrapper;\n PouchDB.sync = sync$1;\n\n Object.defineProperty(PouchDB.prototype, 'replicate', {\n get: function () {\n var self = this;\n if (typeof this.replicateMethods === 'undefined') {\n this.replicateMethods = {\n from: function (other, opts, callback) {\n return self.constructor.replicate(other, self, opts, callback);\n },\n to: function (other, opts, callback) {\n return self.constructor.replicate(self, other, opts, callback);\n }\n };\n }\n return this.replicateMethods;\n }\n });\n\n PouchDB.prototype.sync = function (dbName, opts, callback) {\n return this.constructor.sync(this, dbName, opts, callback);\n };\n}\n\nPouchDB.plugin(IDBPouch)\n .plugin(WebSqlPouch$1)\n .plugin(HttpPouch$1)\n .plugin(mapreduce)\n .plugin(replication);\n\n// Pull from src because pouchdb-node/pouchdb-browser themselves\n// are aggressively optimized and jsnext:main would normally give us this\n// aggressive bundle.\n\nmodule.exports = PouchDB;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"1\":1,\"10\":10,\"11\":11,\"16\":16,\"2\":2,\"4\":4,\"5\":5,\"6\":6,\"7\":7}]},{},[17])(17)\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 23 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__events__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__events___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__events__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_routie__ = __webpack_require__(24);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_routie___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_routie__);\n\n\n\n$(window).on(__WEBPACK_IMPORTED_MODULE_0__events___default.a.AJAX + ' ' + __WEBPACK_IMPORTED_MODULE_0__events___default.a.LOADED, function () {\n __WEBPACK_IMPORTED_MODULE_1_routie___default()({\n 'navigation': function navigation() {\n $('#NavbarCollapse').addClass('in');\n },\n 'carousel:id:num': function carouselIdNum(id, num) {\n $('#Carousel' + id).carousel(num);\n }\n });\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(0)))\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar path = __webpack_require__(25);\n\nvar methods = ['get', 'post', 'put', 'patch', 'delete', 'del', 'all'];\n\nvar __slice = [].slice;\n\nmodule.exports = function (map) {\n var args, root, _map, cb;\n args = __slice.call(arguments, 1);\n\n if (typeof args[args.length - 1] === \"function\") cb = args.pop();\n\n root = path.join.apply(path, args);\n _map = {};\n methods.forEach(function (m) {\n _map[m] = function (subpath) {\n var args = __slice.call(arguments);\n args.length < 2 ? args.unshift(root) : args[0] = root + args[0];\n return map[m].apply(map, args);\n }\n });\n if (cb) cb(_map);\n return _map;\n};\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26)))\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\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\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! smooth-scroll v14.2.0 | (c) 2018 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/smooth-scroll */\n!(function(e,t){ true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function(){return t(e)}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):\"object\"==typeof exports?module.exports=t(e):e.SmoothScroll=t(e)})(\"undefined\"!=typeof global?global:\"undefined\"!=typeof window?window:this,(function(e){\"use strict\";var t={ignore:\"[data-scroll-ignore]\",header:null,topOnEmptyHash:!0,speed:500,clip:!0,offset:0,easing:\"easeInOutCubic\",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},n=function(){return\"querySelector\"in document&&\"addEventListener\"in e&&\"requestAnimationFrame\"in e&&\"closest\"in e.Element.prototype},o=function(){for(var e={},t=0;t<arguments.length;t++)!(function(t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(arguments[t]);return e},r=function(t){return!!(\"matchMedia\"in e&&e.matchMedia(\"(prefers-reduced-motion)\").matches)},a=function(t){return parseInt(e.getComputedStyle(t).height,10)},i=function(e){var t;try{t=decodeURIComponent(e)}catch(n){t=e}return t},c=function(e){\"#\"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,r=-1,a=\"\",i=n.charCodeAt(0);++r<o;){if(0===(t=n.charCodeAt(r)))throw new InvalidCharacterError(\"Invalid character: the input contains U+0000.\");t>=1&&t<=31||127==t||0===r&&t>=48&&t<=57||1===r&&t>=48&&t<=57&&45===i?a+=\"\\\\\"+t.toString(16)+\" \":a+=t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(r):\"\\\\\"+n.charAt(r)}var c;try{c=decodeURIComponent(\"#\"+a)}catch(e){c=\"#\"+a}return c},u=function(e,t){var n;return\"easeInQuad\"===e.easing&&(n=t*t),\"easeOutQuad\"===e.easing&&(n=t*(2-t)),\"easeInOutQuad\"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),\"easeInCubic\"===e.easing&&(n=t*t*t),\"easeOutCubic\"===e.easing&&(n=--t*t*t+1),\"easeInOutCubic\"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),\"easeInQuart\"===e.easing&&(n=t*t*t*t),\"easeOutQuart\"===e.easing&&(n=1- --t*t*t*t),\"easeInOutQuart\"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),\"easeInQuint\"===e.easing&&(n=t*t*t*t*t),\"easeOutQuint\"===e.easing&&(n=1+--t*t*t*t*t),\"easeInOutQuint\"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t},s=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,n,o,r){var a=0;if(t.offsetParent)do{a+=t.offsetTop,t=t.offsetParent}while(t);return a=Math.max(a-n-o,0),r&&(a=Math.min(a,s()-e.innerHeight)),a},d=function(e){return e?a(e)+e.offsetTop:0},f=function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?\"#top\":\"#\"+e.id)},m=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute(\"tabindex\",\"-1\"),t.focus(),t.style.outline=\"none\"),e.scrollTo(0,n))},h=function(t,n,o,r){if(n.emitEvents&&\"function\"==typeof e.CustomEvent){var a=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:r}});document.dispatchEvent(a)}};return function(a,p){var g,v,y,S,E,b,O,I={};I.cancelScroll=function(e){cancelAnimationFrame(O),O=null,e||h(\"scrollCancel\",g)},I.animateScroll=function(n,r,a){var i=o(g||t,a||{}),c=\"[object Number]\"===Object.prototype.toString.call(n),p=c||!n.tagName?null:n;if(c||p){var v=e.pageYOffset;i.header&&!S&&(S=document.querySelector(i.header)),E||(E=d(S));var y,b,C,w=c?n:l(p,E,parseInt(\"function\"==typeof i.offset?i.offset(n,r):i.offset,10),i.clip),L=w-v,A=s(),H=0,q=function(t,o){var a=e.pageYOffset;if(t==o||a==o||(v<o&&e.innerHeight+a)>=A)return I.cancelScroll(!0),m(n,o,c),h(\"scrollStop\",i,n,r),y=null,O=null,!0},Q=function(t){y||(y=t),H+=t-y,b=H/parseInt(i.speed,10),b=b>1?1:b,C=v+L*u(i,b),e.scrollTo(0,Math.floor(C)),q(C,w)||(O=e.requestAnimationFrame(Q),y=t)};0===e.pageYOffset&&e.scrollTo(0,0),f(n,c,i),h(\"scrollStart\",i,n,r),I.cancelScroll(!0),e.requestAnimationFrame(Q)}};var C=function(t){if(!r()&&0===t.button&&!t.metaKey&&!t.ctrlKey&&\"closest\"in t.target&&(y=t.target.closest(a))&&\"a\"===y.tagName.toLowerCase()&&!t.target.closest(g.ignore)&&y.hostname===e.location.hostname&&y.pathname===e.location.pathname&&/#/.test(y.href)){var n=c(i(y.hash)),o=g.topOnEmptyHash&&\"#\"===n?document.documentElement:document.querySelector(n);o=o||\"#top\"!==n?o:document.documentElement,o&&(t.preventDefault(),I.animateScroll(o,y))}},w=function(e){if(history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(g)&&history.state.anchor){var t=document.querySelector(c(i(history.state.anchor)));t&&I.animateScroll(t,null,{updateURL:!1})}},L=function(e){b||(b=setTimeout((function(){b=null,E=d(S)}),66))};return I.destroy=function(){g&&(document.removeEventListener(\"click\",C,!1),e.removeEventListener(\"resize\",L,!1),e.removeEventListener(\"popstate\",w,!1),I.cancelScroll(),g=null,v=null,y=null,S=null,E=null,b=null,O=null)},I.init=function(r){if(!n())throw\"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.\";I.destroy(),g=o(t,r||{}),S=g.header?document.querySelector(g.header):null,E=d(S),document.addEventListener(\"click\",C,!1),S&&e.addEventListener(\"resize\",L,!1),g.updateURL&&g.popstate&&e.addEventListener(\"popstate\",w,!1)},I.init(p),I}}));\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar map = {\n\t\"./icon-cfpb.png\": 29,\n\t\"./icon-lender.png\": 30,\n\t\"./logo.png\": 31\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 28;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"../img/icon-cfpb.png\";\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"../img/icon-lender.png\";\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"../img/logo.png\";\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\nfunction webpackEmptyContext(req) {\n\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 32;\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// js/app.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"app/client/dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap bf4e87ea9ffc4b0f0978","module.exports = jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 0\n// module chunks = 0","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Util = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator;\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || '';\n }\n\n try {\n var $selector = $(document).find(selector);\n return $selector.length > 0 ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $(element).css('transition-duration');\n var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n }\n };\n setTransitionEndSupport();\n return Util;\n}($);\n//# sourceMappingURL=util.js.map\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = Util;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/exports-loader?Util!./node_modules/bootstrap/js/dist/util.js\n// module id = 1\n// module chunks = 0","/**\n * Add your global events here\n */\n\nmodule.exports = {\n AJAX: 'ajax-load',\n LOADED: 'load',\n};\n\n\n\n// WEBPACK FOOTER //\n// ./app/client/src/js/_events.js","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.3\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);\n}\n\nfunction getWindowSizes() {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var styles = getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n // Avoid blurry text by using full pixel integers.\n // For pixel-perfect positioning, top/bottom prefers rounded\n // values, while left/right prefers floored values.\n var offsets = {\n left: Math.floor(popper.left),\n top: Math.round(popper.top),\n bottom: Math.round(popper.bottom),\n right: Math.floor(popper.right)\n };\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overriden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/popper.js/dist/esm/popper.js\n// module id = 3\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 4\n// module chunks = 0","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/hammerjs/hammer.js\n// module id = 5\n// module chunks = 0","import '../scss/app.scss';\n\n// import Bootstrap\nimport 'popper.js';\nimport 'bootstrap/js/dist/util';\nimport 'bootstrap/js/dist/alert';\nimport 'bootstrap/js/dist/button';\nimport 'bootstrap/js/dist/carousel';\nimport 'bootstrap/js/dist/collapse';\nimport 'bootstrap/js/dist/dropdown';\nimport 'bootstrap/js/dist/modal';\nimport 'bootstrap/js/dist/tooltip';\nimport 'bootstrap/js/dist/popover';\nimport 'bootstrap/js/dist/scrollspy';\nimport 'bootstrap/js/dist/tab';\n//\n\n//import Vue from 'vue/dist/vue.esm.js';\n\n// import Bootstrap-Vue\n/*import { Carousel } from 'bootstrap-vue/es/components';\nVue.use(Carousel);*/\n\nimport 'offcanvas-bootstrap/dist/js/bootstrap.offcanvas';\n\n// import your custom UI components\nimport './main';\n\nfunction importAll(r) {\n return r.keys().map(r);\n}\n\nconst images = importAll(require.context('../img/', false, /\\.(png|jpe?g|svg)$/));\nconst fontAwesome = importAll(require.context('font-awesome', false, /\\.(otf|eot|svg|ttf|woff|woff2)$/));\n\n\n// WEBPACK FOOTER //\n// ./app/client/src/js/app.js","import $ from 'jquery';\n\nconst SpinnerUI = (($) => {\n class SpinnerUI {\n static show(callback) {\n $('#PageLoading').show(0, callback);\n }\n\n static hide(callback) {\n $('#PageLoading').hide('slow', callback);\n }\n }\n\n return SpinnerUI;\n})($);\n\nexport default SpinnerUI;\n\n\n\n// WEBPACK FOOTER //\n// ./app/client/src/js/_components/_ui.spinner.js","import $ from 'jquery';\n\nimport Events from '../_events';\n\nconst CarouselUI = (($) => {\n // Constants\n const NAME = 'CarouselUI';\n\n class CarouselUI {\n // Static methods\n\n static each(callback) {\n $('.js-carousel').each(function(i, e) {\n callback(i, $(e));\n });\n }\n\n static init() {\n this.dispose();\n\n this.each((i, e) => {\n const $e = $(e),\n id = `Carousel${i}`;\n\n $e.attr('id', id);\n $e.data('id', i);\n\n const $items = $(e).find('.carousel-item'),\n count = $items.length;\n if (!count) {\n return;\n }\n\n // create carousel-controls\n if ($e.data('indicators')) {\n const $indicators = $('<ol class=\"carousel-indicators\"></ol>');\n $indicators.append('<li data-target=\"#' + id + '\" data-slide-to=\"0\" class=\"active\"></li>');\n for (let i = 1; i < count; i++) {\n $indicators.append('<li data-target=\"#' + id + '\" data-slide-to=\"' + i + '\"></li>');\n }\n $e.prepend($indicators);\n }\n\n // create arrows\n if ($e.data('arrows')) {\n $e.prepend('<i class=\"carousel-control-prev\" data-target=\"#' + id + '\" role=\"button\" data-slide=\"prev\"><i class=\"fas fa-chevron-left\" aria-hidden=\"true\"></i><i class=\"sr-only\">Previous</i></i>');\n $e.prepend('<i class=\"carousel-control-next\" data-target=\"#' + id + '\" role=\"button\" data-slide=\"next\"><i class=\"fas fa-chevron-right\" aria-hidden=\"true\"></i><i class=\"sr-only\">Next</i></i>');\n }\n\n // init carousel\n $e.carousel();\n\n // init touch swipes\n $e.hammer().bind('swipeleft', (event) => {\n $(event.target).carousel('next');\n });\n\n $e.hammer().bind('swiperight', (event) => {\n $(event.target).carousel('prev');\n });\n\n $e.hammer().bind('panleft', (event) => {\n $(event.target).carousel('next');\n });\n\n $e.hammer().bind('panright', (event) => {\n $(event.target).carousel('prev');\n });\n\n $e.hammer().bind('tap', (event) => {\n $(event.target).carousel('next');\n });\n });\n }\n\n static dispose() {\n this.each((i, e) => {\n $(e).carousel('dispose');\n });\n }\n }\n\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n CarouselUI.init();\n });\n\n return CarouselUI;\n})($);\n\nexport default CarouselUI;\n\n\n// WEBPACK FOOTER //\n// ./app/client/src/js/_components/_ui.carousel.js","import $ from 'jquery';\n\nconst SlidingMenu = (($) => {\n // Constants\n const NAME = 'jsSlidingMenu';\n const DATA_KEY = NAME;\n\n class SlidingMenu {\n // Constructor\n constructor(element) {\n this._element = element;\n const $element = $(this._element);\n $element.addClass(`${NAME}-active`);\n\n // esc button\n $(window).on('keyup',((e) => {\n if (e.which === 27) {\n $element.find('.is-open[data-toggle=\"offcanvas\"]').click();\n }\n }));\n }\n\n // Public methods\n dispose() {\n console.log(`Disposing: ${NAME} elements`);\n\n $(this._element).removeClass(`${NAME}-active`);\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n\n static _jQueryInterface() {\n return this.each(function () {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new SlidingMenu(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = SlidingMenu._jQueryInterface;\n $.fn[NAME].Constructor = SlidingMenu;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return SlidingMenu._jQueryInterface;\n };\n\n // auto-apply\n $(`.ui.${NAME}`).ready(() => {\n $(`.ui.${NAME}`).jsSlidingMenu();\n });\n\n return SlidingMenu;\n})($);\n\nexport default SlidingMenu;\n\n\n\n// WEBPACK FOOTER //\n// ./app/client/src/js/_components/_ui.menu.js","import $ from 'jquery';\nimport Events from \"../_events\";\n\nconst FormStorage = (($) => {\n // Constants\n const NAME = 'jsFormStorage';\n const DATA_KEY = NAME;\n const STORAGE = window.localStorage;\n\n class FormStorage {\n // Constructor\n constructor(element) {\n this._element = element;\n const $element = $(this._element);\n const $elements = $element.find('input,textarea');\n\n $element.addClass(`${NAME}-active`);\n\n // restore form data from localStorage\n $elements.each(function () {\n const id = $(this).attr('id');\n const type = $(this).attr('type');\n const val = STORAGE.getItem(NAME + id);\n\n if (id && val && type) {\n if (type && (type === 'checkbox' || type === 'radio')) {\n $(this).prop('checked', val);\n } else {\n $(this).val(val);\n }\n }\n });\n\n // store form data into localStorage\n $elements.change(function () {\n const id = $(this).attr('id');\n const type = $(this).attr('type');\n let val = $(this).val();\n\n if (type && (type === 'checkbox' || type === 'radio')) {\n val = !!$(this).is(':checked');\n }\n\n if (id && type && type !== 'password') {\n STORAGE.setItem(NAME + id, val);\n }\n });\n\n $element.submit(() => {\n $element.data(DATA_KEY).clear();\n });\n\n $element.find('button,[type=\"submit\"],[type=\"clear\"]').click(() => {\n $element.data(DATA_KEY).clear();\n });\n }\n\n // Public methods\n dispose() {\n const $element = $(this._element);\n\n $element.removeClass(`${NAME}-active`);\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n\n clear() {\n STORAGE.clear();\n }\n\n static _jQueryInterface() {\n if (typeof window.localStorage !== 'undefined') {\n return this.each(function () {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new FormStorage(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n }\n\n // jQuery interface\n $.fn[NAME] = FormStorage._jQueryInterface;\n $.fn[NAME].Constructor = FormStorage;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return FormStorage._jQueryInterface;\n };\n\n // auto-apply\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n $('form').jsFormStorage();\n });\n\n return FormStorage;\n})($);\n\nexport default FormStorage;\n\n\n\n// WEBPACK FOOTER //\n// ./app/client/src/js/_components/_ui.form.storage.js","\"use strict\";\n\nimport $ from 'jquery';\nimport Events from '../_events';\nimport Spinner from './_ui.spinner';\n\nconst AjaxUI = (($) => {\n // Constants\n const G = window;\n const D = document;\n const $Html = $('html');\n const $Body = $('body');\n\n const NAME = 'jsAjaxUI';\n const DATA_KEY = NAME;\n\n class AjaxUI {\n // Constructor\n constructor(element) {\n this._element = element;\n const $element = $(this._element);\n $element.addClass(`${NAME}-active`);\n\n $element.bind('click', function (e) {\n e.preventDefault();\n\n const $this = $(this);\n\n $('.ajax').each(function () {\n const $this = $(this);\n $this.removeClass('active');\n $this.parents('.nav-item').removeClass('active');\n });\n\n $this.addClass('loading');\n\n AjaxUI.load($this.attr('href'), () => {\n $this.removeClass('loading');\n $this.parents('.nav-item').addClass('active');\n $this.addClass('active');\n });\n });\n }\n\n // Public methods\n static load(url, callback) {\n // show spinner\n Spinner.show(() => {\n $Body.removeClass('loaded');\n });\n\n // update document location\n G.MainUI.updateLocation(url);\n\n const absoluteLocation = G.URLDetails['base'] + G.URLDetails['relative'].substring(1);\n if (absoluteLocation !== G.location.href) {\n G.history.pushState({\n ajax: true,\n page: absoluteLocation,\n }, document.title, absoluteLocation);\n }\n\n $.ajax({\n sync: false,\n async: true,\n url,\n dataType: 'json',\n method: 'GET',\n cache: false,\n error(jqXHR) {\n console.warn(`AJAX request failure: ${jqXHR.statusText}`);\n G.location.href = url;\n\n // google analytics\n if (typeof G.ga === 'function') {\n G.ga('send', 'event', 'error', 'AJAX ERROR', jqXHR.statusText);\n }\n },\n success(data, status, jqXHR) {\n AjaxUI.process(data,jqXHR, callback);\n\n // google analytics\n if (typeof G.ga === 'function') {\n G.ga('set', {\n page: G.URLDetails['relative'] + G.URLDetails['hash'],\n title: jqXHR.getResponseHeader('X-Title'),\n });\n G.ga('send', 'pageview');\n }\n },\n });\n }\n\n static process(data, jqXHR, callback) {\n const css = jqXHR.getResponseHeader('X-Include-CSS').split(',') || [];\n const js = jqXHR.getResponseHeader('X-Include-JS').split(',') || [];\n\n // Replace HTML regions\n if (typeof (data.regions) === 'object') {\n for (const key in data.regions) {\n if (typeof (data.regions[key]) === 'string') {\n AjaxUI.replaceRegion(data.regions[key], key);\n }\n }\n }\n\n // remove already loaded scripts\n $('link[type=\"text/css\"]').each(function () {\n const i = css.indexOf($(this).attr('href'));\n if (i > -1) {\n css.splice(i, 1);\n }else if(!$Body.data('unload-blocked')) {\n console.log(`Unloading: ${ $(this).attr('href')}`);\n $(this).remove();\n }\n });\n\n $('script[type=\"text/javascript\"]').each(function () {\n const i = js.indexOf($(this).attr('src'));\n if (i > -1) {\n js.splice(i, 1);\n }else if(!$Body.data('unload-blocked')) {\n console.log(`Unloading: ${ $(this).attr('src')}`);\n $(this).remove();\n }\n });\n\n // preload CSS\n this.preload(css).then(() => {\n const $head = $('head');\n css.forEach((el) => {\n $head.append(`<link rel=\"stylesheet\" type=\"text/css\" href=\"${el}\" />`);\n });\n\n // preload JS\n this.preload(js, 'script').then(() => {\n\n js.forEach((el) => {\n $Body.append(`<script type=\"text/javascript\" charset=\"UTF-8\" src=\"${el}\"></script>`);\n });\n\n console.log('New page is loaded!');\n\n // trigger events\n if (typeof (data.events) === 'object') {\n for (const eventName in data.events) {\n $(D).trigger(eventName, [data.events[eventName]]);\n }\n }\n\n if (typeof callback !== 'undefined') {\n callback();\n }\n\n $(G).trigger(Events.AJAX);\n });\n });\n }\n\n static preload(items, type = 'text', cache = true) {\n if (!items.length) {\n return $.Deferred().resolve().promise();\n }\n\n const dfds = [];\n items.forEach((url) => {\n const dfd = $.Deferred();\n\n $.ajax({\n dataType: type,\n cache,\n url,\n }).always(() => {\n dfd.resolve();\n });\n\n dfds.push(dfd);\n });\n\n // return a master promise object which will resolve when all the deferred objects have resolved\n return $.when(...dfds);\n }\n\n static replaceRegion(html, key) {\n const $region = $(`[data-ajax-region=\"${key}\"]`);\n\n if ($region.length) {\n $region.empty().append(html);\n } else {\n console.warn('Region returned without class or id!');\n }\n }\n\n dispose() {\n const $element = $(this._element);\n\n $element.removeClass(`${NAME}-active`);\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n\n static _jQueryInterface() {\n return this.each(function () {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new AjaxUI(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = AjaxUI._jQueryInterface;\n $.fn[NAME].Constructor = AjaxUI;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return AjaxUI._jQueryInterface;\n };\n\n // auto-apply\n $('.ajax').ready(() => {\n $('.ajax').jsAjaxUI();\n });\n\n // AJAX update browser title\n $(D).on('layoutRefresh', (e, data) => {\n D.title = data.Title;\n\n $Html.attr('class','');\n if(data.ClassName){\n $Html.addClass(data.ClassName);\n }\n //data.Link = (data.Link === '/home/') ? '/' : data.Link;\n });\n\n // Back/Forward functionality\n G.onpopstate = function(event) {\n const $existingLink = $(`a[href^=\"${ D.location }\"]`);\n\n if(event.state !== null && event.state.ajax){\n console.log('GOBACK (AJAX state)');\n AjaxUI.load(event.state.page);\n }else if($existingLink.length && $existingLink.hasClass('ajax')){\n console.log('GOBACK (AJAX link)');\n $existingLink.trigger('click');\n }else{\n console.log('GOBACK (HTTP)');\n G.location.href = D.location;\n }\n };\n\n return AjaxUI;\n})($);\n\nexport default AjaxUI;\n\n\n\n// WEBPACK FOOTER //\n// ./app/client/src/js/_components/_ui.ajax.js","\"use strict\";\n\nimport $ from 'jquery';\n\nimport 'hammerjs/hammer';\nimport 'jquery-hammerjs/jquery.hammer';\n\n// Routie\nimport 'pouchdb/dist/pouchdb';\nimport './_components/routes/index';\n\nimport Events from './_events';\nimport Spinner from './_components/_ui.spinner';\n\nimport './_components/_ui.carousel';\nimport './_components/_ui.menu';\nimport './_components/_ui.form.storage';\nimport AjaxUI from './_components/_ui.ajax';\n\nimport SmoothScroll from 'smooth-scroll';\nconst smoothScroll = SmoothScroll();\n\nconst MainUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'MainUI';\n\n // get browser locale\n //const Locale = $('html').attr('lang').substring(0, 2);\n\n const $AlertNotify = $('#AlertNotify');\n const $SiteWideMessage = $('#SiteWideMessage');\n\n // get browser window visibility preferences\n // Opera 12.10, Firefox >=18, Chrome >=31, IE11\n const HiddenName = 'hidden';\n const VisibilityChangeEvent = 'visibilitychange';\n\n // update visibility state\n D.addEventListener(VisibilityChangeEvent, () => {\n if (D.visibilityState === HiddenName) {\n console.log('Tab: hidden');\n $Body.addClass('is-hidden');\n $Body.trigger('tabHidden');\n } else {\n console.log('Tab: focused');\n $Body.removeClass('is-hidden');\n $Body.trigger('tabFocused');\n }\n });\n\n\n // update online/offline state\n const updateOnlineStatus = function() {\n if (!navigator.onLine) {\n console.log('Tab: offline');\n $Body.addClass('is-offline');\n $Body.trigger('offline');\n } else {\n console.log('Tab: online');\n $Body.removeClass('is-offline');\n $Body.trigger('online');\n }\n };\n\n if (typeof navigator.onLine !== 'undefined') {\n W.addEventListener('offline', () => {\n updateOnlineStatus();\n }, false);\n\n W.addEventListener('online', () => {\n updateOnlineStatus();\n }, false);\n\n W.addEventListener('load', () => {\n updateOnlineStatus();\n });\n }\n\n // scrollTo\n const ScrollTo = function(trigger, selector) {\n smoothScroll.animateScroll(\n D.querySelector(selector),\n trigger, {\n speed: 500,\n offset: -20,\n //easing: 'easeInOutCubic',\n // Callback API\n //before: function (anchor, toggle) {}, // Callback to run before scroll\n //`after: function (anchor, toggle) {} // Callback to run after scroll\n }\n );\n };\n\n // session ping\n setInterval(() => {\n if ($Body.hasClass('is-offline')) {\n return;\n }\n\n $.ajax({\n sync: false,\n async: true,\n cache: false,\n url: '/Security/ping',\n global: false,\n type: 'POST',\n complete(data, datastatus) {\n if (datastatus !== 'success') {\n W.location.reload(false);\n }\n },\n });\n }, 300000); // 5 min in ms\n\n W.URLDetails = {\n 'base': $('base').attr('href'),\n 'relative': '/',\n 'hash': '',\n };\n\n class MainUI {\n // Static methods\n\n static init() {\n this.dispose();\n\n console.log(`Initializing: ${NAME}`);\n\n // update location details\n this.updateLocation();\n\n // mark available offline areas\n if ('caches' in W) {\n $('a.offline').addClass('offline-available');\n }\n\n this.loadImages();\n\n // mark external links\n $('a.external,a[rel=\"external\"]').attr('target', '_blank');\n\n // show encoded emails\n /*$(D).find('.obm').each(function () {\n if ($(this).attr('data-val') !== undefined) {\n const email = $(this).attr('data-val').split('')\n .reverse()\n .join('')\n .slice(0, -8)\n .replace(/[a-zA-Z]/g, (c) => String.fromCharCode((c <= 'Z' ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26))\n .replace('#AT#', '@');\n const attr = $(this).attr('data-val-append');\n if (attr !== undefined && attr !== false) {\n $(this).append(email);\n }\n if ($(this).find('.sr-only').length > 0) {\n $(this).find('.sr-only').append(email);\n }\n if ($(this).attr('href') !== undefined) {\n $(this).attr('href', `mailto:${email}`);\n }\n }\n });*/\n //\n\n // scroll links\n $(D).on('click', '.js-scrollTo', function(e) {\n e.preventDefault();\n ScrollTo(this, $(this).attr('data-target'));\n });\n\n // load external fonts\n if ($('[data-extfont]').length) {\n $.getScript('//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js', () => {\n const fonts = [];\n $('[data-extfont]').each(function(i) {\n fonts[i] = $(this).attr('data-extfont');\n });\n W.WebFont.load({\n google: {\n families: fonts,\n },\n });\n });\n }\n\n // hide spinner\n Spinner.hide(() => {\n $Body.addClass('loaded');\n });\n\n // fire page printing\n if (W.URLDetails['hash'].indexOf('printpage') > -1) {\n W.print();\n }\n }\n\n static updateLocation(url) {\n let location = url || W.location.href;\n location = location.replace(W.URLDetails['base'], '/');\n const hash = location.indexOf('#');\n\n W.URLDetails.relative = location.split('#')[0];\n W.URLDetails.hash = (hash >= 0) ? location.substr(location.indexOf('#')) : '';\n }\n\n // show site-wide alert\n static alert(msg, cls) {\n $SiteWideMessage.fadeOut('fast');\n\n $SiteWideMessage.html(`<div class=\"page-alert\"><div class=\"alert alert-${cls}\"><i class=\"close\" data-dismiss=\"alert\">×</i>${msg}</div></div>`);\n $SiteWideMessage.find('.page-alert').alert();\n\n $SiteWideMessage.find('.close[data-dismiss=\"alert\"]').click(() => {\n $SiteWideMessage.fadeOut('slow', () => {\n $SiteWideMessage.find('.page-alert').alert('close');\n });\n });\n\n $SiteWideMessage.fadeIn('slow');\n\n if ($AlertNotify.length) {\n $AlertNotify[0].play();\n }\n\n $(W).trigger('alert-appeared');\n }\n\n // hide site-wide alert\n static alertHide() {\n if ($SiteWideMessage.length !== 0) {\n $SiteWideMessage.fadeOut('slow', () => {\n $SiteWideMessage.find('.alert').alert('close');\n });\n }\n\n if (\n $AlertNotify.length &&\n typeof $AlertNotify[0].stop !== 'undefined'\n ) {\n $AlertNotify[0].stop();\n }\n\n $(W).trigger('alert-removed');\n }\n\n // load all images\n static loadImages() {\n const $imgs = $Body.find('img');\n const $imgUrls = [];\n const $imgLazyUrls = [];\n\n // collect image details\n $imgs.each(function() {\n const src = $(this).attr('src');\n const lazySrc = $(this).data('lazy-src');\n if (src.length) {\n $imgUrls.push(src);\n }\n if (lazySrc) {\n $imgLazyUrls.push(lazySrc);\n }\n });\n\n // load defined images\n AjaxUI.preload($imgUrls).then(() => {\n $(W).trigger('images-loaded');\n\n // load lazy images\n AjaxUI.preload($imgLazyUrls).then(() => {\n // update lazy img src\n $('img[data-lazy-src]').each(function() {\n if (!$(this).attr('src')) {\n return;\n }\n $(this).attr('src', $(this).data('lazy-src'));\n });\n\n console.log('All images are loaded!');\n\n $(W).trigger('images-lazy-loaded');\n });\n });\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n }\n }\n\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n MainUI.init();\n });\n\n W.MainUI = MainUI;\n\n return MainUI;\n})($);\n\nexport default MainUI;\n\n\n// WEBPACK FOOTER //\n// ./app/client/src/js/main.js","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Util = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator;\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || '';\n }\n\n try {\n var $selector = $(document).find(selector);\n return $selector.length > 0 ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $(element).css('transition-duration');\n var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n }\n };\n setTransitionEndSupport();\n return Util;\n}($);\n//# sourceMappingURL=util.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/js/dist/util.js\n// module id = 8\n// module chunks = 0","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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Alert = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'alert';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Selector = {\n DISMISS: '[data-dismiss=\"alert\"]'\n };\n var Event = {\n CLOSE: \"close\" + EVENT_KEY,\n CLOSED: \"closed\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n ALERT: 'alert',\n FADE: 'fade',\n SHOW: 'show'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Alert =\n /*#__PURE__*/\n function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Private\n\n\n _proto._getRootElement = function _getRootElement(element) {\n var selector = Util.getSelectorFromElement(element);\n var parent = false;\n\n if (selector) {\n parent = $(selector)[0];\n }\n\n if (!parent) {\n parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $.Event(Event.CLOSE);\n $(element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $(element).removeClass(ClassName.SHOW);\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $(element).one(Util.TRANSITION_END, function (event) {\n return _this._destroyElement(element, event);\n }).emulateTransitionEnd(transitionDuration);\n };\n\n _proto._destroyElement = function _destroyElement(element) {\n $(element).detach().trigger(Event.CLOSED).remove();\n }; // Static\n\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY, data);\n }\n\n if (config === 'close') {\n data[config](this);\n }\n });\n };\n\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault();\n }\n\n alertInstance.close(this);\n };\n };\n\n _createClass(Alert, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Alert;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface;\n $.fn[NAME].Constructor = Alert;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n\n return Alert;\n}($);\n//# sourceMappingURL=alert.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/js/dist/alert.js\n// module id = 9\n// module chunks = 0","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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Button = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'button';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.button';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ClassName = {\n ACTIVE: 'active',\n BUTTON: 'btn',\n FOCUS: 'focus'\n };\n var Selector = {\n DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n INPUT: 'input',\n ACTIVE: '.active',\n BUTTON: '.btn'\n };\n var Event = {\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY + DATA_API_KEY + \" \" + (\"blur\" + EVENT_KEY + DATA_API_KEY)\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Button =\n /*#__PURE__*/\n function () {\n function Button(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Button.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];\n\n if (rootElement) {\n var input = $(this._element).find(Selector.INPUT)[0];\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = $(rootElement).find(Selector.ACTIVE)[0];\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE);\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n return;\n }\n\n input.checked = !$(this._element).hasClass(ClassName.ACTIVE);\n $(input).trigger('change');\n }\n\n input.focus();\n addAriaPressed = false;\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE);\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Static\n\n\n Button._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n if (!data) {\n data = new Button(this);\n $(this).data(DATA_KEY, data);\n }\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n };\n\n _createClass(Button, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n event.preventDefault();\n var button = event.target;\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON);\n }\n\n Button._jQueryInterface.call($(button), 'toggle');\n }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n var button = $(event.target).closest(Selector.BUTTON)[0];\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface;\n $.fn[NAME].Constructor = Button;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Button._jQueryInterface;\n };\n\n return Button;\n}($);\n//# sourceMappingURL=button.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/js/dist/button.js\n// module id = 10\n// module chunks = 0","function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Carousel = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'carousel';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.carousel';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n var Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true\n };\n var DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean'\n };\n var Direction = {\n NEXT: 'next',\n PREV: 'prev',\n LEFT: 'left',\n RIGHT: 'right'\n };\n var Event = {\n SLIDE: \"slide\" + EVENT_KEY,\n SLID: \"slid\" + EVENT_KEY,\n KEYDOWN: \"keydown\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY,\n TOUCHEND: \"touchend\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n CAROUSEL: 'carousel',\n ACTIVE: 'active',\n SLIDE: 'slide',\n RIGHT: 'carousel-item-right',\n LEFT: 'carousel-item-left',\n NEXT: 'carousel-item-next',\n PREV: 'carousel-item-prev',\n ITEM: 'carousel-item'\n };\n var Selector = {\n ACTIVE: '.active',\n ACTIVE_ITEM: '.active.carousel-item',\n ITEM: '.carousel-item',\n NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n INDICATORS: '.carousel-indicators',\n DATA_SLIDE: '[data-slide], [data-slide-to]',\n DATA_RIDE: '[data-ride=\"carousel\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Carousel =\n /*#__PURE__*/\n function () {\n function Carousel(element, config) {\n this._items = null;\n this._interval = null;\n this._activeElement = null;\n this._isPaused = false;\n this._isSliding = false;\n this.touchTimeout = null;\n this._config = this._getConfig(config);\n this._element = $(element)[0];\n this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0];\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Carousel.prototype;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n this.next();\n }\n };\n\n _proto.prev = function prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n };\n\n _proto.pause = function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n if ($(this._element).find(Selector.NEXT_PREV)[0]) {\n Util.triggerTransitionEnd(this._element);\n this.cycle(true);\n }\n\n clearInterval(this._interval);\n this._interval = null;\n };\n\n _proto.cycle = function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n }\n };\n\n _proto.to = function to(index) {\n var _this = this;\n\n this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this._items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, function () {\n return _this.to(index);\n });\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n this._slide(direction, this._items[index]);\n };\n\n _proto.dispose = function dispose() {\n $(this._element).off(EVENT_KEY);\n $.removeData(this._element, DATA_KEY);\n this._items = null;\n this._config = null;\n this._element = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this2 = this;\n\n if (this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $(this._element).on(Event.MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(Event.MOUSELEAVE, function (event) {\n return _this2.cycle(event);\n });\n\n if ('ontouchstart' in document.documentElement) {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n $(this._element).on(Event.TOUCHEND, function () {\n _this2.pause();\n\n if (_this2.touchTimeout) {\n clearTimeout(_this2.touchTimeout);\n }\n\n _this2.touchTimeout = setTimeout(function (event) {\n return _this2.cycle(event);\n }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval);\n });\n }\n }\n };\n\n _proto._keydown = function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n\n default:\n }\n };\n\n _proto._getItemIndex = function _getItemIndex(element) {\n this._items = $.makeArray($(element).parent().find(Selector.ITEM));\n return this._items.indexOf(element);\n };\n\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === Direction.NEXT;\n var isPrevDirection = direction === Direction.PREV;\n\n var activeIndex = this._getItemIndex(activeElement);\n\n var lastItemIndex = this._items.length - 1;\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement;\n }\n\n var delta = direction === Direction.PREV ? -1 : 1;\n var itemIndex = (activeIndex + delta) % this._items.length;\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n };\n\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n var targetIndex = this._getItemIndex(relatedTarget);\n\n var fromIndex = this._getItemIndex($(this._element).find(Selector.ACTIVE_ITEM)[0]);\n\n var slideEvent = $.Event(Event.SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $(this._element).trigger(slideEvent);\n return slideEvent;\n };\n\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this3 = this;\n\n var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];\n\n var activeElementIndex = this._getItemIndex(activeElement);\n\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var isCycling = Boolean(this._interval);\n var directionalClassName;\n var orderClassName;\n var eventDirectionName;\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT;\n orderClassName = ClassName.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName.RIGHT;\n orderClassName = ClassName.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false;\n return;\n }\n\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return;\n }\n\n this._isSliding = true;\n\n if (isCycling) {\n this.pause();\n }\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $(activeElement).addClass(directionalClassName);\n $(nextElement).addClass(directionalClassName);\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $(activeElement).one(Util.TRANSITION_END, function () {\n $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName.ACTIVE);\n $(activeElement).removeClass(ClassName.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n _this3._isSliding = false;\n setTimeout(function () {\n return $(_this3._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE);\n $(nextElement).addClass(ClassName.ACTIVE);\n this._isSliding = false;\n $(this._element).trigger(slidEvent);\n }\n\n if (isCycling) {\n this.cycle();\n }\n }; // Static\n\n\n Carousel._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $(this).data());\n\n if (typeof config === 'object') {\n _config = _objectSpread({}, _config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'number') {\n data.to(config);\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n }\n\n data[action]();\n } else if (_config.interval) {\n data.pause();\n data.cycle();\n }\n });\n };\n\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n var selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var target = $(selector)[0];\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return;\n }\n\n var config = _objectSpread({}, $(target).data(), $(this).data());\n\n var slideIndex = this.getAttribute('data-slide-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Carousel._jQueryInterface.call($(target), config);\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);\n $(window).on(Event.LOAD_DATA_API, function () {\n $(Selector.DATA_RIDE).each(function () {\n var $carousel = $(this);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Carousel._jQueryInterface;\n $.fn[NAME].Constructor = Carousel;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Carousel._jQueryInterface;\n };\n\n return Carousel;\n}($);\n//# sourceMappingURL=carousel.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/js/dist/carousel.js\n// module id = 11\n// module chunks = 0","function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Collapse = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'collapse';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.collapse';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Default = {\n toggle: true,\n parent: ''\n };\n var DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var Event = {\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SHOW: 'show',\n COLLAPSE: 'collapse',\n COLLAPSING: 'collapsing',\n COLLAPSED: 'collapsed'\n };\n var Dimension = {\n WIDTH: 'width',\n HEIGHT: 'height'\n };\n var Selector = {\n ACTIVES: '.show, .collapsing',\n DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Collapse =\n /*#__PURE__*/\n function () {\n function Collapse(element, config) {\n this._isTransitioning = false;\n this._element = element;\n this._config = this._getConfig(config);\n this._triggerArray = $.makeArray($(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n var tabToggles = $(Selector.DATA_TOGGLE);\n\n for (var i = 0; i < tabToggles.length; i++) {\n var elem = tabToggles[i];\n var selector = Util.getSelectorFromElement(elem);\n\n if (selector !== null && $(selector).filter(element).length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = $.makeArray($(this._parent).find(Selector.ACTIVES).filter(\"[data-parent=\\\"\" + this._config.parent + \"\\\"]\"));\n\n if (actives.length === 0) {\n actives = null;\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $.Event(Event.SHOW);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $(actives).data(DATA_KEY, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length > 0) {\n $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $(_this._element).trigger(Event.SHOWN);\n };\n\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n var scrollSize = \"scroll\" + capitalizedDimension;\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n this._element.style[dimension] = this._element[scrollSize] + \"px\";\n };\n\n _proto.hide = function hide() {\n var _this2 = this;\n\n if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var startEvent = $.Event(Event.HIDE);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n var dimension = this._getDimension();\n\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n Util.reflow(this._element);\n $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);\n\n if (this._triggerArray.length > 0) {\n for (var i = 0; i < this._triggerArray.length; i++) {\n var trigger = this._triggerArray[i];\n var selector = Util.getSelectorFromElement(trigger);\n\n if (selector !== null) {\n var $elem = $(selector);\n\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);\n }\n }\n }\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n _this2.setTransitioning(false);\n\n $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n };\n\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning;\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._config = null;\n this._parent = null;\n this._element = null;\n this._triggerArray = null;\n this._isTransitioning = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n };\n\n _proto._getParent = function _getParent() {\n var _this3 = this;\n\n var parent = null;\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent; // It's a jQuery object\n\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0];\n }\n } else {\n parent = $(this._config.parent)[0];\n }\n\n var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n $(parent).find(selector).each(function (i, element) {\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n });\n return parent;\n };\n\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n if (element) {\n var isOpen = $(element).hasClass(ClassName.SHOW);\n\n if (triggerArray.length > 0) {\n $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n }\n }\n }; // Static\n\n\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n var selector = Util.getSelectorFromElement(element);\n return selector ? $(selector)[0] : null;\n };\n\n Collapse._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {});\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault();\n }\n\n var $trigger = $(this);\n var selector = Util.getSelectorFromElement(this);\n $(selector).each(function () {\n var $target = $(this);\n var data = $target.data(DATA_KEY);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Collapse._jQueryInterface;\n $.fn[NAME].Constructor = Collapse;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Collapse._jQueryInterface;\n };\n\n return Collapse;\n}($);\n//# sourceMappingURL=collapse.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/js/dist/collapse.js\n// module id = 12\n// module chunks = 0","function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Dropdown = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'dropdown';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.dropdown';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY + DATA_API_KEY,\n KEYUP_DATA_API: \"keyup\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DISABLED: 'disabled',\n SHOW: 'show',\n DROPUP: 'dropup',\n DROPRIGHT: 'dropright',\n DROPLEFT: 'dropleft',\n MENURIGHT: 'dropdown-menu-right',\n MENULEFT: 'dropdown-menu-left',\n POSITION_STATIC: 'position-static'\n };\n var Selector = {\n DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n FORM_CHILD: '.dropdown form',\n MENU: '.dropdown-menu',\n NAVBAR_NAV: '.navbar-nav',\n VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n };\n var AttachmentMap = {\n TOP: 'top-start',\n TOPEND: 'top-end',\n BOTTOM: 'bottom-start',\n BOTTOMEND: 'bottom-end',\n RIGHT: 'right-start',\n RIGHTEND: 'right-end',\n LEFT: 'left-start',\n LEFTEND: 'left-end'\n };\n var Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic'\n };\n var DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Dropdown =\n /*#__PURE__*/\n function () {\n function Dropdown(element, config) {\n this._element = element;\n this._popper = null;\n this._config = this._getConfig(config);\n this._menu = this._getMenuElement();\n this._inNavbar = this._detectNavbar();\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Dropdown.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n var isActive = $(this._menu).hasClass(ClassName.SHOW);\n\n Dropdown._clearMenus();\n\n if (isActive) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $.Event(Event.SHOW, relatedTarget);\n $(parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n } // Disable totally Popper.js for Dropdown in Navbar\n\n\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');\n }\n\n var referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = parent;\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference; // Check if it's jQuery element\n\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0];\n }\n } // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n\n\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC);\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n } // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n if ('ontouchstart' in document.documentElement && $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n $(this._menu).toggleClass(ClassName.SHOW);\n $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n $(this._element).off(EVENT_KEY);\n this._element = null;\n this._menu = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n\n this._popper = null;\n }\n };\n\n _proto.update = function update() {\n this._inNavbar = this._detectNavbar();\n\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Private\n\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this = this;\n\n $(this._element).on(Event.CLICK, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n _this.toggle();\n });\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getMenuElement = function _getMenuElement() {\n if (!this._menu) {\n var parent = Dropdown._getParentFromElement(this._element);\n\n this._menu = $(parent).find(Selector.MENU)[0];\n }\n\n return this._menu;\n };\n\n _proto._getPlacement = function _getPlacement() {\n var $parentDropdown = $(this._element).parent();\n var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP;\n\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND;\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT;\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT;\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND;\n }\n\n return placement;\n };\n\n _proto._detectNavbar = function _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0;\n };\n\n _proto._getPopperConfig = function _getPopperConfig() {\n var _this2 = this;\n\n var offsetConf = {};\n\n if (typeof this._config.offset === 'function') {\n offsetConf.fn = function (data) {\n data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});\n return data;\n };\n } else {\n offsetConf.offset = this._config.offset;\n }\n\n var popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: offsetConf,\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n } // Disable Popper.js if we have a static display\n\n };\n\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n };\n }\n\n return popperConfig;\n }; // Static\n\n\n Dropdown._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data) {\n data = new Dropdown(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n Dropdown._clearMenus = function _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return;\n }\n\n var toggles = $.makeArray($(Selector.DATA_TOGGLE));\n\n for (var i = 0; i < toggles.length; i++) {\n var parent = Dropdown._getParentFromElement(toggles[i]);\n\n var context = $(toggles[i]).data(DATA_KEY);\n var relatedTarget = {\n relatedTarget: toggles[i]\n };\n\n if (!context) {\n continue;\n }\n\n var dropdownMenu = context._menu;\n\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue;\n }\n\n if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n continue;\n }\n\n var hideEvent = $.Event(Event.HIDE, relatedTarget);\n $(parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n continue;\n } // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n toggles[i].setAttribute('aria-expanded', 'false');\n $(dropdownMenu).removeClass(ClassName.SHOW);\n $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));\n }\n };\n\n Dropdown._getParentFromElement = function _getParentFromElement(element) {\n var parent;\n var selector = Util.getSelectorFromElement(element);\n\n if (selector) {\n parent = $(selector)[0];\n }\n\n return parent || element.parentNode;\n }; // eslint-disable-next-line complexity\n\n\n Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this);\n\n var isActive = $(parent).hasClass(ClassName.SHOW);\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];\n $(toggle).trigger('focus');\n }\n\n $(this).trigger('click');\n return;\n }\n\n var items = $(parent).find(Selector.VISIBLE_ITEMS).get();\n\n if (items.length === 0) {\n return;\n }\n\n var index = items.indexOf(event.target);\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) {\n // Up\n index--;\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n // Down\n index++;\n }\n\n if (index < 0) {\n index = 0;\n }\n\n items[index].focus();\n };\n\n _createClass(Dropdown, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Dropdown;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + \" \" + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n Dropdown._jQueryInterface.call($(this), 'toggle');\n }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {\n e.stopPropagation();\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Dropdown._jQueryInterface;\n $.fn[NAME].Constructor = Dropdown;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Dropdown._jQueryInterface;\n };\n\n return Dropdown;\n}($, Popper);\n//# sourceMappingURL=dropdown.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/js/dist/dropdown.js\n// module id = 13\n// module chunks = 0","function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Modal = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'modal';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.modal';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n RESIZE: \"resize\" + EVENT_KEY,\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY,\n KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY,\n MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY,\n MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n BACKDROP: 'modal-backdrop',\n OPEN: 'modal-open',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DIALOG: '.modal-dialog',\n DATA_TOGGLE: '[data-toggle=\"modal\"]',\n DATA_DISMISS: '[data-dismiss=\"modal\"]',\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top',\n NAVBAR_TOGGLER: '.navbar-toggler'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Modal =\n /*#__PURE__*/\n function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = $(element).find(Selector.DIALOG)[0];\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isTransitioning || this._isShown) {\n return;\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $.Event(Event.SHOW, {\n relatedTarget: relatedTarget\n });\n $(this._element).trigger(showEvent);\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n $(document.body).addClass(ClassName.OPEN);\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {\n $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {\n if ($(event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (this._isTransitioning || !this._isShown) {\n return;\n }\n\n var hideEvent = $.Event(Event.HIDE);\n $(this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $(this._element).hasClass(ClassName.FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(document).off(Event.FOCUSIN);\n $(this._element).removeClass(ClassName.SHOW);\n $(this._element).off(Event.CLICK_DISMISS);\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n $(window, document, this._element, this._backdrop).off(EVENT_KEY);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this3 = this;\n\n var transition = $(this._element).hasClass(ClassName.FADE);\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.scrollTop = 0;\n\n if (transition) {\n Util.reflow(this._element);\n }\n\n $(this._element).addClass(ClassName.SHOW);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this3._config.focus) {\n _this3._element.focus();\n }\n\n _this3._isTransitioning = false;\n $(_this3._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this4 = this;\n\n $(document).off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, function (event) {\n if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n _this4._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this5 = this;\n\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault();\n\n _this5.hide();\n }\n });\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this6 = this;\n\n if (this._isShown) {\n $(window).on(Event.RESIZE, function (event) {\n return _this6.handleUpdate(event);\n });\n } else {\n $(window).off(Event.RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this7 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $(document.body).removeClass(ClassName.OPEN);\n\n _this7._resetAdjustments();\n\n _this7._resetScrollbar();\n\n $(_this7._element).trigger(Event.HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this8 = this;\n\n var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = ClassName.BACKDROP;\n\n if (animate) {\n $(this._backdrop).addClass(animate);\n }\n\n $(this._backdrop).appendTo(document.body);\n $(this._element).on(Event.CLICK_DISMISS, function (event) {\n if (_this8._ignoreBackdropClick) {\n _this8._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (_this8._config.backdrop === 'static') {\n _this8._element.focus();\n } else {\n _this8.hide();\n }\n });\n\n if (animate) {\n Util.reflow(this._backdrop);\n }\n\n $(this._backdrop).addClass(ClassName.SHOW);\n\n if (!callback) {\n return;\n }\n\n if (!animate) {\n callback();\n return;\n }\n\n var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this8._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n }; // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this9 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n // Adjust fixed content padding\n $(Selector.FIXED_CONTENT).each(function (index, element) {\n var actualPadding = $(element)[0].style.paddingRight;\n var calculatedPadding = $(element).css('padding-right');\n $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $(Selector.STICKY_CONTENT).each(function (index, element) {\n var actualMargin = $(element)[0].style.marginRight;\n var calculatedMargin = $(element).css('margin-right');\n $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n }); // Adjust navbar-toggler margin\n\n $(Selector.NAVBAR_TOGGLER).each(function (index, element) {\n var actualMargin = $(element)[0].style.marginRight;\n var calculatedMargin = $(element).css('margin-right');\n $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this9._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $(document.body).css('padding-right');\n $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n $(Selector.FIXED_CONTENT).each(function (index, element) {\n var padding = $(element).data('padding-right');\n\n if (typeof padding !== 'undefined') {\n $(element).css('padding-right', padding).removeData('padding-right');\n }\n }); // Restore sticky content and navbar-toggler margin\n\n $(Selector.STICKY_CONTENT + \", \" + Selector.NAVBAR_TOGGLER).each(function (index, element) {\n var margin = $(element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $(document.body).data('padding-right');\n\n if (typeof padding !== 'undefined') {\n $(document.body).css('padding-right', padding).removeData('padding-right');\n }\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n }; // Static\n\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $(this).data(), typeof config === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n var _this10 = this;\n\n var target;\n var selector = Util.getSelectorFromElement(this);\n\n if (selector) {\n target = $(selector)[0];\n }\n\n var config = $(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $(target).one(Event.SHOW, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(Event.HIDDEN, function () {\n if ($(_this10).is(':visible')) {\n _this10.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($(target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Modal._jQueryInterface;\n $.fn[NAME].Constructor = Modal;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Modal._jQueryInterface;\n };\n\n return Modal;\n}($);\n//# sourceMappingURL=modal.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/js/dist/modal.js\n// module id = 14\n// module chunks = 0","function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Tooltip = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tooltip';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.tooltip';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)'\n };\n var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent'\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n };\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $.removeData(this.element, this.constructor.DATA_KEY);\n $(this.element).off(this.constructor.EVENT_KEY);\n $(this.element).closest('.modal').off('hide.bs.modal');\n\n if (this.tip) {\n $(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent);\n var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n var container = this.config.container === false ? document.body : $(this.config.container);\n $(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container);\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n _this._handlePopperPlacementChange(data);\n }\n });\n $(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Protected\n\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement());\n this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n var html = this.config.html;\n\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($(content).text());\n }\n } else {\n $element[html ? 'html' : 'text'](content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n }; // Private\n\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this3 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {\n return _this3.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;\n $(_this3.element).on(eventIn, _this3.config.selector, function (event) {\n return _this3._enter(event);\n }).on(eventOut, _this3.config.selector, function (event) {\n return _this3._leave(event);\n });\n }\n\n $(_this3.element).closest('.modal').on('hide.bs.modal', function () {\n return _this3.hide();\n });\n });\n\n if (this.config.selector) {\n this.config = _objectSpread({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) {\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(data.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $(tip).removeClass(ClassName.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n }; // Static\n\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Tooltip._jQueryInterface;\n $.fn[NAME].Constructor = Tooltip;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tooltip._jQueryInterface;\n };\n\n return Tooltip;\n}($, Popper);\n//# sourceMappingURL=tooltip.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/js/dist/tooltip.js\n// module id = 15\n// module chunks = 0","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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Popover = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'popover';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.popover';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-popover';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n\n var Default = _objectSpread({}, Tooltip.Default, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n });\n\n var DefaultType = _objectSpread({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TITLE: '.popover-header',\n CONTENT: '.popover-body'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Popover =\n /*#__PURE__*/\n function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype;\n\n // Overrides\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle());\n\n var content = this._getContent();\n\n if (typeof content === 'function') {\n content = content.call(this.element);\n }\n\n this.setElementContent($tip.find(Selector.CONTENT), content);\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n }; // Private\n\n\n _proto._getContent = function _getContent() {\n return this.element.getAttribute('data-content') || this.config.content;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n }; // Static\n\n\n Popover._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data && /destroy|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Popover, null, [{\n key: \"VERSION\",\n // Getters\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Popover._jQueryInterface;\n $.fn[NAME].Constructor = Popover;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Popover._jQueryInterface;\n };\n\n return Popover;\n}($);\n//# sourceMappingURL=popover.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/js/dist/popover.js\n// module id = 16\n// module chunks = 0","function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Tooltip = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tooltip';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.tooltip';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)'\n };\n var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent'\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n };\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $.removeData(this.element, this.constructor.DATA_KEY);\n $(this.element).off(this.constructor.EVENT_KEY);\n $(this.element).closest('.modal').off('hide.bs.modal');\n\n if (this.tip) {\n $(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent);\n var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n var container = this.config.container === false ? document.body : $(this.config.container);\n $(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container);\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n _this._handlePopperPlacementChange(data);\n }\n });\n $(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n }; // Protected\n\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement());\n this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n var html = this.config.html;\n\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($(content).text());\n }\n } else {\n $element[html ? 'html' : 'text'](content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n }; // Private\n\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this3 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {\n return _this3.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;\n $(_this3.element).on(eventIn, _this3.config.selector, function (event) {\n return _this3._enter(event);\n }).on(eventOut, _this3.config.selector, function (event) {\n return _this3._leave(event);\n });\n }\n\n $(_this3.element).closest('.modal').on('hide.bs.modal', function () {\n return _this3.hide();\n });\n });\n\n if (this.config.selector) {\n this.config = _objectSpread({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) {\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(data.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $(tip).removeClass(ClassName.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n }; // Static\n\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Tooltip._jQueryInterface;\n $.fn[NAME].Constructor = Tooltip;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tooltip._jQueryInterface;\n };\n\n return Tooltip;\n}($, Popper);\n//# sourceMappingURL=tooltip.js.map\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = Tooltip;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/exports-loader?Tooltip!./node_modules/bootstrap/js/dist/tooltip.js\n// module id = 17\n// module chunks = 0","function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar ScrollSpy = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'scrollspy';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.scrollspy';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Default = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var Event = {\n ACTIVATE: \"activate\" + EVENT_KEY,\n SCROLL: \"scroll\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_ITEM: 'dropdown-item',\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active'\n };\n var Selector = {\n DATA_SPY: '[data-spy=\"scroll\"]',\n ACTIVE: '.active',\n NAV_LIST_GROUP: '.nav, .list-group',\n NAV_LINKS: '.nav-link',\n NAV_ITEMS: '.nav-item',\n LIST_ITEMS: '.list-group-item',\n DROPDOWN: '.dropdown',\n DROPDOWN_ITEMS: '.dropdown-item',\n DROPDOWN_TOGGLE: '.dropdown-toggle'\n };\n var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var ScrollSpy =\n /*#__PURE__*/\n function () {\n function ScrollSpy(element, config) {\n var _this = this;\n\n this._element = element;\n this._scrollElement = element.tagName === 'BODY' ? window : element;\n this._config = this._getConfig(config);\n this._selector = this._config.target + \" \" + Selector.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector.DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $(this._scrollElement).on(Event.SCROLL, function (event) {\n return _this._process(event);\n });\n this.refresh();\n\n this._process();\n } // Getters\n\n\n var _proto = ScrollSpy.prototype;\n\n // Public\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n this._offsets = [];\n this._targets = [];\n this._scrollHeight = this._getScrollHeight();\n var targets = $.makeArray($(this._selector));\n targets.map(function (element) {\n var target;\n var targetSelector = Util.getSelectorFromElement(element);\n\n if (targetSelector) {\n target = $(targetSelector)[0];\n }\n\n if (target) {\n var targetBCR = target.getBoundingClientRect();\n\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n }\n }\n\n return null;\n }).filter(function (item) {\n return item;\n }).sort(function (a, b) {\n return a[0] - b[0];\n }).forEach(function (item) {\n _this2._offsets.push(item[0]);\n\n _this2._targets.push(item[1]);\n });\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n $(this._scrollElement).off(EVENT_KEY);\n this._element = null;\n this._scrollElement = null;\n this._config = null;\n this._selector = null;\n this._offsets = null;\n this._targets = null;\n this._activeTarget = null;\n this._scrollHeight = null;\n }; // Private\n\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string') {\n var id = $(config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME);\n $(config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getScrollTop = function _getScrollTop() {\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n };\n\n _proto._getScrollHeight = function _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n };\n\n _proto._getOffsetHeight = function _getOffsetHeight() {\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n };\n\n _proto._process = function _process() {\n var scrollTop = this._getScrollTop() + this._config.offset;\n\n var scrollHeight = this._getScrollHeight();\n\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh();\n }\n\n if (scrollTop >= maxScroll) {\n var target = this._targets[this._targets.length - 1];\n\n if (this._activeTarget !== target) {\n this._activate(target);\n }\n\n return;\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null;\n\n this._clear();\n\n return;\n }\n\n for (var i = this._offsets.length; i--;) {\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n if (isActiveTarget) {\n this._activate(this._targets[i]);\n }\n }\n };\n\n _proto._activate = function _activate(target) {\n this._activeTarget = target;\n\n this._clear();\n\n var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style\n\n\n queries = queries.map(function (selector) {\n return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + (selector + \"[href=\\\"\" + target + \"\\\"]\");\n });\n var $link = $(queries.join(','));\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n $link.addClass(ClassName.ACTIVE);\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + \", \" + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);\n }\n\n $(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n });\n };\n\n _proto._clear = function _clear() {\n $(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n }; // Static\n\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new ScrollSpy(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(ScrollSpy, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(window).on(Event.LOAD_DATA_API, function () {\n var scrollSpys = $.makeArray($(Selector.DATA_SPY));\n\n for (var i = scrollSpys.length; i--;) {\n var $spy = $(scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = ScrollSpy._jQueryInterface;\n $.fn[NAME].Constructor = ScrollSpy;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return ScrollSpy._jQueryInterface;\n };\n\n return ScrollSpy;\n}($);\n//# sourceMappingURL=scrollspy.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/js/dist/scrollspy.js\n// module id = 18\n// module chunks = 0","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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nvar Tab = function ($) {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n var NAME = 'tab';\n var VERSION = '4.1.1';\n var DATA_KEY = 'bs.tab';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active',\n DISABLED: 'disabled',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DROPDOWN: '.dropdown',\n NAV_LIST_GROUP: '.nav, .list-group',\n ACTIVE: '.active',\n ACTIVE_UL: '> li > .active',\n DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE: '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tab =\n /*#__PURE__*/\n function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE;\n previous = $.makeArray($(listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $.Event(Event.HIDE, {\n relatedTarget: this._element\n });\n var showEvent = $.Event(Event.SHOW, {\n relatedTarget: previous\n });\n\n if (previous) {\n $(previous).trigger(hideEvent);\n }\n\n $(this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (selector) {\n target = $(selector)[0];\n }\n\n this._activate(this._element, listElement);\n\n var complete = function complete() {\n var hiddenEvent = $.Event(Event.HIDDEN, {\n relatedTarget: _this._element\n });\n var shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: previous\n });\n $(previous).trigger(hiddenEvent);\n $(_this._element).trigger(shownEvent);\n };\n\n if (target) {\n this._activate(target, target.parentNode, complete);\n } else {\n complete();\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }; // Private\n\n\n _proto._activate = function _activate(element, container, callback) {\n var _this2 = this;\n\n var activeElements;\n\n if (container.nodeName === 'UL') {\n activeElements = $(container).find(Selector.ACTIVE_UL);\n } else {\n activeElements = $(container).children(Selector.ACTIVE);\n }\n\n var active = activeElements[0];\n var isTransitioning = callback && active && $(active).hasClass(ClassName.FADE);\n\n var complete = function complete() {\n return _this2._transitionComplete(element, active, callback);\n };\n\n if (active && isTransitioning) {\n var transitionDuration = Util.getTransitionDurationFromElement(active);\n $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(ClassName.SHOW + \" \" + ClassName.ACTIVE);\n var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(ClassName.ACTIVE);\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false);\n }\n }\n\n $(element).addClass(ClassName.ACTIVE);\n\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true);\n }\n\n Util.reflow(element);\n $(element).addClass(ClassName.SHOW);\n\n if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];\n\n if (dropdownElement) {\n $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n }\n\n element.setAttribute('aria-expanded', true);\n }\n\n if (callback) {\n callback();\n }\n }; // Static\n\n\n Tab._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY);\n\n if (!data) {\n data = new Tab(this);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tab, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Tab;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($(this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tab._jQueryInterface;\n $.fn[NAME].Constructor = Tab;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tab._jQueryInterface;\n };\n\n return Tab;\n}($);\n//# sourceMappingURL=tab.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap/js/dist/tab.js\n// module id = 19\n// module chunks = 0","(function() {\n var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n (function($, window) {\n var Offcanvas, OffcanvasDropdown, OffcanvasTouch;\n OffcanvasDropdown = (function() {\n function OffcanvasDropdown(element) {\n this.element = element;\n this._clickEvent = __bind(this._clickEvent, this);\n this.element = $(this.element);\n this.nav = this.element.closest(\".nav\");\n this.dropdown = this.element.parent().find(\".dropdown-menu\");\n this.element.on('click', this._clickEvent);\n this.nav.closest('.navbar-offcanvas').on('click', (function(_this) {\n return function() {\n if (_this.dropdown.is('.shown')) {\n return _this.dropdown.removeClass('shown').closest('.open').removeClass('open');\n }\n };\n })(this));\n }\n\n OffcanvasDropdown.prototype._clickEvent = function(e) {\n if (!this.dropdown.hasClass('shown')) {\n e.preventDefault();\n }\n e.stopPropagation();\n $('.dropdown-toggle').not(this.element).closest('.open').removeClass('open').find('.dropdown-menu').removeClass('shown');\n this.dropdown.toggleClass(\"shown\");\n return this.element.parent().toggleClass('open');\n };\n\n return OffcanvasDropdown;\n\n })();\n OffcanvasTouch = (function() {\n function OffcanvasTouch(button, element, location, offcanvas) {\n this.button = button;\n this.element = element;\n this.location = location;\n this.offcanvas = offcanvas;\n this._getFade = __bind(this._getFade, this);\n this._getCss = __bind(this._getCss, this);\n this._touchEnd = __bind(this._touchEnd, this);\n this._touchMove = __bind(this._touchMove, this);\n this._touchStart = __bind(this._touchStart, this);\n this.endThreshold = 130;\n this.startThreshold = this.element.hasClass('navbar-offcanvas-right') ? $(\"body\").outerWidth() - 60 : 20;\n this.maxStartThreshold = this.element.hasClass('navbar-offcanvas-right') ? $(\"body\").outerWidth() - 20 : 60;\n this.currentX = 0;\n this.fade = this.element.hasClass('navbar-offcanvas-fade') ? true : false;\n $(document).on(\"touchstart\", this._touchStart);\n $(document).on(\"touchmove\", this._touchMove);\n $(document).on(\"touchend\", this._touchEnd);\n }\n\n OffcanvasTouch.prototype._touchStart = function(e) {\n this.startX = e.originalEvent.touches[0].pageX;\n if (this.element.is('.in')) {\n return this.element.height($(window).outerHeight());\n }\n };\n\n OffcanvasTouch.prototype._touchMove = function(e) {\n var x;\n if ($(e.target).parents('.navbar-offcanvas').length > 0) {\n return true;\n }\n if (this.startX > this.startThreshold && this.startX < this.maxStartThreshold) {\n e.preventDefault();\n x = e.originalEvent.touches[0].pageX - this.startX;\n x = this.element.hasClass('navbar-offcanvas-right') ? -x : x;\n if (Math.abs(x) < this.element.outerWidth()) {\n this.element.css(this._getCss(x));\n return this.element.css(this._getFade(x));\n }\n } else if (this.element.hasClass('in')) {\n e.preventDefault();\n x = e.originalEvent.touches[0].pageX + (this.currentX - this.startX);\n x = this.element.hasClass('navbar-offcanvas-right') ? -x : x;\n if (Math.abs(x) < this.element.outerWidth()) {\n this.element.css(this._getCss(x));\n return this.element.css(this._getFade(x));\n }\n }\n };\n\n OffcanvasTouch.prototype._touchEnd = function(e) {\n var end, sendEvents, x;\n if ($(e.target).parents('.navbar-offcanvas').length > 0) {\n return true;\n }\n sendEvents = false;\n x = e.originalEvent.changedTouches[0].pageX;\n if (Math.abs(x) === this.startX) {\n return;\n }\n end = this.element.hasClass('navbar-offcanvas-right') ? Math.abs(x) > (this.endThreshold + 50) : x < (this.endThreshold + 50);\n if (this.element.hasClass('in') && end) {\n this.currentX = 0;\n this.element.removeClass('in').css(this._clearCss());\n this.button.removeClass('is-open');\n sendEvents = true;\n } else if (Math.abs(x - this.startX) > this.endThreshold && this.startX > this.startThreshold && this.startX < this.maxStartThreshold) {\n this.currentX = this.element.hasClass('navbar-offcanvas-right') ? -this.element.outerWidth() : this.element.outerWidth();\n this.element.toggleClass('in').css(this._clearCss());\n this.button.toggleClass('is-open');\n sendEvents = true;\n } else {\n this.element.css(this._clearCss());\n }\n return this.offcanvas.bodyOverflow(sendEvents);\n };\n\n OffcanvasTouch.prototype._getCss = function(x) {\n x = this.element.hasClass('navbar-offcanvas-right') ? -x : x;\n return {\n \"-webkit-transform\": \"translate3d(\" + x + \"px, 0px, 0px)\",\n \"-webkit-transition-duration\": \"0s\",\n \"-moz-transform\": \"translate3d(\" + x + \"px, 0px, 0px)\",\n \"-moz-transition\": \"0s\",\n \"-o-transform\": \"translate3d(\" + x + \"px, 0px, 0px)\",\n \"-o-transition\": \"0s\",\n \"transform\": \"translate3d(\" + x + \"px, 0px, 0px)\",\n \"transition\": \"0s\"\n };\n };\n\n OffcanvasTouch.prototype._getFade = function(x) {\n if (this.fade) {\n return {\n \"opacity\": x / this.element.outerWidth()\n };\n } else {\n return {};\n }\n };\n\n OffcanvasTouch.prototype._clearCss = function() {\n return {\n \"-webkit-transform\": \"\",\n \"-webkit-transition-duration\": \"\",\n \"-moz-transform\": \"\",\n \"-moz-transition\": \"\",\n \"-o-transform\": \"\",\n \"-o-transition\": \"\",\n \"transform\": \"\",\n \"transition\": \"\",\n \"opacity\": \"\"\n };\n };\n\n return OffcanvasTouch;\n\n })();\n window.Offcanvas = Offcanvas = (function() {\n function Offcanvas(element) {\n var t, target;\n this.element = element;\n this.bodyOverflow = __bind(this.bodyOverflow, this);\n this._sendEventsAfter = __bind(this._sendEventsAfter, this);\n this._sendEventsBefore = __bind(this._sendEventsBefore, this);\n this._documentClicked = __bind(this._documentClicked, this);\n this._close = __bind(this._close, this);\n this._open = __bind(this._open, this);\n this._clicked = __bind(this._clicked, this);\n this._navbarHeight = __bind(this._navbarHeight, this);\n target = this.element.attr('data-target') ? this.element.attr('data-target') : false;\n if (target) {\n this.target = $(target);\n if (this.target.length && !this.target.hasClass('js-offcanvas-done')) {\n this.element.addClass('js-offcanvas-has-events');\n this.location = this.target.hasClass(\"navbar-offcanvas-right\") ? \"right\" : \"left\";\n this.target.addClass(this._transformSupported() ? \"offcanvas-transform js-offcanvas-done\" : \"offcanvas-position js-offcanvas-done\");\n this.target.data('offcanvas', this);\n this.element.on(\"click\", this._clicked);\n this.target.on('transitionend', (function(_this) {\n return function() {\n if (_this.target.is(':not(.in)')) {\n return _this.target.height('');\n }\n };\n })(this));\n $(document).on(\"click\", this._documentClicked);\n if (this.target.hasClass('navbar-offcanvas-touch')) {\n t = new OffcanvasTouch(this.element, this.target, this.location, this);\n }\n this.target.find(\".dropdown-toggle\").each(function() {\n var d;\n return d = new OffcanvasDropdown(this);\n });\n this.target.on('offcanvas.toggle', (function(_this) {\n return function(e) {\n return _this._clicked(e);\n };\n })(this));\n this.target.on('offcanvas.close', (function(_this) {\n return function(e) {\n return _this._close(e);\n };\n })(this));\n this.target.on('offcanvas.open', (function(_this) {\n return function(e) {\n return _this._open(e);\n };\n })(this));\n }\n } else {\n console.warn('Offcanvas: `data-target` attribute must be present.');\n }\n }\n\n Offcanvas.prototype._navbarHeight = function() {\n if (this.target.is('.in')) {\n return this.target.height($(window).outerHeight());\n }\n };\n\n Offcanvas.prototype._clicked = function(e) {\n e.preventDefault();\n this._sendEventsBefore();\n $(\".navbar-offcanvas\").not(this.target).trigger('offcanvas.close');\n this.target.toggleClass('in');\n this.element.toggleClass('is-open');\n this._navbarHeight();\n return this.bodyOverflow();\n };\n\n Offcanvas.prototype._open = function(e) {\n e.preventDefault();\n if (this.target.is('.in')) {\n return;\n }\n this._sendEventsBefore();\n this.target.addClass('in');\n this.element.addClass('is-open');\n this._navbarHeight();\n return this.bodyOverflow();\n };\n\n Offcanvas.prototype._close = function(e) {\n e.preventDefault();\n if (this.target.is(':not(.in)')) {\n return;\n }\n this._sendEventsBefore();\n this.target.removeClass('in');\n this.element.removeClass('is-open');\n this._navbarHeight();\n return this.bodyOverflow();\n };\n\n Offcanvas.prototype._documentClicked = function(e) {\n var clickedEl;\n clickedEl = $(e.target);\n if (!clickedEl.hasClass('offcanvas-toggle') && clickedEl.parents('.offcanvas-toggle').length === 0 && clickedEl.parents('.navbar-offcanvas').length === 0 && !clickedEl.hasClass('navbar-offcanvas')) {\n if (this.target.hasClass('in')) {\n e.preventDefault();\n this._sendEventsBefore();\n this.target.removeClass('in');\n this.element.removeClass('is-open');\n this._navbarHeight();\n return this.bodyOverflow();\n }\n }\n };\n\n Offcanvas.prototype._sendEventsBefore = function() {\n if (this.target.hasClass('in')) {\n return this.target.trigger('hide.bs.offcanvas');\n } else {\n return this.target.trigger('show.bs.offcanvas');\n }\n };\n\n Offcanvas.prototype._sendEventsAfter = function() {\n if (this.target.hasClass('in')) {\n return this.target.trigger('shown.bs.offcanvas');\n } else {\n return this.target.trigger('hidden.bs.offcanvas');\n }\n };\n\n Offcanvas.prototype.bodyOverflow = function(events) {\n if (events == null) {\n events = true;\n }\n if (this.target.is('.in')) {\n $('body').addClass('offcanvas-stop-scrolling');\n } else {\n $('body').removeClass('offcanvas-stop-scrolling');\n }\n if (events) {\n return this._sendEventsAfter();\n }\n };\n\n Offcanvas.prototype._transformSupported = function() {\n var asSupport, el, regex, translate3D;\n el = document.createElement('div');\n translate3D = \"translate3d(0px, 0px, 0px)\";\n regex = /translate3d\\(0px, 0px, 0px\\)/g;\n el.style.cssText = \"-webkit-transform: \" + translate3D + \"; -moz-transform: \" + translate3D + \"; -o-transform: \" + translate3D + \"; transform: \" + translate3D;\n asSupport = el.style.cssText.match(regex);\n return asSupport.length != null;\n };\n\n return Offcanvas;\n\n })();\n $.fn.bsOffcanvas = function() {\n return this.each(function() {\n return new Offcanvas($(this));\n });\n };\n return $(function() {\n $('[data-toggle=\"offcanvas\"]').each(function() {\n return $(this).bsOffcanvas();\n });\n $(window).on('resize', function() {\n $('.navbar-offcanvas.in').each(function() {\n return $(this).height('').removeClass('in');\n });\n $('.offcanvas-toggle').removeClass('is-open');\n return $('body').removeClass('offcanvas-stop-scrolling');\n });\n return $('.offcanvas-toggle').each(function() {\n return $(this).on('click', function(e) {\n var el, selector;\n if (!$(this).hasClass('js-offcanvas-has-events')) {\n selector = $(this).attr('data-target');\n el = $(selector);\n if (el) {\n el.height('');\n el.removeClass('in');\n return $('body').css({\n overflow: '',\n position: ''\n });\n }\n }\n });\n });\n });\n })(window.jQuery, window);\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/offcanvas-bootstrap/dist/js/bootstrap.offcanvas.js\n// module id = 20\n// module chunks = 0","(function(factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['jquery', 'hammerjs'], factory);\r\n } else if (typeof exports === 'object') {\r\n factory(require('jquery'), require('hammerjs'));\r\n } else {\r\n factory(jQuery, Hammer);\r\n }\r\n}(function($, Hammer) {\r\n function hammerify(el, options) {\r\n var $el = $(el);\r\n if(!$el.data(\"hammer\")) {\r\n $el.data(\"hammer\", new Hammer($el[0], options));\r\n }\r\n }\r\n\r\n $.fn.hammer = function(options) {\r\n return this.each(function() {\r\n hammerify(this, options);\r\n });\r\n };\r\n\r\n // extend the emit method to also trigger jQuery events\r\n Hammer.Manager.prototype.emit = (function(originalEmit) {\r\n return function(type, data) {\r\n originalEmit.call(this, type, data);\r\n $(this.element).trigger({\r\n type: type,\r\n gesture: data\r\n });\r\n };\r\n })(Hammer.Manager.prototype.emit);\r\n}));\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/jquery-hammerjs/jquery.hammer.js\n// module id = 21\n// module chunks = 0","// PouchDB 6.4.3\n// \n// (c) 2012-2018 Dale Harvey and the PouchDB team\n// PouchDB may be freely distributed under the Apache license, version 2.0.\n// For all details and documentation:\n// http://pouchdb.com\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.PouchDB = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = argsArray;\n\nfunction argsArray(fun) {\n return function () {\n var len = arguments.length;\n if (len) {\n var args = [];\n var i = -1;\n while (++i < len) {\n args[i] = arguments[i];\n }\n return fun.call(this, args);\n } else {\n return fun.call(this, []);\n }\n };\n}\n},{}],2:[function(_dereq_,module,exports){\n(function (process){\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = _dereq_(3);\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // Internet Explorer and Edge do not support colors.\n if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n return false;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n\n}).call(this,_dereq_(9))\n},{\"3\":3,\"9\":9}],3:[function(_dereq_,module,exports){\n\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = _dereq_(8);\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n var prevTime;\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n debug.destroy = destroy;\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n exports.instances.push(debug);\n\n return debug;\n}\n\nfunction destroy () {\n var index = exports.instances.indexOf(this);\n if (index !== -1) {\n exports.instances.splice(index, 1);\n return true;\n } else {\n return false;\n }\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var i;\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n\n for (i = 0; i < exports.instances.length; i++) {\n var instance = exports.instances[i];\n instance.enabled = exports.enabled(instance.namespace);\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n if (name[name.length - 1] === '*') {\n return true;\n }\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n\n},{\"8\":8}],4:[function(_dereq_,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\n},{}],5:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],6:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(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} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n\n},{}],7:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(5);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"5\":5}],8:[function(_dereq_,module,exports){\n/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n\n},{}],9:[function(_dereq_,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],10:[function(_dereq_,module,exports){\n(function (factory) {\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD\n define(factory);\n } else {\n // Browser globals (with support for web workers)\n var glob;\n\n try {\n glob = window;\n } catch (e) {\n glob = self;\n }\n\n glob.SparkMD5 = factory();\n }\n}(function (undefined) {\n\n 'use strict';\n\n /*\n * Fastest md5 implementation around (JKM md5).\n * Credits: Joseph Myers\n *\n * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n * @see http://jsperf.com/md5-shootout/7\n */\n\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n var add32 = function (a, b) {\n return (a + b) & 0xFFFFFFFF;\n },\n hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n function cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n }\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n }\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n // containing the last element of the parent array if the sub array specified starts\n // beyond the length of the parent array - weird.\n // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << ((i % 4) << 3);\n }\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n\n return state;\n }\n\n function rhex(n) {\n var s = '',\n j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n }\n return s;\n }\n\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n }\n\n // In some cases the fast add32 function cannot be used..\n if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n add32 = function (x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xFFFF);\n };\n }\n\n // ---------------------------------------------------\n\n /**\n * ArrayBuffer slice polyfill.\n *\n * @see https://github.com/ttaubert/node-arraybuffer-slice\n */\n\n if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = (val | 0) || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n\n return target;\n };\n })();\n }\n\n // ---------------------------------------------------\n\n /**\n * Helpers.\n */\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation.\n *\n * Use this class to perform an incremental md5, otherwise use the\n * static methods instead.\n */\n\n function SparkMD5() {\n // call reset to init the instance\n this.reset();\n }\n\n /**\n * Appends a string.\n * A conversion will be applied if an utf8 string is detected.\n *\n * @param {String} str The string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.append = function (str) {\n // Converts the string to utf8 bytes if necessary\n // Then append as binary\n this.appendBinary(toUtf8(str));\n\n return this;\n };\n\n /**\n * Appends a binary string.\n *\n * @param {String} contents The binary string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.reset = function () {\n this._buff = '';\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n\n return this;\n };\n\n /**\n * Releases memory used by the incremental buffer and other additional\n * resources. If you plan to use the instance again, use reset instead.\n */\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n /**\n * Finish the final calculation based on the tail.\n *\n * @param {Array} tail The tail (will be modified)\n * @param {Number} length The length of the remaining buffer\n */\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n /**\n * Performs the md5 hash on a string.\n * A conversion will be applied if utf8 string is detected.\n *\n * @param {String} str The string\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hash = function (str, raw) {\n // Converts the string to utf8 bytes if necessary\n // Then compute it using the binary function\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n /**\n * Performs the md5 hash on a binary string.\n *\n * @param {String} content The binary string\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation for array buffers.\n *\n * Use this class to perform an incremental md5 ONLY for array buffers.\n */\n SparkMD5.ArrayBuffer = function () {\n // call reset to init the instance\n this.reset();\n };\n\n /**\n * Appends an array buffer.\n *\n * @param {ArrayBuffer} arr The array to be appended\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n\n // Convert buffer to a string\n state.buff = arrayBuffer2Utf8Str(state.buff);\n\n return state;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n // Convert string to buffer\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n /**\n * Performs the md5 hash on an array buffer.\n *\n * @param {ArrayBuffer} arr The array buffer\n * @param {Boolean} raw True to get the raw string, false to get the hex one\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n}));\n\n},{}],11:[function(_dereq_,module,exports){\nvar v1 = _dereq_(14);\nvar v4 = _dereq_(15);\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n\n},{\"14\":14,\"15\":15}],12:[function(_dereq_,module,exports){\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]];\n}\n\nmodule.exports = bytesToUuid;\n\n},{}],13:[function(_dereq_,module,exports){\n// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && msCrypto.getRandomValues.bind(msCrypto));\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n\n},{}],14:[function(_dereq_,module,exports){\nvar rng = _dereq_(13);\nvar bytesToUuid = _dereq_(12);\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n\n},{\"12\":12,\"13\":13}],15:[function(_dereq_,module,exports){\nvar rng = _dereq_(13);\nvar bytesToUuid = _dereq_(12);\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n\n},{\"12\":12,\"13\":13}],16:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Stringify/parse functions that don't operate\n * recursively, so they avoid call stack exceeded\n * errors.\n */\nexports.stringify = function stringify(input) {\n var queue = [];\n queue.push({obj: input});\n\n var res = '';\n var next, obj, prefix, val, i, arrayPrefix, keys, k, key, value, objPrefix;\n while ((next = queue.pop())) {\n obj = next.obj;\n prefix = next.prefix || '';\n val = next.val || '';\n res += prefix;\n if (val) {\n res += val;\n } else if (typeof obj !== 'object') {\n res += typeof obj === 'undefined' ? null : JSON.stringify(obj);\n } else if (obj === null) {\n res += 'null';\n } else if (Array.isArray(obj)) {\n queue.push({val: ']'});\n for (i = obj.length - 1; i >= 0; i--) {\n arrayPrefix = i === 0 ? '' : ',';\n queue.push({obj: obj[i], prefix: arrayPrefix});\n }\n queue.push({val: '['});\n } else { // object\n keys = [];\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n keys.push(k);\n }\n }\n queue.push({val: '}'});\n for (i = keys.length - 1; i >= 0; i--) {\n key = keys[i];\n value = obj[key];\n objPrefix = (i > 0 ? ',' : '');\n objPrefix += JSON.stringify(key) + ':';\n queue.push({obj: value, prefix: objPrefix});\n }\n queue.push({val: '{'});\n }\n }\n return res;\n};\n\n// Convenience function for the parse function.\n// This pop function is basically copied from\n// pouchCollate.parseIndexableString\nfunction pop(obj, stack, metaStack) {\n var lastMetaElement = metaStack[metaStack.length - 1];\n if (obj === lastMetaElement.element) {\n // popping a meta-element, e.g. an object whose value is another object\n metaStack.pop();\n lastMetaElement = metaStack[metaStack.length - 1];\n }\n var element = lastMetaElement.element;\n var lastElementIndex = lastMetaElement.index;\n if (Array.isArray(element)) {\n element.push(obj);\n } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n var key = stack.pop();\n element[key] = obj;\n } else {\n stack.push(obj); // obj with key only\n }\n}\n\nexports.parse = function (str) {\n var stack = [];\n var metaStack = []; // stack for arrays and objects\n var i = 0;\n var collationIndex,parsedNum,numChar;\n var parsedString,lastCh,numConsecutiveSlashes,ch;\n var arrayElement, objElement;\n while (true) {\n collationIndex = str[i++];\n if (collationIndex === '}' ||\n collationIndex === ']' ||\n typeof collationIndex === 'undefined') {\n if (stack.length === 1) {\n return stack.pop();\n } else {\n pop(stack.pop(), stack, metaStack);\n continue;\n }\n }\n switch (collationIndex) {\n case ' ':\n case '\\t':\n case '\\n':\n case ':':\n case ',':\n break;\n case 'n':\n i += 3; // 'ull'\n pop(null, stack, metaStack);\n break;\n case 't':\n i += 3; // 'rue'\n pop(true, stack, metaStack);\n break;\n case 'f':\n i += 4; // 'alse'\n pop(false, stack, metaStack);\n break;\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '-':\n parsedNum = '';\n i--;\n while (true) {\n numChar = str[i++];\n if (/[\\d\\.\\-e\\+]/.test(numChar)) {\n parsedNum += numChar;\n } else {\n i--;\n break;\n }\n }\n pop(parseFloat(parsedNum), stack, metaStack);\n break;\n case '\"':\n parsedString = '';\n lastCh = void 0;\n numConsecutiveSlashes = 0;\n while (true) {\n ch = str[i++];\n if (ch !== '\"' || (lastCh === '\\\\' &&\n numConsecutiveSlashes % 2 === 1)) {\n parsedString += ch;\n lastCh = ch;\n if (lastCh === '\\\\') {\n numConsecutiveSlashes++;\n } else {\n numConsecutiveSlashes = 0;\n }\n } else {\n break;\n }\n }\n pop(JSON.parse('\"' + parsedString + '\"'), stack, metaStack);\n break;\n case '[':\n arrayElement = { element: [], index: stack.length };\n stack.push(arrayElement.element);\n metaStack.push(arrayElement);\n break;\n case '{':\n objElement = { element: {}, index: stack.length };\n stack.push(objElement.element);\n metaStack.push(objElement);\n break;\n default:\n throw new Error(\n 'unexpectedly reached end of input: ' + collationIndex);\n }\n }\n};\n\n},{}],17:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar lie = _interopDefault(_dereq_(7));\nvar getArguments = _interopDefault(_dereq_(1));\nvar nextTick = _interopDefault(_dereq_(5));\nvar events = _dereq_(4);\nvar inherits = _interopDefault(_dereq_(6));\nvar uuidV4 = _interopDefault(_dereq_(11));\nvar debug = _interopDefault(_dereq_(2));\nvar Md5 = _interopDefault(_dereq_(10));\nvar vuvuzela = _interopDefault(_dereq_(16));\n\n/* istanbul ignore next */\nvar PouchPromise = typeof Promise === 'function' ? Promise : lie;\n\nfunction isBinaryObject(object) {\n return (typeof ArrayBuffer !== 'undefined' && object instanceof ArrayBuffer) ||\n (typeof Blob !== 'undefined' && object instanceof Blob);\n}\n\nfunction cloneArrayBuffer(buff) {\n if (typeof buff.slice === 'function') {\n return buff.slice(0);\n }\n // IE10-11 slice() polyfill\n var target = new ArrayBuffer(buff.byteLength);\n var targetArray = new Uint8Array(target);\n var sourceArray = new Uint8Array(buff);\n targetArray.set(sourceArray);\n return target;\n}\n\nfunction cloneBinaryObject(object) {\n if (object instanceof ArrayBuffer) {\n return cloneArrayBuffer(object);\n }\n var size = object.size;\n var type = object.type;\n // Blob\n if (typeof object.slice === 'function') {\n return object.slice(0, size, type);\n }\n // PhantomJS slice() replacement\n return object.webkitSlice(0, size, type);\n}\n\n// most of this is borrowed from lodash.isPlainObject:\n// https://github.com/fis-components/lodash.isplainobject/\n// blob/29c358140a74f252aeb08c9eb28bef86f2217d4a/index.js\n\nvar funcToString = Function.prototype.toString;\nvar objectCtorString = funcToString.call(Object);\n\nfunction isPlainObject(value) {\n var proto = Object.getPrototypeOf(value);\n /* istanbul ignore if */\n if (proto === null) { // not sure when this happens, but I guess it can\n return true;\n }\n var Ctor = proto.constructor;\n return (typeof Ctor == 'function' &&\n Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nfunction clone(object) {\n var newObject;\n var i;\n var len;\n\n if (!object || typeof object !== 'object') {\n return object;\n }\n\n if (Array.isArray(object)) {\n newObject = [];\n for (i = 0, len = object.length; i < len; i++) {\n newObject[i] = clone(object[i]);\n }\n return newObject;\n }\n\n // special case: to avoid inconsistencies between IndexedDB\n // and other backends, we automatically stringify Dates\n if (object instanceof Date) {\n return object.toISOString();\n }\n\n if (isBinaryObject(object)) {\n return cloneBinaryObject(object);\n }\n\n if (!isPlainObject(object)) {\n return object; // don't clone objects like Workers\n }\n\n newObject = {};\n for (i in object) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(object, i)) {\n var value = clone(object[i]);\n if (typeof value !== 'undefined') {\n newObject[i] = value;\n }\n }\n }\n return newObject;\n}\n\nfunction once(fun) {\n var called = false;\n return getArguments(function (args) {\n /* istanbul ignore if */\n if (called) {\n // this is a smoke test and should never actually happen\n throw new Error('once called more than once');\n } else {\n called = true;\n fun.apply(this, args);\n }\n });\n}\n\nfunction toPromise(func) {\n //create the function we will be returning\n return getArguments(function (args) {\n // Clone arguments\n args = clone(args);\n var self = this;\n // if the last argument is a function, assume its a callback\n var usedCB = (typeof args[args.length - 1] === 'function') ? args.pop() : false;\n var promise = new PouchPromise(function (fulfill, reject) {\n var resp;\n try {\n var callback = once(function (err, mesg) {\n if (err) {\n reject(err);\n } else {\n fulfill(mesg);\n }\n });\n // create a callback for this invocation\n // apply the function in the orig context\n args.push(callback);\n resp = func.apply(self, args);\n if (resp && typeof resp.then === 'function') {\n fulfill(resp);\n }\n } catch (e) {\n reject(e);\n }\n });\n // if there is a callback, call it back\n if (usedCB) {\n promise.then(function (result) {\n usedCB(null, result);\n }, usedCB);\n }\n return promise;\n });\n}\n\nfunction logApiCall(self, name, args) {\n /* istanbul ignore if */\n if (self.constructor.listeners('debug').length) {\n var logArgs = ['api', self.name, name];\n for (var i = 0; i < args.length - 1; i++) {\n logArgs.push(args[i]);\n }\n self.constructor.emit('debug', logArgs);\n\n // override the callback itself to log the response\n var origCallback = args[args.length - 1];\n args[args.length - 1] = function (err, res) {\n var responseArgs = ['api', self.name, name];\n responseArgs = responseArgs.concat(\n err ? ['error', err] : ['success', res]\n );\n self.constructor.emit('debug', responseArgs);\n origCallback(err, res);\n };\n }\n}\n\nfunction adapterFun(name, callback) {\n return toPromise(getArguments(function (args) {\n if (this._closed) {\n return PouchPromise.reject(new Error('database is closed'));\n }\n if (this._destroyed) {\n return PouchPromise.reject(new Error('database is destroyed'));\n }\n var self = this;\n logApiCall(self, name, args);\n if (!this.taskqueue.isReady) {\n return new PouchPromise(function (fulfill, reject) {\n self.taskqueue.addTask(function (failed) {\n if (failed) {\n reject(failed);\n } else {\n fulfill(self[name].apply(self, args));\n }\n });\n });\n }\n return callback.apply(this, args);\n }));\n}\n\nfunction mangle(key) {\n return '$' + key;\n}\nfunction unmangle(key) {\n return key.substring(1);\n}\nfunction Map$1() {\n this._store = {};\n}\nMap$1.prototype.get = function (key) {\n var mangled = mangle(key);\n return this._store[mangled];\n};\nMap$1.prototype.set = function (key, value) {\n var mangled = mangle(key);\n this._store[mangled] = value;\n return true;\n};\nMap$1.prototype.has = function (key) {\n var mangled = mangle(key);\n return mangled in this._store;\n};\nMap$1.prototype[\"delete\"] = function (key) {\n var mangled = mangle(key);\n var res = mangled in this._store;\n delete this._store[mangled];\n return res;\n};\nMap$1.prototype.forEach = function (cb) {\n var keys = Object.keys(this._store);\n for (var i = 0, len = keys.length; i < len; i++) {\n var key = keys[i];\n var value = this._store[key];\n key = unmangle(key);\n cb(value, key);\n }\n};\nObject.defineProperty(Map$1.prototype, 'size', {\n get: function () {\n return Object.keys(this._store).length;\n }\n});\n\nfunction Set$1(array) {\n this._store = new Map$1();\n\n // init with an array\n if (array && Array.isArray(array)) {\n for (var i = 0, len = array.length; i < len; i++) {\n this.add(array[i]);\n }\n }\n}\nSet$1.prototype.add = function (key) {\n return this._store.set(key, true);\n};\nSet$1.prototype.has = function (key) {\n return this._store.has(key);\n};\nSet$1.prototype.forEach = function (cb) {\n this._store.forEach(function (value, key) {\n cb(key);\n });\n};\nObject.defineProperty(Set$1.prototype, 'size', {\n get: function () {\n return this._store.size;\n }\n});\n\n/* global Map,Set,Symbol */\n// Based on https://kangax.github.io/compat-table/es6/ we can sniff out\n// incomplete Map/Set implementations which would otherwise cause our tests to fail.\n// Notably they fail in IE11 and iOS 8.4, which this prevents.\nfunction supportsMapAndSet() {\n if (typeof Symbol === 'undefined' || typeof Map === 'undefined' || typeof Set === 'undefined') {\n return false;\n }\n var prop = Object.getOwnPropertyDescriptor(Map, Symbol.species);\n return prop && 'get' in prop && Map[Symbol.species] === Map;\n}\n\n// based on https://github.com/montagejs/collections\n/* global Map,Set */\n\nvar ExportedSet;\nvar ExportedMap;\n\n{\n if (supportsMapAndSet()) { // prefer built-in Map/Set\n ExportedSet = Set;\n ExportedMap = Map;\n } else { // fall back to our polyfill\n ExportedSet = Set$1;\n ExportedMap = Map$1;\n }\n}\n\n// like underscore/lodash _.pick()\nfunction pick(obj, arr) {\n var res = {};\n for (var i = 0, len = arr.length; i < len; i++) {\n var prop = arr[i];\n if (prop in obj) {\n res[prop] = obj[prop];\n }\n }\n return res;\n}\n\n// Most browsers throttle concurrent requests at 6, so it's silly\n// to shim _bulk_get by trying to launch potentially hundreds of requests\n// and then letting the majority time out. We can handle this ourselves.\nvar MAX_NUM_CONCURRENT_REQUESTS = 6;\n\nfunction identityFunction(x) {\n return x;\n}\n\nfunction formatResultForOpenRevsGet(result) {\n return [{\n ok: result\n }];\n}\n\n// shim for P/CouchDB adapters that don't directly implement _bulk_get\nfunction bulkGet(db, opts, callback) {\n var requests = opts.docs;\n\n // consolidate into one request per doc if possible\n var requestsById = new ExportedMap();\n requests.forEach(function (request) {\n if (requestsById.has(request.id)) {\n requestsById.get(request.id).push(request);\n } else {\n requestsById.set(request.id, [request]);\n }\n });\n\n var numDocs = requestsById.size;\n var numDone = 0;\n var perDocResults = new Array(numDocs);\n\n function collapseResultsAndFinish() {\n var results = [];\n perDocResults.forEach(function (res) {\n res.docs.forEach(function (info) {\n results.push({\n id: res.id,\n docs: [info]\n });\n });\n });\n callback(null, {results: results});\n }\n\n function checkDone() {\n if (++numDone === numDocs) {\n collapseResultsAndFinish();\n }\n }\n\n function gotResult(docIndex, id, docs) {\n perDocResults[docIndex] = {id: id, docs: docs};\n checkDone();\n }\n\n var allRequests = [];\n requestsById.forEach(function (value, key) {\n allRequests.push(key);\n });\n\n var i = 0;\n\n function nextBatch() {\n\n if (i >= allRequests.length) {\n return;\n }\n\n var upTo = Math.min(i + MAX_NUM_CONCURRENT_REQUESTS, allRequests.length);\n var batch = allRequests.slice(i, upTo);\n processBatch(batch, i);\n i += batch.length;\n }\n\n function processBatch(batch, offset) {\n batch.forEach(function (docId, j) {\n var docIdx = offset + j;\n var docRequests = requestsById.get(docId);\n\n // just use the first request as the \"template\"\n // TODO: The _bulk_get API allows for more subtle use cases than this,\n // but for now it is unlikely that there will be a mix of different\n // \"atts_since\" or \"attachments\" in the same request, since it's just\n // replicate.js that is using this for the moment.\n // Also, atts_since is aspirational, since we don't support it yet.\n var docOpts = pick(docRequests[0], ['atts_since', 'attachments']);\n docOpts.open_revs = docRequests.map(function (request) {\n // rev is optional, open_revs disallowed\n return request.rev;\n });\n\n // remove falsey / undefined revisions\n docOpts.open_revs = docOpts.open_revs.filter(identityFunction);\n\n var formatResult = identityFunction;\n\n if (docOpts.open_revs.length === 0) {\n delete docOpts.open_revs;\n\n // when fetching only the \"winning\" leaf,\n // transform the result so it looks like an open_revs\n // request\n formatResult = formatResultForOpenRevsGet;\n }\n\n // globally-supplied options\n ['revs', 'attachments', 'binary', 'ajax', 'latest'].forEach(function (param) {\n if (param in opts) {\n docOpts[param] = opts[param];\n }\n });\n db.get(docId, docOpts, function (err, res) {\n var result;\n /* istanbul ignore if */\n if (err) {\n result = [{error: err}];\n } else {\n result = formatResult(res);\n }\n gotResult(docIdx, docId, result);\n nextBatch();\n });\n });\n }\n\n nextBatch();\n\n}\n\nfunction isChromeApp() {\n return (typeof chrome !== \"undefined\" &&\n typeof chrome.storage !== \"undefined\" &&\n typeof chrome.storage.local !== \"undefined\");\n}\n\nvar hasLocal;\n\nif (isChromeApp()) {\n hasLocal = false;\n} else {\n try {\n localStorage.setItem('_pouch_check_localstorage', 1);\n hasLocal = !!localStorage.getItem('_pouch_check_localstorage');\n } catch (e) {\n hasLocal = false;\n }\n}\n\nfunction hasLocalStorage() {\n return hasLocal;\n}\n\n// Custom nextTick() shim for browsers. In node, this will just be process.nextTick(). We\n// avoid using process.nextTick() directly because the polyfill is very large and we don't\n// need all of it (see: https://github.com/defunctzombie/node-process).\n// \"immediate\" 3.0.8 is used by lie, and it's a smaller version of the latest \"immediate\"\n// package, so it's the one we use.\n// When we use nextTick() in our codebase, we only care about not releasing Zalgo\n// (see: http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony).\n// Microtask vs macrotask doesn't matter to us. So we're free to use the fastest\n// (least latency) option, which is \"immediate\" due to use of microtasks.\n// All of our nextTicks are isolated to this one function so we can easily swap out one\n// implementation for another.\n\ninherits(Changes, events.EventEmitter);\n\n/* istanbul ignore next */\nfunction attachBrowserEvents(self) {\n if (isChromeApp()) {\n chrome.storage.onChanged.addListener(function (e) {\n // make sure it's event addressed to us\n if (e.db_name != null) {\n //object only has oldValue, newValue members\n self.emit(e.dbName.newValue);\n }\n });\n } else if (hasLocalStorage()) {\n if (typeof addEventListener !== 'undefined') {\n addEventListener(\"storage\", function (e) {\n self.emit(e.key);\n });\n } else { // old IE\n window.attachEvent(\"storage\", function (e) {\n self.emit(e.key);\n });\n }\n }\n}\n\nfunction Changes() {\n events.EventEmitter.call(this);\n this._listeners = {};\n\n attachBrowserEvents(this);\n}\nChanges.prototype.addListener = function (dbName, id, db, opts) {\n /* istanbul ignore if */\n if (this._listeners[id]) {\n return;\n }\n var self = this;\n var inprogress = false;\n function eventFunction() {\n /* istanbul ignore if */\n if (!self._listeners[id]) {\n return;\n }\n if (inprogress) {\n inprogress = 'waiting';\n return;\n }\n inprogress = true;\n var changesOpts = pick(opts, [\n 'style', 'include_docs', 'attachments', 'conflicts', 'filter',\n 'doc_ids', 'view', 'since', 'query_params', 'binary'\n ]);\n\n /* istanbul ignore next */\n function onError() {\n inprogress = false;\n }\n\n db.changes(changesOpts).on('change', function (c) {\n if (c.seq > opts.since && !opts.cancelled) {\n opts.since = c.seq;\n opts.onChange(c);\n }\n }).on('complete', function () {\n if (inprogress === 'waiting') {\n nextTick(eventFunction);\n }\n inprogress = false;\n }).on('error', onError);\n }\n this._listeners[id] = eventFunction;\n this.on(dbName, eventFunction);\n};\n\nChanges.prototype.removeListener = function (dbName, id) {\n /* istanbul ignore if */\n if (!(id in this._listeners)) {\n return;\n }\n events.EventEmitter.prototype.removeListener.call(this, dbName,\n this._listeners[id]);\n delete this._listeners[id];\n};\n\n\n/* istanbul ignore next */\nChanges.prototype.notifyLocalWindows = function (dbName) {\n //do a useless change on a storage thing\n //in order to get other windows's listeners to activate\n if (isChromeApp()) {\n chrome.storage.local.set({dbName: dbName});\n } else if (hasLocalStorage()) {\n localStorage[dbName] = (localStorage[dbName] === \"a\") ? \"b\" : \"a\";\n }\n};\n\nChanges.prototype.notify = function (dbName) {\n this.emit(dbName);\n this.notifyLocalWindows(dbName);\n};\n\nfunction guardedConsole(method) {\n /* istanbul ignore else */\n if (typeof console !== 'undefined' && typeof console[method] === 'function') {\n var args = Array.prototype.slice.call(arguments, 1);\n console[method].apply(console, args);\n }\n}\n\nfunction randomNumber(min, max) {\n var maxTimeout = 600000; // Hard-coded default of 10 minutes\n min = parseInt(min, 10) || 0;\n max = parseInt(max, 10);\n if (max !== max || max <= min) {\n max = (min || 1) << 1; //doubling\n } else {\n max = max + 1;\n }\n // In order to not exceed maxTimeout, pick a random value between half of maxTimeout and maxTimeout\n if (max > maxTimeout) {\n min = maxTimeout >> 1; // divide by two\n max = maxTimeout;\n }\n var ratio = Math.random();\n var range = max - min;\n\n return ~~(range * ratio + min); // ~~ coerces to an int, but fast.\n}\n\nfunction defaultBackOff(min) {\n var max = 0;\n if (!min) {\n max = 2000;\n }\n return randomNumber(min, max);\n}\n\n// designed to give info to browser users, who are disturbed\n// when they see http errors in the console\nfunction explainError(status, str) {\n guardedConsole('info', 'The above ' + status + ' is totally normal. ' + str);\n}\n\nvar assign;\n{\n if (typeof Object.assign === 'function') {\n assign = Object.assign;\n } else {\n // lite Object.assign polyfill based on\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n assign = function (target) {\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n };\n }\n}\n\nvar $inject_Object_assign = assign;\n\ninherits(PouchError, Error);\n\nfunction PouchError(status, error, reason) {\n Error.call(this, reason);\n this.status = status;\n this.name = error;\n this.message = reason;\n this.error = true;\n}\n\nPouchError.prototype.toString = function () {\n return JSON.stringify({\n status: this.status,\n name: this.name,\n message: this.message,\n reason: this.reason\n });\n};\n\nvar UNAUTHORIZED = new PouchError(401, 'unauthorized', \"Name or password is incorrect.\");\nvar MISSING_BULK_DOCS = new PouchError(400, 'bad_request', \"Missing JSON list of 'docs'\");\nvar MISSING_DOC = new PouchError(404, 'not_found', 'missing');\nvar REV_CONFLICT = new PouchError(409, 'conflict', 'Document update conflict');\nvar INVALID_ID = new PouchError(400, 'bad_request', '_id field must contain a string');\nvar MISSING_ID = new PouchError(412, 'missing_id', '_id is required for puts');\nvar RESERVED_ID = new PouchError(400, 'bad_request', 'Only reserved document ids may start with underscore.');\nvar NOT_OPEN = new PouchError(412, 'precondition_failed', 'Database not open');\nvar UNKNOWN_ERROR = new PouchError(500, 'unknown_error', 'Database encountered an unknown error');\nvar BAD_ARG = new PouchError(500, 'badarg', 'Some query argument is invalid');\nvar INVALID_REQUEST = new PouchError(400, 'invalid_request', 'Request was invalid');\nvar QUERY_PARSE_ERROR = new PouchError(400, 'query_parse_error', 'Some query parameter is invalid');\nvar DOC_VALIDATION = new PouchError(500, 'doc_validation', 'Bad special document member');\nvar BAD_REQUEST = new PouchError(400, 'bad_request', 'Something wrong with the request');\nvar NOT_AN_OBJECT = new PouchError(400, 'bad_request', 'Document must be a JSON object');\nvar DB_MISSING = new PouchError(404, 'not_found', 'Database not found');\nvar IDB_ERROR = new PouchError(500, 'indexed_db_went_bad', 'unknown');\nvar WSQ_ERROR = new PouchError(500, 'web_sql_went_bad', 'unknown');\nvar LDB_ERROR = new PouchError(500, 'levelDB_went_went_bad', 'unknown');\nvar FORBIDDEN = new PouchError(403, 'forbidden', 'Forbidden by design doc validate_doc_update function');\nvar INVALID_REV = new PouchError(400, 'bad_request', 'Invalid rev format');\nvar FILE_EXISTS = new PouchError(412, 'file_exists', 'The database could not be created, the file already exists.');\nvar MISSING_STUB = new PouchError(412, 'missing_stub', 'A pre-existing attachment stub wasn\\'t found');\nvar INVALID_URL = new PouchError(413, 'invalid_url', 'Provided URL is invalid');\n\nfunction createError(error, reason) {\n function CustomPouchError(reason) {\n // inherit error properties from our parent error manually\n // so as to allow proper JSON parsing.\n /* jshint ignore:start */\n for (var p in error) {\n if (typeof error[p] !== 'function') {\n this[p] = error[p];\n }\n }\n /* jshint ignore:end */\n if (reason !== undefined) {\n this.reason = reason;\n }\n }\n CustomPouchError.prototype = PouchError.prototype;\n return new CustomPouchError(reason);\n}\n\nfunction generateErrorFromResponse(err) {\n\n if (typeof err !== 'object') {\n var data = err;\n err = UNKNOWN_ERROR;\n err.data = data;\n }\n\n if ('error' in err && err.error === 'conflict') {\n err.name = 'conflict';\n err.status = 409;\n }\n\n if (!('name' in err)) {\n err.name = err.error || 'unknown';\n }\n\n if (!('status' in err)) {\n err.status = 500;\n }\n\n if (!('message' in err)) {\n err.message = err.message || err.reason;\n }\n\n return err;\n}\n\nfunction tryFilter(filter, doc, req) {\n try {\n return !filter(doc, req);\n } catch (err) {\n var msg = 'Filter function threw: ' + err.toString();\n return createError(BAD_REQUEST, msg);\n }\n}\n\nfunction filterChange(opts) {\n var req = {};\n var hasFilter = opts.filter && typeof opts.filter === 'function';\n req.query = opts.query_params;\n\n return function filter(change) {\n if (!change.doc) {\n // CSG sends events on the changes feed that don't have documents,\n // this hack makes a whole lot of existing code robust.\n change.doc = {};\n }\n\n var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);\n\n if (typeof filterReturn === 'object') {\n return filterReturn;\n }\n\n if (filterReturn) {\n return false;\n }\n\n if (!opts.include_docs) {\n delete change.doc;\n } else if (!opts.attachments) {\n for (var att in change.doc._attachments) {\n /* istanbul ignore else */\n if (change.doc._attachments.hasOwnProperty(att)) {\n change.doc._attachments[att].stub = true;\n }\n }\n }\n return true;\n };\n}\n\nfunction flatten(arrs) {\n var res = [];\n for (var i = 0, len = arrs.length; i < len; i++) {\n res = res.concat(arrs[i]);\n }\n return res;\n}\n\n// shim for Function.prototype.name,\n// for browsers that don't support it like IE\n\n/* istanbul ignore next */\n\n// Determine id an ID is valid\n// - invalid IDs begin with an underescore that does not begin '_design' or\n// '_local'\n// - any other string value is a valid id\n// Returns the specific error object for each case\nfunction invalidIdError(id) {\n var err;\n if (!id) {\n err = createError(MISSING_ID);\n } else if (typeof id !== 'string') {\n err = createError(INVALID_ID);\n } else if (/^_/.test(id) && !(/^_(design|local)/).test(id)) {\n err = createError(RESERVED_ID);\n }\n if (err) {\n throw err;\n }\n}\n\n// Checks if a PouchDB object is \"remote\" or not. This is\n// designed to opt-in to certain optimizations, such as\n// avoiding checks for \"dependentDbs\" and other things that\n// we know only apply to local databases. In general, \"remote\"\n// should be true for the http adapter, and for third-party\n// adapters with similar expensive boundaries to cross for\n// every API call, such as socket-pouch and worker-pouch.\n// Previously, this was handled via db.type() === 'http'\n// which is now deprecated.\n\nfunction isRemote(db) {\n if (typeof db._remote === 'boolean') {\n return db._remote;\n }\n /* istanbul ignore next */\n if (typeof db.type === 'function') {\n guardedConsole('warn',\n 'db.type() is deprecated and will be removed in ' +\n 'a future version of PouchDB');\n return db.type() === 'http';\n }\n /* istanbul ignore next */\n return false;\n}\n\nfunction listenerCount(ee, type) {\n return 'listenerCount' in ee ? ee.listenerCount(type) :\n events.EventEmitter.listenerCount(ee, type);\n}\n\nfunction parseDesignDocFunctionName(s) {\n if (!s) {\n return null;\n }\n var parts = s.split('/');\n if (parts.length === 2) {\n return parts;\n }\n if (parts.length === 1) {\n return [s, s];\n }\n return null;\n}\n\nfunction normalizeDesignDocFunctionName(s) {\n var normalized = parseDesignDocFunctionName(s);\n return normalized ? normalized.join('/') : null;\n}\n\n// originally parseUri 1.2.2, now patched by us\n// (c) Steven Levithan <stevenlevithan.com>\n// MIT License\nvar keys = [\"source\", \"protocol\", \"authority\", \"userInfo\", \"user\", \"password\",\n \"host\", \"port\", \"relative\", \"path\", \"directory\", \"file\", \"query\", \"anchor\"];\nvar qName =\"queryKey\";\nvar qParser = /(?:^|&)([^&=]*)=?([^&]*)/g;\n\n// use the \"loose\" parser\n/* eslint maxlen: 0, no-useless-escape: 0 */\nvar parser = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nfunction parseUri(str) {\n var m = parser.exec(str);\n var uri = {};\n var i = 14;\n\n while (i--) {\n var key = keys[i];\n var value = m[i] || \"\";\n var encoded = ['user', 'password'].indexOf(key) !== -1;\n uri[key] = encoded ? decodeURIComponent(value) : value;\n }\n\n uri[qName] = {};\n uri[keys[12]].replace(qParser, function ($0, $1, $2) {\n if ($1) {\n uri[qName][$1] = $2;\n }\n });\n\n return uri;\n}\n\n// Based on https://github.com/alexdavid/scope-eval v0.0.3\n// (source: https://unpkg.com/scope-eval@0.0.3/scope_eval.js)\n// This is basically just a wrapper around new Function()\n\nfunction scopeEval(source, scope) {\n var keys = [];\n var values = [];\n for (var key in scope) {\n if (scope.hasOwnProperty(key)) {\n keys.push(key);\n values.push(scope[key]);\n }\n }\n keys.push(source);\n return Function.apply(null, keys).apply(null, values);\n}\n\n// this is essentially the \"update sugar\" function from daleharvey/pouchdb#1388\n// the diffFun tells us what delta to apply to the doc. it either returns\n// the doc, or false if it doesn't need to do an update after all\nfunction upsert(db, docId, diffFun) {\n return new PouchPromise(function (fulfill, reject) {\n db.get(docId, function (err, doc) {\n if (err) {\n /* istanbul ignore next */\n if (err.status !== 404) {\n return reject(err);\n }\n doc = {};\n }\n\n // the user might change the _rev, so save it for posterity\n var docRev = doc._rev;\n var newDoc = diffFun(doc);\n\n if (!newDoc) {\n // if the diffFun returns falsy, we short-circuit as\n // an optimization\n return fulfill({updated: false, rev: docRev});\n }\n\n // users aren't allowed to modify these values,\n // so reset them here\n newDoc._id = docId;\n newDoc._rev = docRev;\n fulfill(tryAndPut(db, newDoc, diffFun));\n });\n });\n}\n\nfunction tryAndPut(db, doc, diffFun) {\n return db.put(doc).then(function (res) {\n return {\n updated: true,\n rev: res.rev\n };\n }, function (err) {\n /* istanbul ignore next */\n if (err.status !== 409) {\n throw err;\n }\n return upsert(db, doc._id, diffFun);\n });\n}\n\nfunction rev() {\n return uuidV4.v4().replace(/-/g, '').toLowerCase();\n}\n\nvar uuid = uuidV4.v4;\n\n// We fetch all leafs of the revision tree, and sort them based on tree length\n// and whether they were deleted, undeleted documents with the longest revision\n// tree (most edits) win\n// The final sort algorithm is slightly documented in a sidebar here:\n// http://guide.couchdb.org/draft/conflicts.html\nfunction winningRev(metadata) {\n var winningId;\n var winningPos;\n var winningDeleted;\n var toVisit = metadata.rev_tree.slice();\n var node;\n while ((node = toVisit.pop())) {\n var tree = node.ids;\n var branches = tree[2];\n var pos = node.pos;\n if (branches.length) { // non-leaf\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i]});\n }\n continue;\n }\n var deleted = !!tree[1].deleted;\n var id = tree[0];\n // sort by deleted, then pos, then id\n if (!winningId || (winningDeleted !== deleted ? winningDeleted :\n winningPos !== pos ? winningPos < pos : winningId < id)) {\n winningId = id;\n winningPos = pos;\n winningDeleted = deleted;\n }\n }\n\n return winningPos + '-' + winningId;\n}\n\n// Pretty much all below can be combined into a higher order function to\n// traverse revisions\n// The return value from the callback will be passed as context to all\n// children of that node\nfunction traverseRevTree(revs, callback) {\n var toVisit = revs.slice();\n\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var branches = tree[2];\n var newCtx =\n callback(branches.length === 0, pos, tree[0], node.ctx, tree[1]);\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i], ctx: newCtx});\n }\n }\n}\n\nfunction sortByPos(a, b) {\n return a.pos - b.pos;\n}\n\nfunction collectLeaves(revs) {\n var leaves = [];\n traverseRevTree(revs, function (isLeaf, pos, id, acc, opts) {\n if (isLeaf) {\n leaves.push({rev: pos + \"-\" + id, pos: pos, opts: opts});\n }\n });\n leaves.sort(sortByPos).reverse();\n for (var i = 0, len = leaves.length; i < len; i++) {\n delete leaves[i].pos;\n }\n return leaves;\n}\n\n// returns revs of all conflicts that is leaves such that\n// 1. are not deleted and\n// 2. are different than winning revision\nfunction collectConflicts(metadata) {\n var win = winningRev(metadata);\n var leaves = collectLeaves(metadata.rev_tree);\n var conflicts = [];\n for (var i = 0, len = leaves.length; i < len; i++) {\n var leaf = leaves[i];\n if (leaf.rev !== win && !leaf.opts.deleted) {\n conflicts.push(leaf.rev);\n }\n }\n return conflicts;\n}\n\n// compact a tree by marking its non-leafs as missing,\n// and return a list of revs to delete\nfunction compactTree(metadata) {\n var revs = [];\n traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n revHash, ctx, opts) {\n if (opts.status === 'available' && !isLeaf) {\n revs.push(pos + '-' + revHash);\n opts.status = 'missing';\n }\n });\n return revs;\n}\n\n// build up a list of all the paths to the leafs in this revision tree\nfunction rootToLeaf(revs) {\n var paths = [];\n var toVisit = revs.slice();\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var id = tree[0];\n var opts = tree[1];\n var branches = tree[2];\n var isLeaf = branches.length === 0;\n\n var history = node.history ? node.history.slice() : [];\n history.push({id: id, opts: opts});\n if (isLeaf) {\n paths.push({pos: (pos + 1 - history.length), ids: history});\n }\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i], history: history});\n }\n }\n return paths.reverse();\n}\n\n// for a better overview of what this is doing, read:\n// https://github.com/apache/couchdb-couch/blob/master/src/couch_key_tree.erl\n//\n// But for a quick intro, CouchDB uses a revision tree to store a documents\n// history, A -> B -> C, when a document has conflicts, that is a branch in the\n// tree, A -> (B1 | B2 -> C), We store these as a nested array in the format\n//\n// KeyTree = [Path ... ]\n// Path = {pos: position_from_root, ids: Tree}\n// Tree = [Key, Opts, [Tree, ...]], in particular single node: [Key, []]\n\nfunction sortByPos$1(a, b) {\n return a.pos - b.pos;\n}\n\n// classic binary search\nfunction binarySearch(arr, item, comparator) {\n var low = 0;\n var high = arr.length;\n var mid;\n while (low < high) {\n mid = (low + high) >>> 1;\n if (comparator(arr[mid], item) < 0) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return low;\n}\n\n// assuming the arr is sorted, insert the item in the proper place\nfunction insertSorted(arr, item, comparator) {\n var idx = binarySearch(arr, item, comparator);\n arr.splice(idx, 0, item);\n}\n\n// Turn a path as a flat array into a tree with a single branch.\n// If any should be stemmed from the beginning of the array, that's passed\n// in as the second argument\nfunction pathToTree(path, numStemmed) {\n var root;\n var leaf;\n for (var i = numStemmed, len = path.length; i < len; i++) {\n var node = path[i];\n var currentLeaf = [node.id, node.opts, []];\n if (leaf) {\n leaf[2].push(currentLeaf);\n leaf = currentLeaf;\n } else {\n root = leaf = currentLeaf;\n }\n }\n return root;\n}\n\n// compare the IDs of two trees\nfunction compareTree(a, b) {\n return a[0] < b[0] ? -1 : 1;\n}\n\n// Merge two trees together\n// The roots of tree1 and tree2 must be the same revision\nfunction mergeTree(in_tree1, in_tree2) {\n var queue = [{tree1: in_tree1, tree2: in_tree2}];\n var conflicts = false;\n while (queue.length > 0) {\n var item = queue.pop();\n var tree1 = item.tree1;\n var tree2 = item.tree2;\n\n if (tree1[1].status || tree2[1].status) {\n tree1[1].status =\n (tree1[1].status === 'available' ||\n tree2[1].status === 'available') ? 'available' : 'missing';\n }\n\n for (var i = 0; i < tree2[2].length; i++) {\n if (!tree1[2][0]) {\n conflicts = 'new_leaf';\n tree1[2][0] = tree2[2][i];\n continue;\n }\n\n var merged = false;\n for (var j = 0; j < tree1[2].length; j++) {\n if (tree1[2][j][0] === tree2[2][i][0]) {\n queue.push({tree1: tree1[2][j], tree2: tree2[2][i]});\n merged = true;\n }\n }\n if (!merged) {\n conflicts = 'new_branch';\n insertSorted(tree1[2], tree2[2][i], compareTree);\n }\n }\n }\n return {conflicts: conflicts, tree: in_tree1};\n}\n\nfunction doMerge(tree, path, dontExpand) {\n var restree = [];\n var conflicts = false;\n var merged = false;\n var res;\n\n if (!tree.length) {\n return {tree: [path], conflicts: 'new_leaf'};\n }\n\n for (var i = 0, len = tree.length; i < len; i++) {\n var branch = tree[i];\n if (branch.pos === path.pos && branch.ids[0] === path.ids[0]) {\n // Paths start at the same position and have the same root, so they need\n // merged\n res = mergeTree(branch.ids, path.ids);\n restree.push({pos: branch.pos, ids: res.tree});\n conflicts = conflicts || res.conflicts;\n merged = true;\n } else if (dontExpand !== true) {\n // The paths start at a different position, take the earliest path and\n // traverse up until it as at the same point from root as the path we\n // want to merge. If the keys match we return the longer path with the\n // other merged After stemming we dont want to expand the trees\n\n var t1 = branch.pos < path.pos ? branch : path;\n var t2 = branch.pos < path.pos ? path : branch;\n var diff = t2.pos - t1.pos;\n\n var candidateParents = [];\n\n var trees = [];\n trees.push({ids: t1.ids, diff: diff, parent: null, parentIdx: null});\n while (trees.length > 0) {\n var item = trees.pop();\n if (item.diff === 0) {\n if (item.ids[0] === t2.ids[0]) {\n candidateParents.push(item);\n }\n continue;\n }\n var elements = item.ids[2];\n for (var j = 0, elementsLen = elements.length; j < elementsLen; j++) {\n trees.push({\n ids: elements[j],\n diff: item.diff - 1,\n parent: item.ids,\n parentIdx: j\n });\n }\n }\n\n var el = candidateParents[0];\n\n if (!el) {\n restree.push(branch);\n } else {\n res = mergeTree(el.ids, t2.ids);\n el.parent[2][el.parentIdx] = res.tree;\n restree.push({pos: t1.pos, ids: t1.ids});\n conflicts = conflicts || res.conflicts;\n merged = true;\n }\n } else {\n restree.push(branch);\n }\n }\n\n // We didnt find\n if (!merged) {\n restree.push(path);\n }\n\n restree.sort(sortByPos$1);\n\n return {\n tree: restree,\n conflicts: conflicts || 'internal_node'\n };\n}\n\n// To ensure we dont grow the revision tree infinitely, we stem old revisions\nfunction stem(tree, depth) {\n // First we break out the tree into a complete list of root to leaf paths\n var paths = rootToLeaf(tree);\n var stemmedRevs;\n\n var result;\n for (var i = 0, len = paths.length; i < len; i++) {\n // Then for each path, we cut off the start of the path based on the\n // `depth` to stem to, and generate a new set of flat trees\n var path = paths[i];\n var stemmed = path.ids;\n var node;\n if (stemmed.length > depth) {\n // only do the stemming work if we actually need to stem\n if (!stemmedRevs) {\n stemmedRevs = {}; // avoid allocating this object unnecessarily\n }\n var numStemmed = stemmed.length - depth;\n node = {\n pos: path.pos + numStemmed,\n ids: pathToTree(stemmed, numStemmed)\n };\n\n for (var s = 0; s < numStemmed; s++) {\n var rev = (path.pos + s) + '-' + stemmed[s].id;\n stemmedRevs[rev] = true;\n }\n } else { // no need to actually stem\n node = {\n pos: path.pos,\n ids: pathToTree(stemmed, 0)\n };\n }\n\n // Then we remerge all those flat trees together, ensuring that we dont\n // connect trees that would go beyond the depth limit\n if (result) {\n result = doMerge(result, node, true).tree;\n } else {\n result = [node];\n }\n }\n\n // this is memory-heavy per Chrome profiler, avoid unless we actually stemmed\n if (stemmedRevs) {\n traverseRevTree(result, function (isLeaf, pos, revHash) {\n // some revisions may have been removed in a branch but not in another\n delete stemmedRevs[pos + '-' + revHash];\n });\n }\n\n return {\n tree: result,\n revs: stemmedRevs ? Object.keys(stemmedRevs) : []\n };\n}\n\nfunction merge(tree, path, depth) {\n var newTree = doMerge(tree, path);\n var stemmed = stem(newTree.tree, depth);\n return {\n tree: stemmed.tree,\n stemmedRevs: stemmed.revs,\n conflicts: newTree.conflicts\n };\n}\n\n// return true if a rev exists in the rev tree, false otherwise\nfunction revExists(revs, rev) {\n var toVisit = revs.slice();\n var splitRev = rev.split('-');\n var targetPos = parseInt(splitRev[0], 10);\n var targetId = splitRev[1];\n\n var node;\n while ((node = toVisit.pop())) {\n if (node.pos === targetPos && node.ids[0] === targetId) {\n return true;\n }\n var branches = node.ids[2];\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: node.pos + 1, ids: branches[i]});\n }\n }\n return false;\n}\n\nfunction getTrees(node) {\n return node.ids;\n}\n\n// check if a specific revision of a doc has been deleted\n// - metadata: the metadata object from the doc store\n// - rev: (optional) the revision to check. defaults to winning revision\nfunction isDeleted(metadata, rev) {\n if (!rev) {\n rev = winningRev(metadata);\n }\n var id = rev.substring(rev.indexOf('-') + 1);\n var toVisit = metadata.rev_tree.map(getTrees);\n\n var tree;\n while ((tree = toVisit.pop())) {\n if (tree[0] === id) {\n return !!tree[1].deleted;\n }\n toVisit = toVisit.concat(tree[2]);\n }\n}\n\nfunction isLocalId(id) {\n return (/^_local/).test(id);\n}\n\n// returns the current leaf node for a given revision\nfunction latest(rev, metadata) {\n var toVisit = metadata.rev_tree.slice();\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var id = tree[0];\n var opts = tree[1];\n var branches = tree[2];\n var isLeaf = branches.length === 0;\n\n var history = node.history ? node.history.slice() : [];\n history.push({id: id, pos: pos, opts: opts});\n\n if (isLeaf) {\n for (var i = 0, len = history.length; i < len; i++) {\n var historyNode = history[i];\n var historyRev = historyNode.pos + '-' + historyNode.id;\n\n if (historyRev === rev) {\n // return the rev of this leaf\n return pos + '-' + id;\n }\n }\n }\n\n for (var j = 0, l = branches.length; j < l; j++) {\n toVisit.push({pos: pos + 1, ids: branches[j], history: history});\n }\n }\n\n /* istanbul ignore next */\n throw new Error('Unable to resolve latest revision for id ' + metadata.id + ', rev ' + rev);\n}\n\ninherits(Changes$2, events.EventEmitter);\n\nfunction tryCatchInChangeListener(self, change, pending, lastSeq) {\n // isolate try/catches to avoid V8 deoptimizations\n try {\n self.emit('change', change, pending, lastSeq);\n } catch (e) {\n guardedConsole('error', 'Error in .on(\"change\", function):', e);\n }\n}\n\nfunction Changes$2(db, opts, callback) {\n events.EventEmitter.call(this);\n var self = this;\n this.db = db;\n opts = opts ? clone(opts) : {};\n var complete = opts.complete = once(function (err, resp) {\n if (err) {\n if (listenerCount(self, 'error') > 0) {\n self.emit('error', err);\n }\n } else {\n self.emit('complete', resp);\n }\n self.removeAllListeners();\n db.removeListener('destroyed', onDestroy);\n });\n if (callback) {\n self.on('complete', function (resp) {\n callback(null, resp);\n });\n self.on('error', callback);\n }\n function onDestroy() {\n self.cancel();\n }\n db.once('destroyed', onDestroy);\n\n opts.onChange = function (change, pending, lastSeq) {\n /* istanbul ignore if */\n if (self.isCancelled) {\n return;\n }\n tryCatchInChangeListener(self, change, pending, lastSeq);\n };\n\n var promise = new PouchPromise(function (fulfill, reject) {\n opts.complete = function (err, res) {\n if (err) {\n reject(err);\n } else {\n fulfill(res);\n }\n };\n });\n self.once('cancel', function () {\n db.removeListener('destroyed', onDestroy);\n opts.complete(null, {status: 'cancelled'});\n });\n this.then = promise.then.bind(promise);\n this['catch'] = promise['catch'].bind(promise);\n this.then(function (result) {\n complete(null, result);\n }, complete);\n\n\n\n if (!db.taskqueue.isReady) {\n db.taskqueue.addTask(function (failed) {\n if (failed) {\n opts.complete(failed);\n } else if (self.isCancelled) {\n self.emit('cancel');\n } else {\n self.validateChanges(opts);\n }\n });\n } else {\n self.validateChanges(opts);\n }\n}\nChanges$2.prototype.cancel = function () {\n this.isCancelled = true;\n if (this.db.taskqueue.isReady) {\n this.emit('cancel');\n }\n};\nfunction processChange(doc, metadata, opts) {\n var changeList = [{rev: doc._rev}];\n if (opts.style === 'all_docs') {\n changeList = collectLeaves(metadata.rev_tree)\n .map(function (x) { return {rev: x.rev}; });\n }\n var change = {\n id: metadata.id,\n changes: changeList,\n doc: doc\n };\n\n if (isDeleted(metadata, doc._rev)) {\n change.deleted = true;\n }\n if (opts.conflicts) {\n change.doc._conflicts = collectConflicts(metadata);\n if (!change.doc._conflicts.length) {\n delete change.doc._conflicts;\n }\n }\n return change;\n}\n\nChanges$2.prototype.validateChanges = function (opts) {\n var callback = opts.complete;\n var self = this;\n\n /* istanbul ignore else */\n if (PouchDB._changesFilterPlugin) {\n PouchDB._changesFilterPlugin.validate(opts, function (err) {\n if (err) {\n return callback(err);\n }\n self.doChanges(opts);\n });\n } else {\n self.doChanges(opts);\n }\n};\n\nChanges$2.prototype.doChanges = function (opts) {\n var self = this;\n var callback = opts.complete;\n\n opts = clone(opts);\n if ('live' in opts && !('continuous' in opts)) {\n opts.continuous = opts.live;\n }\n opts.processChange = processChange;\n\n if (opts.since === 'latest') {\n opts.since = 'now';\n }\n if (!opts.since) {\n opts.since = 0;\n }\n if (opts.since === 'now') {\n this.db.info().then(function (info) {\n /* istanbul ignore if */\n if (self.isCancelled) {\n callback(null, {status: 'cancelled'});\n return;\n }\n opts.since = info.update_seq;\n self.doChanges(opts);\n }, callback);\n return;\n }\n\n /* istanbul ignore else */\n if (PouchDB._changesFilterPlugin) {\n PouchDB._changesFilterPlugin.normalize(opts);\n if (PouchDB._changesFilterPlugin.shouldFilter(this, opts)) {\n return PouchDB._changesFilterPlugin.filter(this, opts);\n }\n } else {\n ['doc_ids', 'filter', 'selector', 'view'].forEach(function (key) {\n if (key in opts) {\n guardedConsole('warn',\n 'The \"' + key + '\" option was passed in to changes/replicate, ' +\n 'but pouchdb-changes-filter plugin is not installed, so it ' +\n 'was ignored. Please install the plugin to enable filtering.'\n );\n }\n });\n }\n\n if (!('descending' in opts)) {\n opts.descending = false;\n }\n\n // 0 and 1 should return 1 document\n opts.limit = opts.limit === 0 ? 1 : opts.limit;\n opts.complete = callback;\n var newPromise = this.db._changes(opts);\n /* istanbul ignore else */\n if (newPromise && typeof newPromise.cancel === 'function') {\n var cancel = self.cancel;\n self.cancel = getArguments(function (args) {\n newPromise.cancel();\n cancel.apply(this, args);\n });\n }\n};\n\n/*\n * A generic pouch adapter\n */\n\nfunction compare(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\n// Wrapper for functions that call the bulkdocs api with a single doc,\n// if the first result is an error, return an error\nfunction yankError(callback, docId) {\n return function (err, results) {\n if (err || (results[0] && results[0].error)) {\n err = err || results[0];\n err.docId = docId;\n callback(err);\n } else {\n callback(null, results.length ? results[0] : results);\n }\n };\n}\n\n// clean docs given to us by the user\nfunction cleanDocs(docs) {\n for (var i = 0; i < docs.length; i++) {\n var doc = docs[i];\n if (doc._deleted) {\n delete doc._attachments; // ignore atts for deleted docs\n } else if (doc._attachments) {\n // filter out extraneous keys from _attachments\n var atts = Object.keys(doc._attachments);\n for (var j = 0; j < atts.length; j++) {\n var att = atts[j];\n doc._attachments[att] = pick(doc._attachments[att],\n ['data', 'digest', 'content_type', 'length', 'revpos', 'stub']);\n }\n }\n }\n}\n\n// compare two docs, first by _id then by _rev\nfunction compareByIdThenRev(a, b) {\n var idCompare = compare(a._id, b._id);\n if (idCompare !== 0) {\n return idCompare;\n }\n var aStart = a._revisions ? a._revisions.start : 0;\n var bStart = b._revisions ? b._revisions.start : 0;\n return compare(aStart, bStart);\n}\n\n// for every node in a revision tree computes its distance from the closest\n// leaf\nfunction computeHeight(revs) {\n var height = {};\n var edges = [];\n traverseRevTree(revs, function (isLeaf, pos, id, prnt) {\n var rev$$1 = pos + \"-\" + id;\n if (isLeaf) {\n height[rev$$1] = 0;\n }\n if (prnt !== undefined) {\n edges.push({from: prnt, to: rev$$1});\n }\n return rev$$1;\n });\n\n edges.reverse();\n edges.forEach(function (edge) {\n if (height[edge.from] === undefined) {\n height[edge.from] = 1 + height[edge.to];\n } else {\n height[edge.from] = Math.min(height[edge.from], 1 + height[edge.to]);\n }\n });\n return height;\n}\n\nfunction allDocsKeysParse(opts) {\n var keys = ('limit' in opts) ?\n opts.keys.slice(opts.skip, opts.limit + opts.skip) :\n (opts.skip > 0) ? opts.keys.slice(opts.skip) : opts.keys;\n opts.keys = keys;\n opts.skip = 0;\n delete opts.limit;\n if (opts.descending) {\n keys.reverse();\n opts.descending = false;\n }\n}\n\n// all compaction is done in a queue, to avoid attaching\n// too many listeners at once\nfunction doNextCompaction(self) {\n var task = self._compactionQueue[0];\n var opts = task.opts;\n var callback = task.callback;\n self.get('_local/compaction')[\"catch\"](function () {\n return false;\n }).then(function (doc) {\n if (doc && doc.last_seq) {\n opts.last_seq = doc.last_seq;\n }\n self._compact(opts, function (err, res) {\n /* istanbul ignore if */\n if (err) {\n callback(err);\n } else {\n callback(null, res);\n }\n nextTick(function () {\n self._compactionQueue.shift();\n if (self._compactionQueue.length) {\n doNextCompaction(self);\n }\n });\n });\n });\n}\n\nfunction attachmentNameError(name) {\n if (name.charAt(0) === '_') {\n return name + ' is not a valid attachment name, attachment ' +\n 'names cannot start with \\'_\\'';\n }\n return false;\n}\n\ninherits(AbstractPouchDB, events.EventEmitter);\n\nfunction AbstractPouchDB() {\n events.EventEmitter.call(this);\n}\n\nAbstractPouchDB.prototype.post =\n adapterFun('post', function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof doc !== 'object' || Array.isArray(doc)) {\n return callback(createError(NOT_AN_OBJECT));\n }\n this.bulkDocs({docs: [doc]}, opts, yankError(callback, doc._id));\n});\n\nAbstractPouchDB.prototype.put = adapterFun('put', function (doc, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n if (typeof doc !== 'object' || Array.isArray(doc)) {\n return cb(createError(NOT_AN_OBJECT));\n }\n invalidIdError(doc._id);\n if (isLocalId(doc._id) && typeof this._putLocal === 'function') {\n if (doc._deleted) {\n return this._removeLocal(doc, cb);\n } else {\n return this._putLocal(doc, cb);\n }\n }\n var self = this;\n if (opts.force && doc._rev) {\n transformForceOptionToNewEditsOption();\n putDoc(function (err) {\n var result = err ? null : {ok: true, id: doc._id, rev: doc._rev};\n cb(err, result);\n });\n } else {\n putDoc(cb);\n }\n\n function transformForceOptionToNewEditsOption() {\n var parts = doc._rev.split('-');\n var oldRevId = parts[1];\n var oldRevNum = parseInt(parts[0], 10);\n\n var newRevNum = oldRevNum + 1;\n var newRevId = rev();\n\n doc._revisions = {\n start: newRevNum,\n ids: [newRevId, oldRevId]\n };\n doc._rev = newRevNum + '-' + newRevId;\n opts.new_edits = false;\n }\n function putDoc(next) {\n if (typeof self._put === 'function' && opts.new_edits !== false) {\n self._put(doc, opts, next);\n } else {\n self.bulkDocs({docs: [doc]}, opts, yankError(next, doc._id));\n }\n }\n});\n\nAbstractPouchDB.prototype.putAttachment =\n adapterFun('putAttachment', function (docId, attachmentId, rev$$1,\n blob, type) {\n var api = this;\n if (typeof type === 'function') {\n type = blob;\n blob = rev$$1;\n rev$$1 = null;\n }\n // Lets fix in https://github.com/pouchdb/pouchdb/issues/3267\n /* istanbul ignore if */\n if (typeof type === 'undefined') {\n type = blob;\n blob = rev$$1;\n rev$$1 = null;\n }\n if (!type) {\n guardedConsole('warn', 'Attachment', attachmentId, 'on document', docId, 'is missing content_type');\n }\n\n function createAttachment(doc) {\n var prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;\n doc._attachments = doc._attachments || {};\n doc._attachments[attachmentId] = {\n content_type: type,\n data: blob,\n revpos: ++prevrevpos\n };\n return api.put(doc);\n }\n\n return api.get(docId).then(function (doc) {\n if (doc._rev !== rev$$1) {\n throw createError(REV_CONFLICT);\n }\n\n return createAttachment(doc);\n }, function (err) {\n // create new doc\n /* istanbul ignore else */\n if (err.reason === MISSING_DOC.message) {\n return createAttachment({_id: docId});\n } else {\n throw err;\n }\n });\n});\n\nAbstractPouchDB.prototype.removeAttachment =\n adapterFun('removeAttachment', function (docId, attachmentId, rev$$1,\n callback) {\n var self = this;\n self.get(docId, function (err, obj) {\n /* istanbul ignore if */\n if (err) {\n callback(err);\n return;\n }\n if (obj._rev !== rev$$1) {\n callback(createError(REV_CONFLICT));\n return;\n }\n /* istanbul ignore if */\n if (!obj._attachments) {\n return callback();\n }\n delete obj._attachments[attachmentId];\n if (Object.keys(obj._attachments).length === 0) {\n delete obj._attachments;\n }\n self.put(obj, callback);\n });\n});\n\nAbstractPouchDB.prototype.remove =\n adapterFun('remove', function (docOrId, optsOrRev, opts, callback) {\n var doc;\n if (typeof optsOrRev === 'string') {\n // id, rev, opts, callback style\n doc = {\n _id: docOrId,\n _rev: optsOrRev\n };\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n } else {\n // doc, opts, callback style\n doc = docOrId;\n if (typeof optsOrRev === 'function') {\n callback = optsOrRev;\n opts = {};\n } else {\n callback = opts;\n opts = optsOrRev;\n }\n }\n opts = opts || {};\n opts.was_delete = true;\n var newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};\n newDoc._deleted = true;\n if (isLocalId(newDoc._id) && typeof this._removeLocal === 'function') {\n return this._removeLocal(doc, callback);\n }\n this.bulkDocs({docs: [newDoc]}, opts, yankError(callback, newDoc._id));\n});\n\nAbstractPouchDB.prototype.revsDiff =\n adapterFun('revsDiff', function (req, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var ids = Object.keys(req);\n\n if (!ids.length) {\n return callback(null, {});\n }\n\n var count = 0;\n var missing = new ExportedMap();\n\n function addToMissing(id, revId) {\n if (!missing.has(id)) {\n missing.set(id, {missing: []});\n }\n missing.get(id).missing.push(revId);\n }\n\n function processDoc(id, rev_tree) {\n // Is this fast enough? Maybe we should switch to a set simulated by a map\n var missingForId = req[id].slice(0);\n traverseRevTree(rev_tree, function (isLeaf, pos, revHash, ctx,\n opts) {\n var rev$$1 = pos + '-' + revHash;\n var idx = missingForId.indexOf(rev$$1);\n if (idx === -1) {\n return;\n }\n\n missingForId.splice(idx, 1);\n /* istanbul ignore if */\n if (opts.status !== 'available') {\n addToMissing(id, rev$$1);\n }\n });\n\n // Traversing the tree is synchronous, so now `missingForId` contains\n // revisions that were not found in the tree\n missingForId.forEach(function (rev$$1) {\n addToMissing(id, rev$$1);\n });\n }\n\n ids.map(function (id) {\n this._getRevisionTree(id, function (err, rev_tree) {\n if (err && err.status === 404 && err.message === 'missing') {\n missing.set(id, {missing: req[id]});\n } else if (err) {\n /* istanbul ignore next */\n return callback(err);\n } else {\n processDoc(id, rev_tree);\n }\n\n if (++count === ids.length) {\n // convert LazyMap to object\n var missingObj = {};\n missing.forEach(function (value, key) {\n missingObj[key] = value;\n });\n return callback(null, missingObj);\n }\n });\n }, this);\n});\n\n// _bulk_get API for faster replication, as described in\n// https://github.com/apache/couchdb-chttpd/pull/33\n// At the \"abstract\" level, it will just run multiple get()s in\n// parallel, because this isn't much of a performance cost\n// for local databases (except the cost of multiple transactions, which is\n// small). The http adapter overrides this in order\n// to do a more efficient single HTTP request.\nAbstractPouchDB.prototype.bulkGet =\n adapterFun('bulkGet', function (opts, callback) {\n bulkGet(this, opts, callback);\n});\n\n// compact one document and fire callback\n// by compacting we mean removing all revisions which\n// are further from the leaf in revision tree than max_height\nAbstractPouchDB.prototype.compactDocument =\n adapterFun('compactDocument', function (docId, maxHeight, callback) {\n var self = this;\n this._getRevisionTree(docId, function (err, revTree) {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n var height = computeHeight(revTree);\n var candidates = [];\n var revs = [];\n Object.keys(height).forEach(function (rev$$1) {\n if (height[rev$$1] > maxHeight) {\n candidates.push(rev$$1);\n }\n });\n\n traverseRevTree(revTree, function (isLeaf, pos, revHash, ctx, opts) {\n var rev$$1 = pos + '-' + revHash;\n if (opts.status === 'available' && candidates.indexOf(rev$$1) !== -1) {\n revs.push(rev$$1);\n }\n });\n self._doCompaction(docId, revs, callback);\n });\n});\n\n// compact the whole database using single document\n// compaction\nAbstractPouchDB.prototype.compact =\n adapterFun('compact', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n var self = this;\n opts = opts || {};\n\n self._compactionQueue = self._compactionQueue || [];\n self._compactionQueue.push({opts: opts, callback: callback});\n if (self._compactionQueue.length === 1) {\n doNextCompaction(self);\n }\n});\nAbstractPouchDB.prototype._compact = function (opts, callback) {\n var self = this;\n var changesOpts = {\n return_docs: false,\n last_seq: opts.last_seq || 0\n };\n var promises = [];\n\n function onChange(row) {\n promises.push(self.compactDocument(row.id, 0));\n }\n function onComplete(resp) {\n var lastSeq = resp.last_seq;\n PouchPromise.all(promises).then(function () {\n return upsert(self, '_local/compaction', function deltaFunc(doc) {\n if (!doc.last_seq || doc.last_seq < lastSeq) {\n doc.last_seq = lastSeq;\n return doc;\n }\n return false; // somebody else got here first, don't update\n });\n }).then(function () {\n callback(null, {ok: true});\n })[\"catch\"](callback);\n }\n self.changes(changesOpts)\n .on('change', onChange)\n .on('complete', onComplete)\n .on('error', callback);\n};\n\n/* Begin api wrappers. Specific functionality to storage belongs in the\n _[method] */\nAbstractPouchDB.prototype.get = adapterFun('get', function (id, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n if (typeof id !== 'string') {\n return cb(createError(INVALID_ID));\n }\n if (isLocalId(id) && typeof this._getLocal === 'function') {\n return this._getLocal(id, cb);\n }\n var leaves = [], self = this;\n\n function finishOpenRevs() {\n var result = [];\n var count = leaves.length;\n /* istanbul ignore if */\n if (!count) {\n return cb(null, result);\n }\n\n // order with open_revs is unspecified\n leaves.forEach(function (leaf) {\n self.get(id, {\n rev: leaf,\n revs: opts.revs,\n latest: opts.latest,\n attachments: opts.attachments,\n binary: opts.binary\n }, function (err, doc) {\n if (!err) {\n // using latest=true can produce duplicates\n var existing;\n for (var i = 0, l = result.length; i < l; i++) {\n if (result[i].ok && result[i].ok._rev === doc._rev) {\n existing = true;\n break;\n }\n }\n if (!existing) {\n result.push({ok: doc});\n }\n } else {\n result.push({missing: leaf});\n }\n count--;\n if (!count) {\n cb(null, result);\n }\n });\n });\n }\n\n if (opts.open_revs) {\n if (opts.open_revs === \"all\") {\n this._getRevisionTree(id, function (err, rev_tree) {\n if (err) {\n return cb(err);\n }\n leaves = collectLeaves(rev_tree).map(function (leaf) {\n return leaf.rev;\n });\n finishOpenRevs();\n });\n } else {\n if (Array.isArray(opts.open_revs)) {\n leaves = opts.open_revs;\n for (var i = 0; i < leaves.length; i++) {\n var l = leaves[i];\n // looks like it's the only thing couchdb checks\n if (!(typeof (l) === \"string\" && /^\\d+-/.test(l))) {\n return cb(createError(INVALID_REV));\n }\n }\n finishOpenRevs();\n } else {\n return cb(createError(UNKNOWN_ERROR, 'function_clause'));\n }\n }\n return; // open_revs does not like other options\n }\n\n return this._get(id, opts, function (err, result) {\n if (err) {\n err.docId = id;\n return cb(err);\n }\n\n var doc = result.doc;\n var metadata = result.metadata;\n var ctx = result.ctx;\n\n if (opts.conflicts) {\n var conflicts = collectConflicts(metadata);\n if (conflicts.length) {\n doc._conflicts = conflicts;\n }\n }\n\n if (isDeleted(metadata, doc._rev)) {\n doc._deleted = true;\n }\n\n if (opts.revs || opts.revs_info) {\n var splittedRev = doc._rev.split('-');\n var revNo = parseInt(splittedRev[0], 10);\n var revHash = splittedRev[1];\n\n var paths = rootToLeaf(metadata.rev_tree);\n var path = null;\n\n for (var i = 0; i < paths.length; i++) {\n var currentPath = paths[i];\n var hashIndex = currentPath.ids.map(function (x) { return x.id; })\n .indexOf(revHash);\n var hashFoundAtRevPos = hashIndex === (revNo - 1);\n\n if (hashFoundAtRevPos || (!path && hashIndex !== -1)) {\n path = currentPath;\n }\n }\n\n var indexOfRev = path.ids.map(function (x) { return x.id; })\n .indexOf(doc._rev.split('-')[1]) + 1;\n var howMany = path.ids.length - indexOfRev;\n path.ids.splice(indexOfRev, howMany);\n path.ids.reverse();\n\n if (opts.revs) {\n doc._revisions = {\n start: (path.pos + path.ids.length) - 1,\n ids: path.ids.map(function (rev$$1) {\n return rev$$1.id;\n })\n };\n }\n if (opts.revs_info) {\n var pos = path.pos + path.ids.length;\n doc._revs_info = path.ids.map(function (rev$$1) {\n pos--;\n return {\n rev: pos + '-' + rev$$1.id,\n status: rev$$1.opts.status\n };\n });\n }\n }\n\n if (opts.attachments && doc._attachments) {\n var attachments = doc._attachments;\n var count = Object.keys(attachments).length;\n if (count === 0) {\n return cb(null, doc);\n }\n Object.keys(attachments).forEach(function (key) {\n this._getAttachment(doc._id, key, attachments[key], {\n // Previously the revision handling was done in adapter.js\n // getAttachment, however since idb-next doesnt we need to\n // pass the rev through\n rev: doc._rev,\n binary: opts.binary,\n ctx: ctx\n }, function (err, data) {\n var att = doc._attachments[key];\n att.data = data;\n delete att.stub;\n delete att.length;\n if (!--count) {\n cb(null, doc);\n }\n });\n }, self);\n } else {\n if (doc._attachments) {\n for (var key in doc._attachments) {\n /* istanbul ignore else */\n if (doc._attachments.hasOwnProperty(key)) {\n doc._attachments[key].stub = true;\n }\n }\n }\n cb(null, doc);\n }\n });\n});\n\n// TODO: I dont like this, it forces an extra read for every\n// attachment read and enforces a confusing api between\n// adapter.js and the adapter implementation\nAbstractPouchDB.prototype.getAttachment =\n adapterFun('getAttachment', function (docId, attachmentId, opts, callback) {\n var self = this;\n if (opts instanceof Function) {\n callback = opts;\n opts = {};\n }\n this._get(docId, opts, function (err, res) {\n if (err) {\n return callback(err);\n }\n if (res.doc._attachments && res.doc._attachments[attachmentId]) {\n opts.ctx = res.ctx;\n opts.binary = true;\n self._getAttachment(docId, attachmentId,\n res.doc._attachments[attachmentId], opts, callback);\n } else {\n return callback(createError(MISSING_DOC));\n }\n });\n});\n\nAbstractPouchDB.prototype.allDocs =\n adapterFun('allDocs', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts.skip = typeof opts.skip !== 'undefined' ? opts.skip : 0;\n if (opts.start_key) {\n opts.startkey = opts.start_key;\n }\n if (opts.end_key) {\n opts.endkey = opts.end_key;\n }\n if ('keys' in opts) {\n if (!Array.isArray(opts.keys)) {\n return callback(new TypeError('options.keys must be an array'));\n }\n var incompatibleOpt =\n ['startkey', 'endkey', 'key'].filter(function (incompatibleOpt) {\n return incompatibleOpt in opts;\n })[0];\n if (incompatibleOpt) {\n callback(createError(QUERY_PARSE_ERROR,\n 'Query parameter `' + incompatibleOpt +\n '` is not compatible with multi-get'\n ));\n return;\n }\n if (!isRemote(this)) {\n allDocsKeysParse(opts);\n if (opts.keys.length === 0) {\n return this._allDocs({limit: 0}, callback);\n }\n }\n }\n\n return this._allDocs(opts, callback);\n});\n\nAbstractPouchDB.prototype.changes = function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return new Changes$2(this, opts, callback);\n};\n\nAbstractPouchDB.prototype.close = adapterFun('close', function (callback) {\n this._closed = true;\n this.emit('closed');\n return this._close(callback);\n});\n\nAbstractPouchDB.prototype.info = adapterFun('info', function (callback) {\n var self = this;\n this._info(function (err, info) {\n if (err) {\n return callback(err);\n }\n // assume we know better than the adapter, unless it informs us\n info.db_name = info.db_name || self.name;\n info.auto_compaction = !!(self.auto_compaction && !isRemote(self));\n info.adapter = self.adapter;\n callback(null, info);\n });\n});\n\nAbstractPouchDB.prototype.id = adapterFun('id', function (callback) {\n return this._id(callback);\n});\n\n/* istanbul ignore next */\nAbstractPouchDB.prototype.type = function () {\n return (typeof this._type === 'function') ? this._type() : this.adapter;\n};\n\nAbstractPouchDB.prototype.bulkDocs =\n adapterFun('bulkDocs', function (req, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n opts = opts || {};\n\n if (Array.isArray(req)) {\n req = {\n docs: req\n };\n }\n\n if (!req || !req.docs || !Array.isArray(req.docs)) {\n return callback(createError(MISSING_BULK_DOCS));\n }\n\n for (var i = 0; i < req.docs.length; ++i) {\n if (typeof req.docs[i] !== 'object' || Array.isArray(req.docs[i])) {\n return callback(createError(NOT_AN_OBJECT));\n }\n }\n\n var attachmentError;\n req.docs.forEach(function (doc) {\n if (doc._attachments) {\n Object.keys(doc._attachments).forEach(function (name) {\n attachmentError = attachmentError || attachmentNameError(name);\n if (!doc._attachments[name].content_type) {\n guardedConsole('warn', 'Attachment', name, 'on document', doc._id, 'is missing content_type');\n }\n });\n }\n });\n\n if (attachmentError) {\n return callback(createError(BAD_REQUEST, attachmentError));\n }\n\n if (!('new_edits' in opts)) {\n if ('new_edits' in req) {\n opts.new_edits = req.new_edits;\n } else {\n opts.new_edits = true;\n }\n }\n\n var adapter = this;\n if (!opts.new_edits && !isRemote(adapter)) {\n // ensure revisions of the same doc are sorted, so that\n // the local adapter processes them correctly (#2935)\n req.docs.sort(compareByIdThenRev);\n }\n\n cleanDocs(req.docs);\n\n // in the case of conflicts, we want to return the _ids to the user\n // however, the underlying adapter may destroy the docs array, so\n // create a copy here\n var ids = req.docs.map(function (doc) {\n return doc._id;\n });\n\n return this._bulkDocs(req, opts, function (err, res) {\n if (err) {\n return callback(err);\n }\n if (!opts.new_edits) {\n // this is what couch does when new_edits is false\n res = res.filter(function (x) {\n return x.error;\n });\n }\n // add ids for error/conflict responses (not required for CouchDB)\n if (!isRemote(adapter)) {\n for (var i = 0, l = res.length; i < l; i++) {\n res[i].id = res[i].id || ids[i];\n }\n }\n\n callback(null, res);\n });\n});\n\nAbstractPouchDB.prototype.registerDependentDatabase =\n adapterFun('registerDependentDatabase', function (dependentDb,\n callback) {\n var depDB = new this.constructor(dependentDb, this.__opts);\n\n function diffFun(doc) {\n doc.dependentDbs = doc.dependentDbs || {};\n if (doc.dependentDbs[dependentDb]) {\n return false; // no update required\n }\n doc.dependentDbs[dependentDb] = true;\n return doc;\n }\n upsert(this, '_local/_pouch_dependentDbs', diffFun)\n .then(function () {\n callback(null, {db: depDB});\n })[\"catch\"](callback);\n});\n\nAbstractPouchDB.prototype.destroy =\n adapterFun('destroy', function (opts, callback) {\n\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n var self = this;\n var usePrefix = 'use_prefix' in self ? self.use_prefix : true;\n\n function destroyDb() {\n // call destroy method of the particular adaptor\n self._destroy(opts, function (err, resp) {\n if (err) {\n return callback(err);\n }\n self._destroyed = true;\n self.emit('destroyed');\n callback(null, resp || { 'ok': true });\n });\n }\n\n if (isRemote(self)) {\n // no need to check for dependent DBs if it's a remote DB\n return destroyDb();\n }\n\n self.get('_local/_pouch_dependentDbs', function (err, localDoc) {\n if (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n return callback(err);\n } else { // no dependencies\n return destroyDb();\n }\n }\n var dependentDbs = localDoc.dependentDbs;\n var PouchDB = self.constructor;\n var deletedMap = Object.keys(dependentDbs).map(function (name) {\n // use_prefix is only false in the browser\n /* istanbul ignore next */\n var trueName = usePrefix ?\n name.replace(new RegExp('^' + PouchDB.prefix), '') : name;\n return new PouchDB(trueName, self.__opts).destroy();\n });\n PouchPromise.all(deletedMap).then(destroyDb, callback);\n });\n});\n\nfunction TaskQueue$1() {\n this.isReady = false;\n this.failed = false;\n this.queue = [];\n}\n\nTaskQueue$1.prototype.execute = function () {\n var fun;\n if (this.failed) {\n while ((fun = this.queue.shift())) {\n fun(this.failed);\n }\n } else {\n while ((fun = this.queue.shift())) {\n fun();\n }\n }\n};\n\nTaskQueue$1.prototype.fail = function (err) {\n this.failed = err;\n this.execute();\n};\n\nTaskQueue$1.prototype.ready = function (db) {\n this.isReady = true;\n this.db = db;\n this.execute();\n};\n\nTaskQueue$1.prototype.addTask = function (fun) {\n this.queue.push(fun);\n if (this.failed) {\n this.execute();\n }\n};\n\nfunction parseAdapter(name, opts) {\n var match = name.match(/([a-z-]*):\\/\\/(.*)/);\n if (match) {\n // the http adapter expects the fully qualified name\n return {\n name: /https?/.test(match[1]) ? match[1] + '://' + match[2] : match[2],\n adapter: match[1]\n };\n }\n\n var adapters = PouchDB.adapters;\n var preferredAdapters = PouchDB.preferredAdapters;\n var prefix = PouchDB.prefix;\n var adapterName = opts.adapter;\n\n if (!adapterName) { // automatically determine adapter\n for (var i = 0; i < preferredAdapters.length; ++i) {\n adapterName = preferredAdapters[i];\n // check for browsers that have been upgraded from websql-only to websql+idb\n /* istanbul ignore if */\n if (adapterName === 'idb' && 'websql' in adapters &&\n hasLocalStorage() && localStorage['_pouch__websqldb_' + prefix + name]) {\n // log it, because this can be confusing during development\n guardedConsole('log', 'PouchDB is downgrading \"' + name + '\" to WebSQL to' +\n ' avoid data loss, because it was already opened with WebSQL.');\n continue; // keep using websql to avoid user data loss\n }\n break;\n }\n }\n\n var adapter = adapters[adapterName];\n\n // if adapter is invalid, then an error will be thrown later\n var usePrefix = (adapter && 'use_prefix' in adapter) ?\n adapter.use_prefix : true;\n\n return {\n name: usePrefix ? (prefix + name) : name,\n adapter: adapterName\n };\n}\n\n// OK, so here's the deal. Consider this code:\n// var db1 = new PouchDB('foo');\n// var db2 = new PouchDB('foo');\n// db1.destroy();\n// ^ these two both need to emit 'destroyed' events,\n// as well as the PouchDB constructor itself.\n// So we have one db object (whichever one got destroy() called on it)\n// responsible for emitting the initial event, which then gets emitted\n// by the constructor, which then broadcasts it to any other dbs\n// that may have been created with the same name.\nfunction prepareForDestruction(self) {\n\n function onDestroyed(from_constructor) {\n self.removeListener('closed', onClosed);\n if (!from_constructor) {\n self.constructor.emit('destroyed', self.name);\n }\n }\n\n function onClosed() {\n self.removeListener('destroyed', onDestroyed);\n self.constructor.emit('unref', self);\n }\n\n self.once('destroyed', onDestroyed);\n self.once('closed', onClosed);\n self.constructor.emit('ref', self);\n}\n\ninherits(PouchDB, AbstractPouchDB);\nfunction PouchDB(name, opts) {\n // In Node our test suite only tests this for PouchAlt unfortunately\n /* istanbul ignore if */\n if (!(this instanceof PouchDB)) {\n return new PouchDB(name, opts);\n }\n\n var self = this;\n opts = opts || {};\n\n if (name && typeof name === 'object') {\n opts = name;\n name = opts.name;\n delete opts.name;\n }\n\n this.__opts = opts = clone(opts);\n\n self.auto_compaction = opts.auto_compaction;\n self.prefix = PouchDB.prefix;\n\n if (typeof name !== 'string') {\n throw new Error('Missing/invalid DB name');\n }\n\n var prefixedName = (opts.prefix || '') + name;\n var backend = parseAdapter(prefixedName, opts);\n\n opts.name = backend.name;\n opts.adapter = opts.adapter || backend.adapter;\n\n self.name = name;\n self._adapter = opts.adapter;\n PouchDB.emit('debug', ['adapter', 'Picked adapter: ', opts.adapter]);\n\n if (!PouchDB.adapters[opts.adapter] ||\n !PouchDB.adapters[opts.adapter].valid()) {\n throw new Error('Invalid Adapter: ' + opts.adapter);\n }\n\n AbstractPouchDB.call(self);\n self.taskqueue = new TaskQueue$1();\n\n self.adapter = opts.adapter;\n\n PouchDB.adapters[opts.adapter].call(self, opts, function (err) {\n if (err) {\n return self.taskqueue.fail(err);\n }\n prepareForDestruction(self);\n\n self.emit('created', self);\n PouchDB.emit('created', self.name);\n self.taskqueue.ready(self);\n });\n\n}\n\nPouchDB.adapters = {};\nPouchDB.preferredAdapters = [];\n\nPouchDB.prefix = '_pouch_';\n\nvar eventEmitter = new events.EventEmitter();\n\nfunction setUpEventEmitter(Pouch) {\n Object.keys(events.EventEmitter.prototype).forEach(function (key) {\n if (typeof events.EventEmitter.prototype[key] === 'function') {\n Pouch[key] = eventEmitter[key].bind(eventEmitter);\n }\n });\n\n // these are created in constructor.js, and allow us to notify each DB with\n // the same name that it was destroyed, via the constructor object\n var destructListeners = Pouch._destructionListeners = new ExportedMap();\n\n Pouch.on('ref', function onConstructorRef(db) {\n if (!destructListeners.has(db.name)) {\n destructListeners.set(db.name, []);\n }\n destructListeners.get(db.name).push(db);\n });\n\n Pouch.on('unref', function onConstructorUnref(db) {\n if (!destructListeners.has(db.name)) {\n return;\n }\n var dbList = destructListeners.get(db.name);\n var pos = dbList.indexOf(db);\n if (pos < 0) {\n /* istanbul ignore next */\n return;\n }\n dbList.splice(pos, 1);\n if (dbList.length > 1) {\n /* istanbul ignore next */\n destructListeners.set(db.name, dbList);\n } else {\n destructListeners[\"delete\"](db.name);\n }\n });\n\n Pouch.on('destroyed', function onConstructorDestroyed(name) {\n if (!destructListeners.has(name)) {\n return;\n }\n var dbList = destructListeners.get(name);\n destructListeners[\"delete\"](name);\n dbList.forEach(function (db) {\n db.emit('destroyed',true);\n });\n });\n}\n\nsetUpEventEmitter(PouchDB);\n\nPouchDB.adapter = function (id, obj, addToPreferredAdapters) {\n /* istanbul ignore else */\n if (obj.valid()) {\n PouchDB.adapters[id] = obj;\n if (addToPreferredAdapters) {\n PouchDB.preferredAdapters.push(id);\n }\n }\n};\n\nPouchDB.plugin = function (obj) {\n if (typeof obj === 'function') { // function style for plugins\n obj(PouchDB);\n } else if (typeof obj !== 'object' || Object.keys(obj).length === 0) {\n throw new Error('Invalid plugin: got \"' + obj + '\", expected an object or a function');\n } else {\n Object.keys(obj).forEach(function (id) { // object style for plugins\n PouchDB.prototype[id] = obj[id];\n });\n }\n if (this.__defaults) {\n PouchDB.__defaults = $inject_Object_assign({}, this.__defaults);\n }\n return PouchDB;\n};\n\nPouchDB.defaults = function (defaultOpts) {\n function PouchAlt(name, opts) {\n if (!(this instanceof PouchAlt)) {\n return new PouchAlt(name, opts);\n }\n\n opts = opts || {};\n\n if (name && typeof name === 'object') {\n opts = name;\n name = opts.name;\n delete opts.name;\n }\n\n opts = $inject_Object_assign({}, PouchAlt.__defaults, opts);\n PouchDB.call(this, name, opts);\n }\n\n inherits(PouchAlt, PouchDB);\n\n PouchAlt.preferredAdapters = PouchDB.preferredAdapters.slice();\n Object.keys(PouchDB).forEach(function (key) {\n if (!(key in PouchAlt)) {\n PouchAlt[key] = PouchDB[key];\n }\n });\n\n // make default options transitive\n // https://github.com/pouchdb/pouchdb/issues/5922\n PouchAlt.__defaults = $inject_Object_assign({}, this.__defaults, defaultOpts);\n\n return PouchAlt;\n};\n\n// managed automatically by set-version.js\nvar version = \"6.4.3\";\n\nfunction debugPouch(PouchDB) {\n PouchDB.debug = debug;\n var logs = {};\n /* istanbul ignore next */\n PouchDB.on('debug', function (args) {\n // first argument is log identifier\n var logId = args[0];\n // rest should be passed verbatim to debug module\n var logArgs = args.slice(1);\n if (!logs[logId]) {\n logs[logId] = debug('pouchdb:' + logId);\n }\n logs[logId].apply(null, logArgs);\n });\n}\n\n// this would just be \"return doc[field]\", but fields\n// can be \"deep\" due to dot notation\nfunction getFieldFromDoc(doc, parsedField) {\n var value = doc;\n for (var i = 0, len = parsedField.length; i < len; i++) {\n var key = parsedField[i];\n value = value[key];\n if (!value) {\n break;\n }\n }\n return value;\n}\n\nfunction compare$1(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\n// Converts a string in dot notation to an array of its components, with backslash escaping\nfunction parseField(fieldName) {\n // fields may be deep (e.g. \"foo.bar.baz\"), so parse\n var fields = [];\n var current = '';\n for (var i = 0, len = fieldName.length; i < len; i++) {\n var ch = fieldName[i];\n if (ch === '.') {\n if (i > 0 && fieldName[i - 1] === '\\\\') { // escaped delimiter\n current = current.substring(0, current.length - 1) + '.';\n } else { // not escaped, so delimiter\n fields.push(current);\n current = '';\n }\n } else { // normal character\n current += ch;\n }\n }\n fields.push(current);\n return fields;\n}\n\nvar combinationFields = ['$or', '$nor', '$not'];\nfunction isCombinationalField(field) {\n return combinationFields.indexOf(field) > -1;\n}\n\nfunction getKey(obj) {\n return Object.keys(obj)[0];\n}\n\nfunction getValue(obj) {\n return obj[getKey(obj)];\n}\n\n\n// flatten an array of selectors joined by an $and operator\nfunction mergeAndedSelectors(selectors) {\n\n // sort to ensure that e.g. if the user specified\n // $and: [{$gt: 'a'}, {$gt: 'b'}], then it's collapsed into\n // just {$gt: 'b'}\n var res = {};\n\n selectors.forEach(function (selector) {\n Object.keys(selector).forEach(function (field) {\n var matcher = selector[field];\n if (typeof matcher !== 'object') {\n matcher = {$eq: matcher};\n }\n\n if (isCombinationalField(field)) {\n if (matcher instanceof Array) {\n res[field] = matcher.map(function (m) {\n return mergeAndedSelectors([m]);\n });\n } else {\n res[field] = mergeAndedSelectors([matcher]);\n }\n } else {\n var fieldMatchers = res[field] = res[field] || {};\n Object.keys(matcher).forEach(function (operator) {\n var value = matcher[operator];\n\n if (operator === '$gt' || operator === '$gte') {\n return mergeGtGte(operator, value, fieldMatchers);\n } else if (operator === '$lt' || operator === '$lte') {\n return mergeLtLte(operator, value, fieldMatchers);\n } else if (operator === '$ne') {\n return mergeNe(value, fieldMatchers);\n } else if (operator === '$eq') {\n return mergeEq(value, fieldMatchers);\n }\n fieldMatchers[operator] = value;\n });\n }\n });\n });\n\n return res;\n}\n\n\n\n// collapse logically equivalent gt/gte values\nfunction mergeGtGte(operator, value, fieldMatchers) {\n if (typeof fieldMatchers.$eq !== 'undefined') {\n return; // do nothing\n }\n if (typeof fieldMatchers.$gte !== 'undefined') {\n if (operator === '$gte') {\n if (value > fieldMatchers.$gte) { // more specificity\n fieldMatchers.$gte = value;\n }\n } else { // operator === '$gt'\n if (value >= fieldMatchers.$gte) { // more specificity\n delete fieldMatchers.$gte;\n fieldMatchers.$gt = value;\n }\n }\n } else if (typeof fieldMatchers.$gt !== 'undefined') {\n if (operator === '$gte') {\n if (value > fieldMatchers.$gt) { // more specificity\n delete fieldMatchers.$gt;\n fieldMatchers.$gte = value;\n }\n } else { // operator === '$gt'\n if (value > fieldMatchers.$gt) { // more specificity\n fieldMatchers.$gt = value;\n }\n }\n } else {\n fieldMatchers[operator] = value;\n }\n}\n\n// collapse logically equivalent lt/lte values\nfunction mergeLtLte(operator, value, fieldMatchers) {\n if (typeof fieldMatchers.$eq !== 'undefined') {\n return; // do nothing\n }\n if (typeof fieldMatchers.$lte !== 'undefined') {\n if (operator === '$lte') {\n if (value < fieldMatchers.$lte) { // more specificity\n fieldMatchers.$lte = value;\n }\n } else { // operator === '$gt'\n if (value <= fieldMatchers.$lte) { // more specificity\n delete fieldMatchers.$lte;\n fieldMatchers.$lt = value;\n }\n }\n } else if (typeof fieldMatchers.$lt !== 'undefined') {\n if (operator === '$lte') {\n if (value < fieldMatchers.$lt) { // more specificity\n delete fieldMatchers.$lt;\n fieldMatchers.$lte = value;\n }\n } else { // operator === '$gt'\n if (value < fieldMatchers.$lt) { // more specificity\n fieldMatchers.$lt = value;\n }\n }\n } else {\n fieldMatchers[operator] = value;\n }\n}\n\n// combine $ne values into one array\nfunction mergeNe(value, fieldMatchers) {\n if ('$ne' in fieldMatchers) {\n // there are many things this could \"not\" be\n fieldMatchers.$ne.push(value);\n } else { // doesn't exist yet\n fieldMatchers.$ne = [value];\n }\n}\n\n// add $eq into the mix\nfunction mergeEq(value, fieldMatchers) {\n // these all have less specificity than the $eq\n // TODO: check for user errors here\n delete fieldMatchers.$gt;\n delete fieldMatchers.$gte;\n delete fieldMatchers.$lt;\n delete fieldMatchers.$lte;\n delete fieldMatchers.$ne;\n fieldMatchers.$eq = value;\n}\n\n\n//\n// normalize the selector\n//\nfunction massageSelector(input) {\n var result = clone(input);\n var wasAnded = false;\n if ('$and' in result) {\n result = mergeAndedSelectors(result['$and']);\n wasAnded = true;\n }\n\n ['$or', '$nor'].forEach(function (orOrNor) {\n if (orOrNor in result) {\n // message each individual selector\n // e.g. {foo: 'bar'} becomes {foo: {$eq: 'bar'}}\n result[orOrNor].forEach(function (subSelector) {\n var fields = Object.keys(subSelector);\n for (var i = 0; i < fields.length; i++) {\n var field = fields[i];\n var matcher = subSelector[field];\n if (typeof matcher !== 'object' || matcher === null) {\n subSelector[field] = {$eq: matcher};\n }\n }\n });\n }\n });\n\n if ('$not' in result) {\n //This feels a little like forcing, but it will work for now,\n //I would like to come back to this and make the merging of selectors a little more generic\n result['$not'] = mergeAndedSelectors([result['$not']]);\n }\n\n var fields = Object.keys(result);\n\n for (var i = 0; i < fields.length; i++) {\n var field = fields[i];\n var matcher = result[field];\n\n if (typeof matcher !== 'object' || matcher === null) {\n matcher = {$eq: matcher};\n } else if ('$ne' in matcher && !wasAnded) {\n // I put these in an array, since there may be more than one\n // but in the \"mergeAnded\" operation, I already take care of that\n matcher.$ne = [matcher.$ne];\n }\n result[field] = matcher;\n }\n\n return result;\n}\n\nfunction pad(str, padWith, upToLength) {\n var padding = '';\n var targetLength = upToLength - str.length;\n /* istanbul ignore next */\n while (padding.length < targetLength) {\n padding += padWith;\n }\n return padding;\n}\n\nfunction padLeft(str, padWith, upToLength) {\n var padding = pad(str, padWith, upToLength);\n return padding + str;\n}\n\nvar MIN_MAGNITUDE = -324; // verified by -Number.MIN_VALUE\nvar MAGNITUDE_DIGITS = 3; // ditto\nvar SEP = ''; // set to '_' for easier debugging \n\nfunction collate(a, b) {\n\n if (a === b) {\n return 0;\n }\n\n a = normalizeKey(a);\n b = normalizeKey(b);\n\n var ai = collationIndex(a);\n var bi = collationIndex(b);\n if ((ai - bi) !== 0) {\n return ai - bi;\n }\n switch (typeof a) {\n case 'number':\n return a - b;\n case 'boolean':\n return a < b ? -1 : 1;\n case 'string':\n return stringCollate(a, b);\n }\n return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b);\n}\n\n// couch considers null/NaN/Infinity/-Infinity === undefined,\n// for the purposes of mapreduce indexes. also, dates get stringified.\nfunction normalizeKey(key) {\n switch (typeof key) {\n case 'undefined':\n return null;\n case 'number':\n if (key === Infinity || key === -Infinity || isNaN(key)) {\n return null;\n }\n return key;\n case 'object':\n var origKey = key;\n if (Array.isArray(key)) {\n var len = key.length;\n key = new Array(len);\n for (var i = 0; i < len; i++) {\n key[i] = normalizeKey(origKey[i]);\n }\n /* istanbul ignore next */\n } else if (key instanceof Date) {\n return key.toJSON();\n } else if (key !== null) { // generic object\n key = {};\n for (var k in origKey) {\n if (origKey.hasOwnProperty(k)) {\n var val = origKey[k];\n if (typeof val !== 'undefined') {\n key[k] = normalizeKey(val);\n }\n }\n }\n }\n }\n return key;\n}\n\nfunction indexify(key) {\n if (key !== null) {\n switch (typeof key) {\n case 'boolean':\n return key ? 1 : 0;\n case 'number':\n return numToIndexableString(key);\n case 'string':\n // We've to be sure that key does not contain \\u0000\n // Do order-preserving replacements:\n // 0 -> 1, 1\n // 1 -> 1, 2\n // 2 -> 2, 2\n return key\n .replace(/\\u0002/g, '\\u0002\\u0002')\n .replace(/\\u0001/g, '\\u0001\\u0002')\n .replace(/\\u0000/g, '\\u0001\\u0001');\n case 'object':\n var isArray = Array.isArray(key);\n var arr = isArray ? key : Object.keys(key);\n var i = -1;\n var len = arr.length;\n var result = '';\n if (isArray) {\n while (++i < len) {\n result += toIndexableString(arr[i]);\n }\n } else {\n while (++i < len) {\n var objKey = arr[i];\n result += toIndexableString(objKey) +\n toIndexableString(key[objKey]);\n }\n }\n return result;\n }\n }\n return '';\n}\n\n// convert the given key to a string that would be appropriate\n// for lexical sorting, e.g. within a database, where the\n// sorting is the same given by the collate() function.\nfunction toIndexableString(key) {\n var zero = '\\u0000';\n key = normalizeKey(key);\n return collationIndex(key) + SEP + indexify(key) + zero;\n}\n\nfunction parseNumber(str, i) {\n var originalIdx = i;\n var num;\n var zero = str[i] === '1';\n if (zero) {\n num = 0;\n i++;\n } else {\n var neg = str[i] === '0';\n i++;\n var numAsString = '';\n var magAsString = str.substring(i, i + MAGNITUDE_DIGITS);\n var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE;\n /* istanbul ignore next */\n if (neg) {\n magnitude = -magnitude;\n }\n i += MAGNITUDE_DIGITS;\n while (true) {\n var ch = str[i];\n if (ch === '\\u0000') {\n break;\n } else {\n numAsString += ch;\n }\n i++;\n }\n numAsString = numAsString.split('.');\n if (numAsString.length === 1) {\n num = parseInt(numAsString, 10);\n } else {\n /* istanbul ignore next */\n num = parseFloat(numAsString[0] + '.' + numAsString[1]);\n }\n /* istanbul ignore next */\n if (neg) {\n num = num - 10;\n }\n /* istanbul ignore next */\n if (magnitude !== 0) {\n // parseFloat is more reliable than pow due to rounding errors\n // e.g. Number.MAX_VALUE would return Infinity if we did\n // num * Math.pow(10, magnitude);\n num = parseFloat(num + 'e' + magnitude);\n }\n }\n return {num: num, length : i - originalIdx};\n}\n\n// move up the stack while parsing\n// this function moved outside of parseIndexableString for performance\nfunction pop(stack, metaStack) {\n var obj = stack.pop();\n\n if (metaStack.length) {\n var lastMetaElement = metaStack[metaStack.length - 1];\n if (obj === lastMetaElement.element) {\n // popping a meta-element, e.g. an object whose value is another object\n metaStack.pop();\n lastMetaElement = metaStack[metaStack.length - 1];\n }\n var element = lastMetaElement.element;\n var lastElementIndex = lastMetaElement.index;\n if (Array.isArray(element)) {\n element.push(obj);\n } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n var key = stack.pop();\n element[key] = obj;\n } else {\n stack.push(obj); // obj with key only\n }\n }\n}\n\nfunction parseIndexableString(str) {\n var stack = [];\n var metaStack = []; // stack for arrays and objects\n var i = 0;\n\n /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n while (true) {\n var collationIndex = str[i++];\n if (collationIndex === '\\u0000') {\n if (stack.length === 1) {\n return stack.pop();\n } else {\n pop(stack, metaStack);\n continue;\n }\n }\n switch (collationIndex) {\n case '1':\n stack.push(null);\n break;\n case '2':\n stack.push(str[i] === '1');\n i++;\n break;\n case '3':\n var parsedNum = parseNumber(str, i);\n stack.push(parsedNum.num);\n i += parsedNum.length;\n break;\n case '4':\n var parsedStr = '';\n /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n while (true) {\n var ch = str[i];\n if (ch === '\\u0000') {\n break;\n }\n parsedStr += ch;\n i++;\n }\n // perform the reverse of the order-preserving replacement\n // algorithm (see above)\n parsedStr = parsedStr.replace(/\\u0001\\u0001/g, '\\u0000')\n .replace(/\\u0001\\u0002/g, '\\u0001')\n .replace(/\\u0002\\u0002/g, '\\u0002');\n stack.push(parsedStr);\n break;\n case '5':\n var arrayElement = { element: [], index: stack.length };\n stack.push(arrayElement.element);\n metaStack.push(arrayElement);\n break;\n case '6':\n var objElement = { element: {}, index: stack.length };\n stack.push(objElement.element);\n metaStack.push(objElement);\n break;\n /* istanbul ignore next */\n default:\n throw new Error(\n 'bad collationIndex or unexpectedly reached end of input: ' +\n collationIndex);\n }\n }\n}\n\nfunction arrayCollate(a, b) {\n var len = Math.min(a.length, b.length);\n for (var i = 0; i < len; i++) {\n var sort = collate(a[i], b[i]);\n if (sort !== 0) {\n return sort;\n }\n }\n return (a.length === b.length) ? 0 :\n (a.length > b.length) ? 1 : -1;\n}\nfunction stringCollate(a, b) {\n // See: https://github.com/daleharvey/pouchdb/issues/40\n // This is incompatible with the CouchDB implementation, but its the\n // best we can do for now\n return (a === b) ? 0 : ((a > b) ? 1 : -1);\n}\nfunction objectCollate(a, b) {\n var ak = Object.keys(a), bk = Object.keys(b);\n var len = Math.min(ak.length, bk.length);\n for (var i = 0; i < len; i++) {\n // First sort the keys\n var sort = collate(ak[i], bk[i]);\n if (sort !== 0) {\n return sort;\n }\n // if the keys are equal sort the values\n sort = collate(a[ak[i]], b[bk[i]]);\n if (sort !== 0) {\n return sort;\n }\n\n }\n return (ak.length === bk.length) ? 0 :\n (ak.length > bk.length) ? 1 : -1;\n}\n// The collation is defined by erlangs ordered terms\n// the atoms null, true, false come first, then numbers, strings,\n// arrays, then objects\n// null/undefined/NaN/Infinity/-Infinity are all considered null\nfunction collationIndex(x) {\n var id = ['boolean', 'number', 'string', 'object'];\n var idx = id.indexOf(typeof x);\n //false if -1 otherwise true, but fast!!!!1\n if (~idx) {\n if (x === null) {\n return 1;\n }\n if (Array.isArray(x)) {\n return 5;\n }\n return idx < 3 ? (idx + 2) : (idx + 3);\n }\n /* istanbul ignore next */\n if (Array.isArray(x)) {\n return 5;\n }\n}\n\n// conversion:\n// x yyy zz...zz\n// x = 0 for negative, 1 for 0, 2 for positive\n// y = exponent (for negative numbers negated) moved so that it's >= 0\n// z = mantisse\nfunction numToIndexableString(num) {\n\n if (num === 0) {\n return '1';\n }\n\n // convert number to exponential format for easier and\n // more succinct string sorting\n var expFormat = num.toExponential().split(/e\\+?/);\n var magnitude = parseInt(expFormat[1], 10);\n\n var neg = num < 0;\n\n var result = neg ? '0' : '2';\n\n // first sort by magnitude\n // it's easier if all magnitudes are positive\n var magForComparison = ((neg ? -magnitude : magnitude) - MIN_MAGNITUDE);\n var magString = padLeft((magForComparison).toString(), '0', MAGNITUDE_DIGITS);\n\n result += SEP + magString;\n\n // then sort by the factor\n var factor = Math.abs(parseFloat(expFormat[0])); // [1..10)\n /* istanbul ignore next */\n if (neg) { // for negative reverse ordering\n factor = 10 - factor;\n }\n\n var factorStr = factor.toFixed(20);\n\n // strip zeros from the end\n factorStr = factorStr.replace(/\\.?0+$/, '');\n\n result += SEP + factorStr;\n\n return result;\n}\n\n// create a comparator based on the sort object\nfunction createFieldSorter(sort) {\n\n function getFieldValuesAsArray(doc) {\n return sort.map(function (sorting) {\n var fieldName = getKey(sorting);\n var parsedField = parseField(fieldName);\n var docFieldValue = getFieldFromDoc(doc, parsedField);\n return docFieldValue;\n });\n }\n\n return function (aRow, bRow) {\n var aFieldValues = getFieldValuesAsArray(aRow.doc);\n var bFieldValues = getFieldValuesAsArray(bRow.doc);\n var collation = collate(aFieldValues, bFieldValues);\n if (collation !== 0) {\n return collation;\n }\n // this is what mango seems to do\n return compare$1(aRow.doc._id, bRow.doc._id);\n };\n}\n\nfunction filterInMemoryFields(rows, requestDef, inMemoryFields) {\n rows = rows.filter(function (row) {\n return rowFilter(row.doc, requestDef.selector, inMemoryFields);\n });\n\n if (requestDef.sort) {\n // in-memory sort\n var fieldSorter = createFieldSorter(requestDef.sort);\n rows = rows.sort(fieldSorter);\n if (typeof requestDef.sort[0] !== 'string' &&\n getValue(requestDef.sort[0]) === 'desc') {\n rows = rows.reverse();\n }\n }\n\n if ('limit' in requestDef || 'skip' in requestDef) {\n // have to do the limit in-memory\n var skip = requestDef.skip || 0;\n var limit = ('limit' in requestDef ? requestDef.limit : rows.length) + skip;\n rows = rows.slice(skip, limit);\n }\n return rows;\n}\n\nfunction rowFilter(doc, selector, inMemoryFields) {\n return inMemoryFields.every(function (field) {\n var matcher = selector[field];\n var parsedField = parseField(field);\n var docFieldValue = getFieldFromDoc(doc, parsedField);\n if (isCombinationalField(field)) {\n return matchCominationalSelector(field, matcher, doc);\n }\n\n return matchSelector(matcher, doc, parsedField, docFieldValue);\n });\n}\n\nfunction matchSelector(matcher, doc, parsedField, docFieldValue) {\n if (!matcher) {\n // no filtering necessary; this field is just needed for sorting\n return true;\n }\n\n return Object.keys(matcher).every(function (userOperator) {\n var userValue = matcher[userOperator];\n return match(userOperator, doc, userValue, parsedField, docFieldValue);\n });\n}\n\nfunction matchCominationalSelector(field, matcher, doc) {\n\n if (field === '$or') {\n return matcher.some(function (orMatchers) {\n return rowFilter(doc, orMatchers, Object.keys(orMatchers));\n });\n }\n\n if (field === '$not') {\n return !rowFilter(doc, matcher, Object.keys(matcher));\n }\n\n //`$nor`\n return !matcher.find(function (orMatchers) {\n return rowFilter(doc, orMatchers, Object.keys(orMatchers));\n });\n\n}\n\nfunction match(userOperator, doc, userValue, parsedField, docFieldValue) {\n if (!matchers[userOperator]) {\n throw new Error('unknown operator \"' + userOperator +\n '\" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, ' +\n '$nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');\n }\n return matchers[userOperator](doc, userValue, parsedField, docFieldValue);\n}\n\nfunction fieldExists(docFieldValue) {\n return typeof docFieldValue !== 'undefined' && docFieldValue !== null;\n}\n\nfunction fieldIsNotUndefined(docFieldValue) {\n return typeof docFieldValue !== 'undefined';\n}\n\nfunction modField(docFieldValue, userValue) {\n var divisor = userValue[0];\n var mod = userValue[1];\n if (divisor === 0) {\n throw new Error('Bad divisor, cannot divide by zero');\n }\n\n if (parseInt(divisor, 10) !== divisor ) {\n throw new Error('Divisor is not an integer');\n }\n\n if (parseInt(mod, 10) !== mod ) {\n throw new Error('Modulus is not an integer');\n }\n\n if (parseInt(docFieldValue, 10) !== docFieldValue) {\n return false;\n }\n\n return docFieldValue % divisor === mod;\n}\n\nfunction arrayContainsValue(docFieldValue, userValue) {\n return userValue.some(function (val) {\n if (docFieldValue instanceof Array) {\n return docFieldValue.indexOf(val) > -1;\n }\n\n return docFieldValue === val;\n });\n}\n\nfunction arrayContainsAllValues(docFieldValue, userValue) {\n return userValue.every(function (val) {\n return docFieldValue.indexOf(val) > -1;\n });\n}\n\nfunction arraySize(docFieldValue, userValue) {\n return docFieldValue.length === userValue;\n}\n\nfunction regexMatch(docFieldValue, userValue) {\n var re = new RegExp(userValue);\n\n return re.test(docFieldValue);\n}\n\nfunction typeMatch(docFieldValue, userValue) {\n\n switch (userValue) {\n case 'null':\n return docFieldValue === null;\n case 'boolean':\n return typeof (docFieldValue) === 'boolean';\n case 'number':\n return typeof (docFieldValue) === 'number';\n case 'string':\n return typeof (docFieldValue) === 'string';\n case 'array':\n return docFieldValue instanceof Array;\n case 'object':\n return ({}).toString.call(docFieldValue) === '[object Object]';\n }\n\n throw new Error(userValue + ' not supported as a type.' +\n 'Please use one of object, string, array, number, boolean or null.');\n\n}\n\nvar matchers = {\n\n '$elemMatch': function (doc, userValue, parsedField, docFieldValue) {\n if (!Array.isArray(docFieldValue)) {\n return false;\n }\n\n if (docFieldValue.length === 0) {\n return false;\n }\n\n if (typeof docFieldValue[0] === 'object') {\n return docFieldValue.some(function (val) {\n return rowFilter(val, userValue, Object.keys(userValue));\n });\n }\n\n return docFieldValue.some(function (val) {\n return matchSelector(userValue, doc, parsedField, val);\n });\n },\n\n '$allMatch': function (doc, userValue, parsedField, docFieldValue) {\n if (!Array.isArray(docFieldValue)) {\n return false;\n }\n\n /* istanbul ignore next */\n if (docFieldValue.length === 0) {\n return false;\n }\n\n if (typeof docFieldValue[0] === 'object') {\n return docFieldValue.every(function (val) {\n return rowFilter(val, userValue, Object.keys(userValue));\n });\n }\n\n return docFieldValue.every(function (val) {\n return matchSelector(userValue, doc, parsedField, val);\n });\n },\n\n '$eq': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) === 0;\n },\n\n '$gte': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) >= 0;\n },\n\n '$gt': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) > 0;\n },\n\n '$lte': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) <= 0;\n },\n\n '$lt': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) < 0;\n },\n\n '$exists': function (doc, userValue, parsedField, docFieldValue) {\n //a field that is null is still considered to exist\n if (userValue) {\n return fieldIsNotUndefined(docFieldValue);\n }\n\n return !fieldIsNotUndefined(docFieldValue);\n },\n\n '$mod': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && modField(docFieldValue, userValue);\n },\n\n '$ne': function (doc, userValue, parsedField, docFieldValue) {\n return userValue.every(function (neValue) {\n return collate(docFieldValue, neValue) !== 0;\n });\n },\n '$in': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && arrayContainsValue(docFieldValue, userValue);\n },\n\n '$nin': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && !arrayContainsValue(docFieldValue, userValue);\n },\n\n '$size': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && arraySize(docFieldValue, userValue);\n },\n\n '$all': function (doc, userValue, parsedField, docFieldValue) {\n return Array.isArray(docFieldValue) && arrayContainsAllValues(docFieldValue, userValue);\n },\n\n '$regex': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && regexMatch(docFieldValue, userValue);\n },\n\n '$type': function (doc, userValue, parsedField, docFieldValue) {\n return typeMatch(docFieldValue, userValue);\n }\n};\n\n// return true if the given doc matches the supplied selector\nfunction matchesSelector(doc, selector) {\n /* istanbul ignore if */\n if (typeof selector !== 'object') {\n // match the CouchDB error message\n throw new Error('Selector error: expected a JSON object');\n }\n\n selector = massageSelector(selector);\n var row = {\n 'doc': doc\n };\n\n var rowsMatched = filterInMemoryFields([row], { 'selector': selector }, Object.keys(selector));\n return rowsMatched && rowsMatched.length === 1;\n}\n\nfunction evalFilter(input) {\n return scopeEval('\"use strict\";\\nreturn ' + input + ';', {});\n}\n\nfunction evalView(input) {\n var code = [\n 'return function(doc) {',\n ' \"use strict\";',\n ' var emitted = false;',\n ' var emit = function (a, b) {',\n ' emitted = true;',\n ' };',\n ' var view = ' + input + ';',\n ' view(doc);',\n ' if (emitted) {',\n ' return true;',\n ' }',\n '};'\n ].join('\\n');\n\n return scopeEval(code, {});\n}\n\nfunction validate(opts, callback) {\n if (opts.selector) {\n if (opts.filter && opts.filter !== '_selector') {\n var filterName = typeof opts.filter === 'string' ?\n opts.filter : 'function';\n return callback(new Error('selector invalid for filter \"' + filterName + '\"'));\n }\n }\n callback();\n}\n\nfunction normalize(opts) {\n if (opts.view && !opts.filter) {\n opts.filter = '_view';\n }\n\n if (opts.selector && !opts.filter) {\n opts.filter = '_selector';\n }\n\n if (opts.filter && typeof opts.filter === 'string') {\n if (opts.filter === '_view') {\n opts.view = normalizeDesignDocFunctionName(opts.view);\n } else {\n opts.filter = normalizeDesignDocFunctionName(opts.filter);\n }\n }\n}\n\nfunction shouldFilter(changesHandler, opts) {\n return opts.filter && typeof opts.filter === 'string' &&\n !opts.doc_ids && !isRemote(changesHandler.db);\n}\n\nfunction filter(changesHandler, opts) {\n var callback = opts.complete;\n if (opts.filter === '_view') {\n if (!opts.view || typeof opts.view !== 'string') {\n var err = createError(BAD_REQUEST,\n '`view` filter parameter not found or invalid.');\n return callback(err);\n }\n // fetch a view from a design doc, make it behave like a filter\n var viewName = parseDesignDocFunctionName(opts.view);\n changesHandler.db.get('_design/' + viewName[0], function (err, ddoc) {\n /* istanbul ignore if */\n if (changesHandler.isCancelled) {\n return callback(null, {status: 'cancelled'});\n }\n /* istanbul ignore next */\n if (err) {\n return callback(generateErrorFromResponse(err));\n }\n var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] &&\n ddoc.views[viewName[1]].map;\n if (!mapFun) {\n return callback(createError(MISSING_DOC,\n (ddoc.views ? 'missing json key: ' + viewName[1] :\n 'missing json key: views')));\n }\n opts.filter = evalView(mapFun);\n changesHandler.doChanges(opts);\n });\n } else if (opts.selector) {\n opts.filter = function (doc) {\n return matchesSelector(doc, opts.selector);\n };\n changesHandler.doChanges(opts);\n } else {\n // fetch a filter from a design doc\n var filterName = parseDesignDocFunctionName(opts.filter);\n changesHandler.db.get('_design/' + filterName[0], function (err, ddoc) {\n /* istanbul ignore if */\n if (changesHandler.isCancelled) {\n return callback(null, {status: 'cancelled'});\n }\n /* istanbul ignore next */\n if (err) {\n return callback(generateErrorFromResponse(err));\n }\n var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];\n if (!filterFun) {\n return callback(createError(MISSING_DOC,\n ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1]\n : 'missing json key: filters')));\n }\n opts.filter = evalFilter(filterFun);\n changesHandler.doChanges(opts);\n });\n }\n}\n\nfunction applyChangesFilterPlugin(PouchDB) {\n PouchDB._changesFilterPlugin = {\n validate: validate,\n normalize: normalize,\n shouldFilter: shouldFilter,\n filter: filter\n };\n}\n\n// TODO: remove from pouchdb-core (breaking)\nPouchDB.plugin(debugPouch);\n\n// TODO: remove from pouchdb-core (breaking)\nPouchDB.plugin(applyChangesFilterPlugin);\n\nPouchDB.version = version;\n\nfunction toObject(array) {\n return array.reduce(function (obj, item) {\n obj[item] = true;\n return obj;\n }, {});\n}\n// List of top level reserved words for doc\nvar reservedWords = toObject([\n '_id',\n '_rev',\n '_attachments',\n '_deleted',\n '_revisions',\n '_revs_info',\n '_conflicts',\n '_deleted_conflicts',\n '_local_seq',\n '_rev_tree',\n //replication documents\n '_replication_id',\n '_replication_state',\n '_replication_state_time',\n '_replication_state_reason',\n '_replication_stats',\n // Specific to Couchbase Sync Gateway\n '_removed'\n]);\n\n// List of reserved words that should end up the document\nvar dataWords = toObject([\n '_attachments',\n //replication documents\n '_replication_id',\n '_replication_state',\n '_replication_state_time',\n '_replication_state_reason',\n '_replication_stats'\n]);\n\nfunction parseRevisionInfo(rev$$1) {\n if (!/^\\d+-./.test(rev$$1)) {\n return createError(INVALID_REV);\n }\n var idx = rev$$1.indexOf('-');\n var left = rev$$1.substring(0, idx);\n var right = rev$$1.substring(idx + 1);\n return {\n prefix: parseInt(left, 10),\n id: right\n };\n}\n\nfunction makeRevTreeFromRevisions(revisions, opts) {\n var pos = revisions.start - revisions.ids.length + 1;\n\n var revisionIds = revisions.ids;\n var ids = [revisionIds[0], opts, []];\n\n for (var i = 1, len = revisionIds.length; i < len; i++) {\n ids = [revisionIds[i], {status: 'missing'}, [ids]];\n }\n\n return [{\n pos: pos,\n ids: ids\n }];\n}\n\n// Preprocess documents, parse their revisions, assign an id and a\n// revision for new writes that are missing them, etc\nfunction parseDoc(doc, newEdits) {\n\n var nRevNum;\n var newRevId;\n var revInfo;\n var opts = {status: 'available'};\n if (doc._deleted) {\n opts.deleted = true;\n }\n\n if (newEdits) {\n if (!doc._id) {\n doc._id = uuid();\n }\n newRevId = rev();\n if (doc._rev) {\n revInfo = parseRevisionInfo(doc._rev);\n if (revInfo.error) {\n return revInfo;\n }\n doc._rev_tree = [{\n pos: revInfo.prefix,\n ids: [revInfo.id, {status: 'missing'}, [[newRevId, opts, []]]]\n }];\n nRevNum = revInfo.prefix + 1;\n } else {\n doc._rev_tree = [{\n pos: 1,\n ids : [newRevId, opts, []]\n }];\n nRevNum = 1;\n }\n } else {\n if (doc._revisions) {\n doc._rev_tree = makeRevTreeFromRevisions(doc._revisions, opts);\n nRevNum = doc._revisions.start;\n newRevId = doc._revisions.ids[0];\n }\n if (!doc._rev_tree) {\n revInfo = parseRevisionInfo(doc._rev);\n if (revInfo.error) {\n return revInfo;\n }\n nRevNum = revInfo.prefix;\n newRevId = revInfo.id;\n doc._rev_tree = [{\n pos: nRevNum,\n ids: [newRevId, opts, []]\n }];\n }\n }\n\n invalidIdError(doc._id);\n\n doc._rev = nRevNum + '-' + newRevId;\n\n var result = {metadata : {}, data : {}};\n for (var key in doc) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(doc, key)) {\n var specialKey = key[0] === '_';\n if (specialKey && !reservedWords[key]) {\n var error = createError(DOC_VALIDATION, key);\n error.message = DOC_VALIDATION.message + ': ' + key;\n throw error;\n } else if (specialKey && !dataWords[key]) {\n result.metadata[key.slice(1)] = doc[key];\n } else {\n result.data[key] = doc[key];\n }\n }\n }\n return result;\n}\n\nvar thisAtob = function (str) {\n return atob(str);\n};\n\nvar thisBtoa = function (str) {\n return btoa(str);\n};\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor (e.g.\n// old QtWebKit versions, Android < 4.4).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== \"TypeError\") {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\n typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\n typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :\n WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction binaryStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\nfunction binStringToBluffer(binString, type) {\n return createBlob([binaryStringToArrayBuffer(binString)], {type: type});\n}\n\nfunction b64ToBluffer(b64, type) {\n return binStringToBluffer(thisAtob(b64), type);\n}\n\n//Can't find original post, but this is close\n//http://stackoverflow.com/questions/6965107/ (continues on next line)\n//converting-between-strings-and-arraybuffers\nfunction arrayBufferToBinaryString(buffer) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var length = bytes.byteLength;\n for (var i = 0; i < length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return binary;\n}\n\n// shim for browsers that don't support it\nfunction readAsBinaryString(blob, callback) {\n if (typeof FileReader === 'undefined') {\n // fix for Firefox in a web worker\n // https://bugzilla.mozilla.org/show_bug.cgi?id=901097\n return callback(arrayBufferToBinaryString(\n new FileReaderSync().readAsArrayBuffer(blob)));\n }\n\n var reader = new FileReader();\n var hasBinaryString = typeof reader.readAsBinaryString === 'function';\n reader.onloadend = function (e) {\n var result = e.target.result || '';\n if (hasBinaryString) {\n return callback(result);\n }\n callback(arrayBufferToBinaryString(result));\n };\n if (hasBinaryString) {\n reader.readAsBinaryString(blob);\n } else {\n reader.readAsArrayBuffer(blob);\n }\n}\n\nfunction blobToBinaryString(blobOrBuffer, callback) {\n readAsBinaryString(blobOrBuffer, function (bin) {\n callback(bin);\n });\n}\n\nfunction blobToBase64(blobOrBuffer, callback) {\n blobToBinaryString(blobOrBuffer, function (base64) {\n callback(thisBtoa(base64));\n });\n}\n\n// simplified API. universal browser support is assumed\nfunction readAsArrayBuffer(blob, callback) {\n if (typeof FileReader === 'undefined') {\n // fix for Firefox in a web worker:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=901097\n return callback(new FileReaderSync().readAsArrayBuffer(blob));\n }\n\n var reader = new FileReader();\n reader.onloadend = function (e) {\n var result = e.target.result || new ArrayBuffer(0);\n callback(result);\n };\n reader.readAsArrayBuffer(blob);\n}\n\n// this is not used in the browser\n\nvar setImmediateShim = global.setImmediate || global.setTimeout;\nvar MD5_CHUNK_SIZE = 32768;\n\nfunction rawToBase64(raw) {\n return thisBtoa(raw);\n}\n\nfunction sliceBlob(blob, start, end) {\n if (blob.webkitSlice) {\n return blob.webkitSlice(start, end);\n }\n return blob.slice(start, end);\n}\n\nfunction appendBlob(buffer, blob, start, end, callback) {\n if (start > 0 || end < blob.size) {\n // only slice blob if we really need to\n blob = sliceBlob(blob, start, end);\n }\n readAsArrayBuffer(blob, function (arrayBuffer) {\n buffer.append(arrayBuffer);\n callback();\n });\n}\n\nfunction appendString(buffer, string, start, end, callback) {\n if (start > 0 || end < string.length) {\n // only create a substring if we really need to\n string = string.substring(start, end);\n }\n buffer.appendBinary(string);\n callback();\n}\n\nfunction binaryMd5(data, callback) {\n var inputIsString = typeof data === 'string';\n var len = inputIsString ? data.length : data.size;\n var chunkSize = Math.min(MD5_CHUNK_SIZE, len);\n var chunks = Math.ceil(len / chunkSize);\n var currentChunk = 0;\n var buffer = inputIsString ? new Md5() : new Md5.ArrayBuffer();\n\n var append = inputIsString ? appendString : appendBlob;\n\n function next() {\n setImmediateShim(loadNextChunk);\n }\n\n function done() {\n var raw = buffer.end(true);\n var base64 = rawToBase64(raw);\n callback(base64);\n buffer.destroy();\n }\n\n function loadNextChunk() {\n var start = currentChunk * chunkSize;\n var end = start + chunkSize;\n currentChunk++;\n if (currentChunk < chunks) {\n append(buffer, data, start, end, next);\n } else {\n append(buffer, data, start, end, done);\n }\n }\n loadNextChunk();\n}\n\nfunction stringMd5(string) {\n return Md5.hash(string);\n}\n\nfunction parseBase64(data) {\n try {\n return thisAtob(data);\n } catch (e) {\n var err = createError(BAD_ARG,\n 'Attachment is not a valid base64 string');\n return {error: err};\n }\n}\n\nfunction preprocessString(att, blobType, callback) {\n var asBinary = parseBase64(att.data);\n if (asBinary.error) {\n return callback(asBinary.error);\n }\n\n att.length = asBinary.length;\n if (blobType === 'blob') {\n att.data = binStringToBluffer(asBinary, att.content_type);\n } else if (blobType === 'base64') {\n att.data = thisBtoa(asBinary);\n } else { // binary\n att.data = asBinary;\n }\n binaryMd5(asBinary, function (result) {\n att.digest = 'md5-' + result;\n callback();\n });\n}\n\nfunction preprocessBlob(att, blobType, callback) {\n binaryMd5(att.data, function (md5) {\n att.digest = 'md5-' + md5;\n // size is for blobs (browser), length is for buffers (node)\n att.length = att.data.size || att.data.length || 0;\n if (blobType === 'binary') {\n blobToBinaryString(att.data, function (binString) {\n att.data = binString;\n callback();\n });\n } else if (blobType === 'base64') {\n blobToBase64(att.data, function (b64) {\n att.data = b64;\n callback();\n });\n } else {\n callback();\n }\n });\n}\n\nfunction preprocessAttachment(att, blobType, callback) {\n if (att.stub) {\n return callback();\n }\n if (typeof att.data === 'string') { // input is a base64 string\n preprocessString(att, blobType, callback);\n } else { // input is a blob\n preprocessBlob(att, blobType, callback);\n }\n}\n\nfunction preprocessAttachments(docInfos, blobType, callback) {\n\n if (!docInfos.length) {\n return callback();\n }\n\n var docv = 0;\n var overallErr;\n\n docInfos.forEach(function (docInfo) {\n var attachments = docInfo.data && docInfo.data._attachments ?\n Object.keys(docInfo.data._attachments) : [];\n var recv = 0;\n\n if (!attachments.length) {\n return done();\n }\n\n function processedAttachment(err) {\n overallErr = err;\n recv++;\n if (recv === attachments.length) {\n done();\n }\n }\n\n for (var key in docInfo.data._attachments) {\n if (docInfo.data._attachments.hasOwnProperty(key)) {\n preprocessAttachment(docInfo.data._attachments[key],\n blobType, processedAttachment);\n }\n }\n });\n\n function done() {\n docv++;\n if (docInfos.length === docv) {\n if (overallErr) {\n callback(overallErr);\n } else {\n callback();\n }\n }\n }\n}\n\nfunction updateDoc(revLimit, prev, docInfo, results,\n i, cb, writeDoc, newEdits) {\n\n if (revExists(prev.rev_tree, docInfo.metadata.rev)) {\n results[i] = docInfo;\n return cb();\n }\n\n // sometimes this is pre-calculated. historically not always\n var previousWinningRev = prev.winningRev || winningRev(prev);\n var previouslyDeleted = 'deleted' in prev ? prev.deleted :\n isDeleted(prev, previousWinningRev);\n var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :\n isDeleted(docInfo.metadata);\n var isRoot = /^1-/.test(docInfo.metadata.rev);\n\n if (previouslyDeleted && !deleted && newEdits && isRoot) {\n var newDoc = docInfo.data;\n newDoc._rev = previousWinningRev;\n newDoc._id = docInfo.metadata.id;\n docInfo = parseDoc(newDoc, newEdits);\n }\n\n var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);\n\n var inConflict = newEdits && ((\n (previouslyDeleted && deleted && merged.conflicts !== 'new_leaf') ||\n (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||\n (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));\n\n if (inConflict) {\n var err = createError(REV_CONFLICT);\n results[i] = err;\n return cb();\n }\n\n var newRev = docInfo.metadata.rev;\n docInfo.metadata.rev_tree = merged.tree;\n docInfo.stemmedRevs = merged.stemmedRevs || [];\n /* istanbul ignore else */\n if (prev.rev_map) {\n docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb\n }\n\n // recalculate\n var winningRev$$1 = winningRev(docInfo.metadata);\n var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$$1);\n\n // calculate the total number of documents that were added/removed,\n // from the perspective of total_rows/doc_count\n var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :\n previouslyDeleted < winningRevIsDeleted ? -1 : 1;\n\n var newRevIsDeleted;\n if (newRev === winningRev$$1) {\n // if the new rev is the same as the winning rev, we can reuse that value\n newRevIsDeleted = winningRevIsDeleted;\n } else {\n // if they're not the same, then we need to recalculate\n newRevIsDeleted = isDeleted(docInfo.metadata, newRev);\n }\n\n writeDoc(docInfo, winningRev$$1, winningRevIsDeleted, newRevIsDeleted,\n true, delta, i, cb);\n}\n\nfunction rootIsMissing(docInfo) {\n return docInfo.metadata.rev_tree[0].ids[1].status === 'missing';\n}\n\nfunction processDocs(revLimit, docInfos, api, fetchedDocs, tx, results,\n writeDoc, opts, overallCallback) {\n\n // Default to 1000 locally\n revLimit = revLimit || 1000;\n\n function insertDoc(docInfo, resultsIdx, callback) {\n // Cant insert new deleted documents\n var winningRev$$1 = winningRev(docInfo.metadata);\n var deleted = isDeleted(docInfo.metadata, winningRev$$1);\n if ('was_delete' in opts && deleted) {\n results[resultsIdx] = createError(MISSING_DOC, 'deleted');\n return callback();\n }\n\n // 4712 - detect whether a new document was inserted with a _rev\n var inConflict = newEdits && rootIsMissing(docInfo);\n\n if (inConflict) {\n var err = createError(REV_CONFLICT);\n results[resultsIdx] = err;\n return callback();\n }\n\n var delta = deleted ? 0 : 1;\n\n writeDoc(docInfo, winningRev$$1, deleted, deleted, false,\n delta, resultsIdx, callback);\n }\n\n var newEdits = opts.new_edits;\n var idsToDocs = new ExportedMap();\n\n var docsDone = 0;\n var docsToDo = docInfos.length;\n\n function checkAllDocsDone() {\n if (++docsDone === docsToDo && overallCallback) {\n overallCallback();\n }\n }\n\n docInfos.forEach(function (currentDoc, resultsIdx) {\n\n if (currentDoc._id && isLocalId(currentDoc._id)) {\n var fun = currentDoc._deleted ? '_removeLocal' : '_putLocal';\n api[fun](currentDoc, {ctx: tx}, function (err, res) {\n results[resultsIdx] = err || res;\n checkAllDocsDone();\n });\n return;\n }\n\n var id = currentDoc.metadata.id;\n if (idsToDocs.has(id)) {\n docsToDo--; // duplicate\n idsToDocs.get(id).push([currentDoc, resultsIdx]);\n } else {\n idsToDocs.set(id, [[currentDoc, resultsIdx]]);\n }\n });\n\n // in the case of new_edits, the user can provide multiple docs\n // with the same id. these need to be processed sequentially\n idsToDocs.forEach(function (docs, id) {\n var numDone = 0;\n\n function docWritten() {\n if (++numDone < docs.length) {\n nextDoc();\n } else {\n checkAllDocsDone();\n }\n }\n function nextDoc() {\n var value = docs[numDone];\n var currentDoc = value[0];\n var resultsIdx = value[1];\n\n if (fetchedDocs.has(id)) {\n updateDoc(revLimit, fetchedDocs.get(id), currentDoc, results,\n resultsIdx, docWritten, writeDoc, newEdits);\n } else {\n // Ensure stemming applies to new writes as well\n var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);\n currentDoc.metadata.rev_tree = merged.tree;\n currentDoc.stemmedRevs = merged.stemmedRevs || [];\n insertDoc(currentDoc, resultsIdx, docWritten);\n }\n }\n nextDoc();\n });\n}\n\n// IndexedDB requires a versioned database structure, so we use the\n// version here to manage migrations.\nvar ADAPTER_VERSION = 5;\n\n// The object stores created for each database\n// DOC_STORE stores the document meta data, its revision history and state\n// Keyed by document id\nvar DOC_STORE = 'document-store';\n// BY_SEQ_STORE stores a particular version of a document, keyed by its\n// sequence id\nvar BY_SEQ_STORE = 'by-sequence';\n// Where we store attachments\nvar ATTACH_STORE = 'attach-store';\n// Where we store many-to-many relations\n// between attachment digests and seqs\nvar ATTACH_AND_SEQ_STORE = 'attach-seq-store';\n\n// Where we store database-wide meta data in a single record\n// keyed by id: META_STORE\nvar META_STORE = 'meta-store';\n// Where we store local documents\nvar LOCAL_STORE = 'local-store';\n// Where we detect blob support\nvar DETECT_BLOB_SUPPORT_STORE = 'detect-blob-support';\n\nfunction safeJsonParse(str) {\n // This try/catch guards against stack overflow errors.\n // JSON.parse() is faster than vuvuzela.parse() but vuvuzela\n // cannot overflow.\n try {\n return JSON.parse(str);\n } catch (e) {\n /* istanbul ignore next */\n return vuvuzela.parse(str);\n }\n}\n\nfunction safeJsonStringify(json) {\n try {\n return JSON.stringify(json);\n } catch (e) {\n /* istanbul ignore next */\n return vuvuzela.stringify(json);\n }\n}\n\nfunction idbError(callback) {\n return function (evt) {\n var message = 'unknown_error';\n if (evt.target && evt.target.error) {\n message = evt.target.error.name || evt.target.error.message;\n }\n callback(createError(IDB_ERROR, message, evt.type));\n };\n}\n\n// Unfortunately, the metadata has to be stringified\n// when it is put into the database, because otherwise\n// IndexedDB can throw errors for deeply-nested objects.\n// Originally we just used JSON.parse/JSON.stringify; now\n// we use this custom vuvuzela library that avoids recursion.\n// If we could do it all over again, we'd probably use a\n// format for the revision trees other than JSON.\nfunction encodeMetadata(metadata, winningRev, deleted) {\n return {\n data: safeJsonStringify(metadata),\n winningRev: winningRev,\n deletedOrLocal: deleted ? '1' : '0',\n seq: metadata.seq, // highest seq for this doc\n id: metadata.id\n };\n}\n\nfunction decodeMetadata(storedObject) {\n if (!storedObject) {\n return null;\n }\n var metadata = safeJsonParse(storedObject.data);\n metadata.winningRev = storedObject.winningRev;\n metadata.deleted = storedObject.deletedOrLocal === '1';\n metadata.seq = storedObject.seq;\n return metadata;\n}\n\n// read the doc back out from the database. we don't store the\n// _id or _rev because we already have _doc_id_rev.\nfunction decodeDoc(doc) {\n if (!doc) {\n return doc;\n }\n var idx = doc._doc_id_rev.lastIndexOf(':');\n doc._id = doc._doc_id_rev.substring(0, idx - 1);\n doc._rev = doc._doc_id_rev.substring(idx + 1);\n delete doc._doc_id_rev;\n return doc;\n}\n\n// Read a blob from the database, encoding as necessary\n// and translating from base64 if the IDB doesn't support\n// native Blobs\nfunction readBlobData(body, type, asBlob, callback) {\n if (asBlob) {\n if (!body) {\n callback(createBlob([''], {type: type}));\n } else if (typeof body !== 'string') { // we have blob support\n callback(body);\n } else { // no blob support\n callback(b64ToBluffer(body, type));\n }\n } else { // as base64 string\n if (!body) {\n callback('');\n } else if (typeof body !== 'string') { // we have blob support\n readAsBinaryString(body, function (binary) {\n callback(thisBtoa(binary));\n });\n } else { // no blob support\n callback(body);\n }\n }\n}\n\nfunction fetchAttachmentsIfNecessary(doc, opts, txn, cb) {\n var attachments = Object.keys(doc._attachments || {});\n if (!attachments.length) {\n return cb && cb();\n }\n var numDone = 0;\n\n function checkDone() {\n if (++numDone === attachments.length && cb) {\n cb();\n }\n }\n\n function fetchAttachment(doc, att) {\n var attObj = doc._attachments[att];\n var digest = attObj.digest;\n var req = txn.objectStore(ATTACH_STORE).get(digest);\n req.onsuccess = function (e) {\n attObj.body = e.target.result.body;\n checkDone();\n };\n }\n\n attachments.forEach(function (att) {\n if (opts.attachments && opts.include_docs) {\n fetchAttachment(doc, att);\n } else {\n doc._attachments[att].stub = true;\n checkDone();\n }\n });\n}\n\n// IDB-specific postprocessing necessary because\n// we don't know whether we stored a true Blob or\n// a base64-encoded string, and if it's a Blob it\n// needs to be read outside of the transaction context\nfunction postProcessAttachments(results, asBlob) {\n return PouchPromise.all(results.map(function (row) {\n if (row.doc && row.doc._attachments) {\n var attNames = Object.keys(row.doc._attachments);\n return PouchPromise.all(attNames.map(function (att) {\n var attObj = row.doc._attachments[att];\n if (!('body' in attObj)) { // already processed\n return;\n }\n var body = attObj.body;\n var type = attObj.content_type;\n return new PouchPromise(function (resolve) {\n readBlobData(body, type, asBlob, function (data) {\n row.doc._attachments[att] = $inject_Object_assign(\n pick(attObj, ['digest', 'content_type']),\n {data: data}\n );\n resolve();\n });\n });\n }));\n }\n }));\n}\n\nfunction compactRevs(revs, docId, txn) {\n\n var possiblyOrphanedDigests = [];\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var attStore = txn.objectStore(ATTACH_STORE);\n var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n var count = revs.length;\n\n function checkDone() {\n count--;\n if (!count) { // done processing all revs\n deleteOrphanedAttachments();\n }\n }\n\n function deleteOrphanedAttachments() {\n if (!possiblyOrphanedDigests.length) {\n return;\n }\n possiblyOrphanedDigests.forEach(function (digest) {\n var countReq = attAndSeqStore.index('digestSeq').count(\n IDBKeyRange.bound(\n digest + '::', digest + '::\\uffff', false, false));\n countReq.onsuccess = function (e) {\n var count = e.target.result;\n if (!count) {\n // orphaned\n attStore[\"delete\"](digest);\n }\n };\n });\n }\n\n revs.forEach(function (rev$$1) {\n var index = seqStore.index('_doc_id_rev');\n var key = docId + \"::\" + rev$$1;\n index.getKey(key).onsuccess = function (e) {\n var seq = e.target.result;\n if (typeof seq !== 'number') {\n return checkDone();\n }\n seqStore[\"delete\"](seq);\n\n var cursor = attAndSeqStore.index('seq')\n .openCursor(IDBKeyRange.only(seq));\n\n cursor.onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var digest = cursor.value.digestSeq.split('::')[0];\n possiblyOrphanedDigests.push(digest);\n attAndSeqStore[\"delete\"](cursor.primaryKey);\n cursor[\"continue\"]();\n } else { // done\n checkDone();\n }\n };\n };\n });\n}\n\nfunction openTransactionSafely(idb, stores, mode) {\n try {\n return {\n txn: idb.transaction(stores, mode)\n };\n } catch (err) {\n return {\n error: err\n };\n }\n}\n\nvar changesHandler$$1 = new Changes();\n\nfunction idbBulkDocs(dbOpts, req, opts, api, idb, callback) {\n var docInfos = req.docs;\n var txn;\n var docStore;\n var bySeqStore;\n var attachStore;\n var attachAndSeqStore;\n var metaStore;\n var docInfoError;\n var metaDoc;\n\n for (var i = 0, len = docInfos.length; i < len; i++) {\n var doc = docInfos[i];\n if (doc._id && isLocalId(doc._id)) {\n continue;\n }\n doc = docInfos[i] = parseDoc(doc, opts.new_edits);\n if (doc.error && !docInfoError) {\n docInfoError = doc;\n }\n }\n\n if (docInfoError) {\n return callback(docInfoError);\n }\n\n var allDocsProcessed = false;\n var docCountDelta = 0;\n var results = new Array(docInfos.length);\n var fetchedDocs = new ExportedMap();\n var preconditionErrored = false;\n var blobType = api._meta.blobSupport ? 'blob' : 'base64';\n\n preprocessAttachments(docInfos, blobType, function (err) {\n if (err) {\n return callback(err);\n }\n startTransaction();\n });\n\n function startTransaction() {\n\n var stores = [\n DOC_STORE, BY_SEQ_STORE,\n ATTACH_STORE,\n LOCAL_STORE, ATTACH_AND_SEQ_STORE,\n META_STORE\n ];\n var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n txn.onabort = idbError(callback);\n txn.ontimeout = idbError(callback);\n txn.oncomplete = complete;\n docStore = txn.objectStore(DOC_STORE);\n bySeqStore = txn.objectStore(BY_SEQ_STORE);\n attachStore = txn.objectStore(ATTACH_STORE);\n attachAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n metaStore = txn.objectStore(META_STORE);\n\n metaStore.get(META_STORE).onsuccess = function (e) {\n metaDoc = e.target.result;\n updateDocCountIfReady();\n };\n\n verifyAttachments(function (err) {\n if (err) {\n preconditionErrored = true;\n return callback(err);\n }\n fetchExistingDocs();\n });\n }\n\n function onAllDocsProcessed() {\n allDocsProcessed = true;\n updateDocCountIfReady();\n }\n\n function idbProcessDocs() {\n processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs,\n txn, results, writeDoc, opts, onAllDocsProcessed);\n }\n\n function updateDocCountIfReady() {\n if (!metaDoc || !allDocsProcessed) {\n return;\n }\n // caching the docCount saves a lot of time in allDocs() and\n // info(), which is why we go to all the trouble of doing this\n metaDoc.docCount += docCountDelta;\n metaStore.put(metaDoc);\n }\n\n function fetchExistingDocs() {\n\n if (!docInfos.length) {\n return;\n }\n\n var numFetched = 0;\n\n function checkDone() {\n if (++numFetched === docInfos.length) {\n idbProcessDocs();\n }\n }\n\n function readMetadata(event) {\n var metadata = decodeMetadata(event.target.result);\n\n if (metadata) {\n fetchedDocs.set(metadata.id, metadata);\n }\n checkDone();\n }\n\n for (var i = 0, len = docInfos.length; i < len; i++) {\n var docInfo = docInfos[i];\n if (docInfo._id && isLocalId(docInfo._id)) {\n checkDone(); // skip local docs\n continue;\n }\n var req = docStore.get(docInfo.metadata.id);\n req.onsuccess = readMetadata;\n }\n }\n\n function complete() {\n if (preconditionErrored) {\n return;\n }\n\n changesHandler$$1.notify(api._meta.name);\n callback(null, results);\n }\n\n function verifyAttachment(digest, callback) {\n\n var req = attachStore.get(digest);\n req.onsuccess = function (e) {\n if (!e.target.result) {\n var err = createError(MISSING_STUB,\n 'unknown stub attachment with digest ' +\n digest);\n err.status = 412;\n callback(err);\n } else {\n callback();\n }\n };\n }\n\n function verifyAttachments(finish) {\n\n\n var digests = [];\n docInfos.forEach(function (docInfo) {\n if (docInfo.data && docInfo.data._attachments) {\n Object.keys(docInfo.data._attachments).forEach(function (filename) {\n var att = docInfo.data._attachments[filename];\n if (att.stub) {\n digests.push(att.digest);\n }\n });\n }\n });\n if (!digests.length) {\n return finish();\n }\n var numDone = 0;\n var err;\n\n function checkDone() {\n if (++numDone === digests.length) {\n finish(err);\n }\n }\n digests.forEach(function (digest) {\n verifyAttachment(digest, function (attErr) {\n if (attErr && !err) {\n err = attErr;\n }\n checkDone();\n });\n });\n }\n\n function writeDoc(docInfo, winningRev$$1, winningRevIsDeleted, newRevIsDeleted,\n isUpdate, delta, resultsIdx, callback) {\n\n docInfo.metadata.winningRev = winningRev$$1;\n docInfo.metadata.deleted = winningRevIsDeleted;\n\n var doc = docInfo.data;\n doc._id = docInfo.metadata.id;\n doc._rev = docInfo.metadata.rev;\n\n if (newRevIsDeleted) {\n doc._deleted = true;\n }\n\n var hasAttachments = doc._attachments &&\n Object.keys(doc._attachments).length;\n if (hasAttachments) {\n return writeAttachments(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n\n docCountDelta += delta;\n updateDocCountIfReady();\n\n finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n\n function finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback) {\n\n var doc = docInfo.data;\n var metadata = docInfo.metadata;\n\n doc._doc_id_rev = metadata.id + '::' + metadata.rev;\n delete doc._id;\n delete doc._rev;\n\n function afterPutDoc(e) {\n var revsToDelete = docInfo.stemmedRevs || [];\n\n if (isUpdate && api.auto_compaction) {\n revsToDelete = revsToDelete.concat(compactTree(docInfo.metadata));\n }\n\n if (revsToDelete && revsToDelete.length) {\n compactRevs(revsToDelete, docInfo.metadata.id, txn);\n }\n\n metadata.seq = e.target.result;\n // Current _rev is calculated from _rev_tree on read\n // delete metadata.rev;\n var metadataToStore = encodeMetadata(metadata, winningRev$$1,\n winningRevIsDeleted);\n var metaDataReq = docStore.put(metadataToStore);\n metaDataReq.onsuccess = afterPutMetadata;\n }\n\n function afterPutDocError(e) {\n // ConstraintError, need to update, not put (see #1638 for details)\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n var index = bySeqStore.index('_doc_id_rev');\n var getKeyReq = index.getKey(doc._doc_id_rev);\n getKeyReq.onsuccess = function (e) {\n var putReq = bySeqStore.put(doc, e.target.result);\n putReq.onsuccess = afterPutDoc;\n };\n }\n\n function afterPutMetadata() {\n results[resultsIdx] = {\n ok: true,\n id: metadata.id,\n rev: metadata.rev\n };\n fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);\n insertAttachmentMappings(docInfo, metadata.seq, callback);\n }\n\n var putReq = bySeqStore.put(doc);\n\n putReq.onsuccess = afterPutDoc;\n putReq.onerror = afterPutDocError;\n }\n\n function writeAttachments(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback) {\n\n\n var doc = docInfo.data;\n\n var numDone = 0;\n var attachments = Object.keys(doc._attachments);\n\n function collectResults() {\n if (numDone === attachments.length) {\n finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n }\n\n function attachmentSaved() {\n numDone++;\n collectResults();\n }\n\n attachments.forEach(function (key) {\n var att = docInfo.data._attachments[key];\n if (!att.stub) {\n var data = att.data;\n delete att.data;\n att.revpos = parseInt(winningRev$$1, 10);\n var digest = att.digest;\n saveAttachment(digest, data, attachmentSaved);\n } else {\n numDone++;\n collectResults();\n }\n });\n }\n\n // map seqs to attachment digests, which\n // we will need later during compaction\n function insertAttachmentMappings(docInfo, seq, callback) {\n\n var attsAdded = 0;\n var attsToAdd = Object.keys(docInfo.data._attachments || {});\n\n if (!attsToAdd.length) {\n return callback();\n }\n\n function checkDone() {\n if (++attsAdded === attsToAdd.length) {\n callback();\n }\n }\n\n function add(att) {\n var digest = docInfo.data._attachments[att].digest;\n var req = attachAndSeqStore.put({\n seq: seq,\n digestSeq: digest + '::' + seq\n });\n\n req.onsuccess = checkDone;\n req.onerror = function (e) {\n // this callback is for a constaint error, which we ignore\n // because this docid/rev has already been associated with\n // the digest (e.g. when new_edits == false)\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n checkDone();\n };\n }\n for (var i = 0; i < attsToAdd.length; i++) {\n add(attsToAdd[i]); // do in parallel\n }\n }\n\n function saveAttachment(digest, data, callback) {\n\n\n var getKeyReq = attachStore.count(digest);\n getKeyReq.onsuccess = function (e) {\n var count = e.target.result;\n if (count) {\n return callback(); // already exists\n }\n var newAtt = {\n digest: digest,\n body: data\n };\n var putReq = attachStore.put(newAtt);\n putReq.onsuccess = callback;\n };\n }\n}\n\n// Abstraction over IDBCursor and getAll()/getAllKeys() that allows us to batch our operations\n// while falling back to a normal IDBCursor operation on browsers that don't support getAll() or\n// getAllKeys(). This allows for a much faster implementation than just straight-up cursors, because\n// we're not processing each document one-at-a-time.\nfunction runBatchedCursor(objectStore, keyRange, descending, batchSize, onBatch) {\n\n // Bail out of getAll()/getAllKeys() in the following cases:\n // 1) either method is unsupported - we need both\n // 2) batchSize is 1 (might as well use IDBCursor), or batchSize is -1 (i.e. batchSize unlimited,\n // not really clear the user wants a batched approach where the entire DB is read into memory,\n // perhaps they are filtering on a per-doc basis)\n // 3) descending – no real way to do this via getAll()/getAllKeys()\n\n var useGetAll = typeof objectStore.getAll === 'function' &&\n typeof objectStore.getAllKeys === 'function' &&\n batchSize > 1 && !descending;\n\n var keysBatch;\n var valuesBatch;\n var pseudoCursor;\n\n function onGetAll(e) {\n valuesBatch = e.target.result;\n if (keysBatch) {\n onBatch(keysBatch, valuesBatch, pseudoCursor);\n }\n }\n\n function onGetAllKeys(e) {\n keysBatch = e.target.result;\n if (valuesBatch) {\n onBatch(keysBatch, valuesBatch, pseudoCursor);\n }\n }\n\n function continuePseudoCursor() {\n if (!keysBatch.length) { // no more results\n return onBatch();\n }\n // fetch next batch, exclusive start\n var lastKey = keysBatch[keysBatch.length - 1];\n var newKeyRange;\n if (keyRange && keyRange.upper) {\n try {\n newKeyRange = IDBKeyRange.bound(lastKey, keyRange.upper,\n true, keyRange.upperOpen);\n } catch (e) {\n if (e.name === \"DataError\" && e.code === 0) {\n return onBatch(); // we're done, startkey and endkey are equal\n }\n }\n } else {\n newKeyRange = IDBKeyRange.lowerBound(lastKey, true);\n }\n keyRange = newKeyRange;\n keysBatch = null;\n valuesBatch = null;\n objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;\n objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;\n }\n\n function onCursor(e) {\n var cursor = e.target.result;\n if (!cursor) { // done\n return onBatch();\n }\n // regular IDBCursor acts like a batch where batch size is always 1\n onBatch([cursor.key], [cursor.value], cursor);\n }\n\n if (useGetAll) {\n pseudoCursor = {\"continue\": continuePseudoCursor};\n objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;\n objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;\n } else if (descending) {\n objectStore.openCursor(keyRange, 'prev').onsuccess = onCursor;\n } else {\n objectStore.openCursor(keyRange).onsuccess = onCursor;\n }\n}\n\n// simple shim for objectStore.getAll(), falling back to IDBCursor\nfunction getAll(objectStore, keyRange, onSuccess) {\n if (typeof objectStore.getAll === 'function') {\n // use native getAll\n objectStore.getAll(keyRange).onsuccess = onSuccess;\n return;\n }\n // fall back to cursors\n var values = [];\n\n function onCursor(e) {\n var cursor = e.target.result;\n if (cursor) {\n values.push(cursor.value);\n cursor[\"continue\"]();\n } else {\n onSuccess({\n target: {\n result: values\n }\n });\n }\n }\n\n objectStore.openCursor(keyRange).onsuccess = onCursor;\n}\n\nfunction allDocsKeys(keys, docStore, onBatch) {\n // It's not guaranted to be returned in right order \n var valuesBatch = [];\n var count = 0;\n keys.forEach(function (key, index) {\n docStore.get(key).onsuccess = function (event) {\n if (event.target.result) {\n valuesBatch[index] = event.target.result;\n } else {\n valuesBatch[index] = {key: key, error: 'not_found'};\n }\n count++;\n if (count === keys.length) {\n onBatch(keys, valuesBatch, {});\n }\n };\n });\n}\n\nfunction createKeyRange(start, end, inclusiveEnd, key, descending) {\n try {\n if (start && end) {\n if (descending) {\n return IDBKeyRange.bound(end, start, !inclusiveEnd, false);\n } else {\n return IDBKeyRange.bound(start, end, false, !inclusiveEnd);\n }\n } else if (start) {\n if (descending) {\n return IDBKeyRange.upperBound(start);\n } else {\n return IDBKeyRange.lowerBound(start);\n }\n } else if (end) {\n if (descending) {\n return IDBKeyRange.lowerBound(end, !inclusiveEnd);\n } else {\n return IDBKeyRange.upperBound(end, !inclusiveEnd);\n }\n } else if (key) {\n return IDBKeyRange.only(key);\n }\n } catch (e) {\n return {error: e};\n }\n return null;\n}\n\nfunction idbAllDocs(opts, idb, callback) {\n var start = 'startkey' in opts ? opts.startkey : false;\n var end = 'endkey' in opts ? opts.endkey : false;\n var key = 'key' in opts ? opts.key : false;\n var keys = 'keys' in opts ? opts.keys : false; \n var skip = opts.skip || 0;\n var limit = typeof opts.limit === 'number' ? opts.limit : -1;\n var inclusiveEnd = opts.inclusive_end !== false;\n\n var keyRange; \n var keyRangeError;\n if (!keys) {\n keyRange = createKeyRange(start, end, inclusiveEnd, key, opts.descending);\n keyRangeError = keyRange && keyRange.error;\n if (keyRangeError && \n !(keyRangeError.name === \"DataError\" && keyRangeError.code === 0)) {\n // DataError with error code 0 indicates start is less than end, so\n // can just do an empty query. Else need to throw\n return callback(createError(IDB_ERROR,\n keyRangeError.name, keyRangeError.message));\n }\n }\n\n var stores = [DOC_STORE, BY_SEQ_STORE, META_STORE];\n\n if (opts.attachments) {\n stores.push(ATTACH_STORE);\n }\n var txnResult = openTransactionSafely(idb, stores, 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n txn.oncomplete = onTxnComplete;\n txn.onabort = idbError(callback);\n var docStore = txn.objectStore(DOC_STORE);\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var metaStore = txn.objectStore(META_STORE);\n var docIdRevIndex = seqStore.index('_doc_id_rev');\n var results = [];\n var docCount;\n var updateSeq;\n\n metaStore.get(META_STORE).onsuccess = function (e) {\n docCount = e.target.result.docCount;\n };\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n getMaxUpdateSeq(seqStore, function (e) { \n if (e.target.result && e.target.result.length > 0) {\n updateSeq = e.target.result[0];\n }\n });\n }\n\n function getMaxUpdateSeq(objectStore, onSuccess) {\n function onCursor(e) {\n var cursor = e.target.result;\n var maxKey = undefined;\n if (cursor && cursor.key) {\n maxKey = cursor.key;\n } \n return onSuccess({\n target: {\n result: [maxKey]\n }\n });\n }\n objectStore.openCursor(null, 'prev').onsuccess = onCursor;\n }\n\n // if the user specifies include_docs=true, then we don't\n // want to block the main cursor while we're fetching the doc\n function fetchDocAsynchronously(metadata, row, winningRev$$1) {\n var key = metadata.id + \"::\" + winningRev$$1;\n docIdRevIndex.get(key).onsuccess = function onGetDoc(e) {\n row.doc = decodeDoc(e.target.result);\n if (opts.conflicts) {\n var conflicts = collectConflicts(metadata);\n if (conflicts.length) {\n row.doc._conflicts = conflicts;\n }\n }\n fetchAttachmentsIfNecessary(row.doc, opts, txn);\n };\n }\n\n function allDocsInner(winningRev$$1, metadata) {\n var row = {\n id: metadata.id,\n key: metadata.id,\n value: {\n rev: winningRev$$1\n }\n };\n var deleted = metadata.deleted;\n if (deleted) {\n if (keys) {\n results.push(row);\n // deleted docs are okay with \"keys\" requests\n row.value.deleted = true;\n row.doc = null;\n }\n } else if (skip-- <= 0) {\n results.push(row);\n if (opts.include_docs) {\n fetchDocAsynchronously(metadata, row, winningRev$$1);\n }\n }\n }\n\n function processBatch(batchValues) {\n for (var i = 0, len = batchValues.length; i < len; i++) {\n if (results.length === limit) {\n break;\n }\n var batchValue = batchValues[i];\n if (batchValue.error && keys) {\n // key was not found with \"keys\" requests\n results.push(batchValue);\n continue;\n }\n var metadata = decodeMetadata(batchValue);\n var winningRev$$1 = metadata.winningRev;\n allDocsInner(winningRev$$1, metadata);\n }\n }\n\n function onBatch(batchKeys, batchValues, cursor) {\n if (!cursor) {\n return;\n }\n processBatch(batchValues);\n if (results.length < limit) {\n cursor[\"continue\"]();\n }\n }\n\n function onGetAll(e) {\n var values = e.target.result;\n if (opts.descending) {\n values = values.reverse();\n }\n processBatch(values);\n }\n\n function onResultsReady() {\n var returnVal = {\n total_rows: docCount,\n offset: opts.skip,\n rows: results\n };\n \n /* istanbul ignore if */\n if (opts.update_seq && updateSeq !== undefined) {\n returnVal.update_seq = updateSeq;\n }\n callback(null, returnVal);\n }\n\n function onTxnComplete() {\n if (opts.attachments) {\n postProcessAttachments(results, opts.binary).then(onResultsReady);\n } else {\n onResultsReady();\n }\n }\n\n // don't bother doing any requests if start > end or limit === 0\n if (keyRangeError || limit === 0) {\n return;\n }\n if (keys) {\n return allDocsKeys(opts.keys, docStore, onBatch);\n }\n if (limit === -1) { // just fetch everything\n return getAll(docStore, keyRange, onGetAll);\n }\n // else do a cursor\n // choose a batch size based on the skip, since we'll need to skip that many\n runBatchedCursor(docStore, keyRange, opts.descending, limit + skip, onBatch);\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\nfunction checkBlobSupport(txn) {\n return new PouchPromise(function (resolve) {\n var blob$$1 = createBlob(['']);\n var req = txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob$$1, 'key');\n\n req.onsuccess = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome ||\n parseInt(matchedChrome[1], 10) >= 43);\n };\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction countDocs(txn, cb) {\n var index = txn.objectStore(DOC_STORE).index('deletedOrLocal');\n index.count(IDBKeyRange.only('0')).onsuccess = function (e) {\n cb(e.target.result);\n };\n}\n\n// This task queue ensures that IDB open calls are done in their own tick\n// and sequentially - i.e. we wait for the async IDB open to *fully* complete\n// before calling the next one. This works around IE/Edge race conditions in IDB.\n\nvar running = false;\nvar queue = [];\n\nfunction tryCode(fun, err, res, PouchDB) {\n try {\n fun(err, res);\n } catch (err) {\n // Shouldn't happen, but in some odd cases\n // IndexedDB implementations might throw a sync\n // error, in which case this will at least log it.\n PouchDB.emit('error', err);\n }\n}\n\nfunction applyNext() {\n if (running || !queue.length) {\n return;\n }\n running = true;\n queue.shift()();\n}\n\nfunction enqueueTask(action, callback, PouchDB) {\n queue.push(function runAction() {\n action(function runCallback(err, res) {\n tryCode(callback, err, res, PouchDB);\n running = false;\n nextTick(function runNext() {\n applyNext(PouchDB);\n });\n });\n });\n applyNext();\n}\n\nfunction changes(opts, api, dbName, idb) {\n opts = clone(opts);\n\n if (opts.continuous) {\n var id = dbName + ':' + uuid();\n changesHandler$$1.addListener(dbName, id, api, opts);\n changesHandler$$1.notify(dbName);\n return {\n cancel: function () {\n changesHandler$$1.removeListener(dbName, id);\n }\n };\n }\n\n var docIds = opts.doc_ids && new ExportedSet(opts.doc_ids);\n\n opts.since = opts.since || 0;\n var lastSeq = opts.since;\n\n var limit = 'limit' in opts ? opts.limit : -1;\n if (limit === 0) {\n limit = 1; // per CouchDB _changes spec\n }\n var returnDocs;\n if ('return_docs' in opts) {\n returnDocs = opts.return_docs;\n } else if ('returnDocs' in opts) {\n // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n returnDocs = opts.returnDocs;\n } else {\n returnDocs = true;\n }\n\n var results = [];\n var numResults = 0;\n var filter = filterChange(opts);\n var docIdsToMetadata = new ExportedMap();\n\n var txn;\n var bySeqStore;\n var docStore;\n var docIdRevIndex;\n\n function onBatch(batchKeys, batchValues, cursor) {\n if (!cursor || !batchKeys.length) { // done\n return;\n }\n\n var winningDocs = new Array(batchKeys.length);\n var metadatas = new Array(batchKeys.length);\n\n function processMetadataAndWinningDoc(metadata, winningDoc) {\n var change = opts.processChange(winningDoc, metadata, opts);\n lastSeq = change.seq = metadata.seq;\n\n var filtered = filter(change);\n if (typeof filtered === 'object') { // anything but true/false indicates error\n return opts.complete(filtered);\n }\n\n if (filtered) {\n numResults++;\n if (returnDocs) {\n results.push(change);\n }\n // process the attachment immediately\n // for the benefit of live listeners\n if (opts.attachments && opts.include_docs) {\n fetchAttachmentsIfNecessary(winningDoc, opts, txn, function () {\n postProcessAttachments([change], opts.binary).then(function () {\n opts.onChange(change);\n });\n });\n } else {\n opts.onChange(change);\n }\n }\n }\n\n function onBatchDone() {\n for (var i = 0, len = winningDocs.length; i < len; i++) {\n if (numResults === limit) {\n break;\n }\n var winningDoc = winningDocs[i];\n if (!winningDoc) {\n continue;\n }\n var metadata = metadatas[i];\n processMetadataAndWinningDoc(metadata, winningDoc);\n }\n\n if (numResults !== limit) {\n cursor[\"continue\"]();\n }\n }\n\n // Fetch all metadatas/winningdocs from this batch in parallel, then process\n // them all only once all data has been collected. This is done in parallel\n // because it's faster than doing it one-at-a-time.\n var numDone = 0;\n batchValues.forEach(function (value, i) {\n var doc = decodeDoc(value);\n var seq = batchKeys[i];\n fetchWinningDocAndMetadata(doc, seq, function (metadata, winningDoc) {\n metadatas[i] = metadata;\n winningDocs[i] = winningDoc;\n if (++numDone === batchKeys.length) {\n onBatchDone();\n }\n });\n });\n }\n\n function onGetMetadata(doc, seq, metadata, cb) {\n if (metadata.seq !== seq) {\n // some other seq is later\n return cb();\n }\n\n if (metadata.winningRev === doc._rev) {\n // this is the winning doc\n return cb(metadata, doc);\n }\n\n // fetch winning doc in separate request\n var docIdRev = doc._id + '::' + metadata.winningRev;\n var req = docIdRevIndex.get(docIdRev);\n req.onsuccess = function (e) {\n cb(metadata, decodeDoc(e.target.result));\n };\n }\n\n function fetchWinningDocAndMetadata(doc, seq, cb) {\n if (docIds && !docIds.has(doc._id)) {\n return cb();\n }\n\n var metadata = docIdsToMetadata.get(doc._id);\n if (metadata) { // cached\n return onGetMetadata(doc, seq, metadata, cb);\n }\n // metadata not cached, have to go fetch it\n docStore.get(doc._id).onsuccess = function (e) {\n metadata = decodeMetadata(e.target.result);\n docIdsToMetadata.set(doc._id, metadata);\n onGetMetadata(doc, seq, metadata, cb);\n };\n }\n\n function finish() {\n opts.complete(null, {\n results: results,\n last_seq: lastSeq\n });\n }\n\n function onTxnComplete() {\n if (!opts.continuous && opts.attachments) {\n // cannot guarantee that postProcessing was already done,\n // so do it again\n postProcessAttachments(results).then(finish);\n } else {\n finish();\n }\n }\n\n var objectStores = [DOC_STORE, BY_SEQ_STORE];\n if (opts.attachments) {\n objectStores.push(ATTACH_STORE);\n }\n var txnResult = openTransactionSafely(idb, objectStores, 'readonly');\n if (txnResult.error) {\n return opts.complete(txnResult.error);\n }\n txn = txnResult.txn;\n txn.onabort = idbError(opts.complete);\n txn.oncomplete = onTxnComplete;\n\n bySeqStore = txn.objectStore(BY_SEQ_STORE);\n docStore = txn.objectStore(DOC_STORE);\n docIdRevIndex = bySeqStore.index('_doc_id_rev');\n\n var keyRange = (opts.since && !opts.descending) ?\n IDBKeyRange.lowerBound(opts.since, true) : null;\n\n runBatchedCursor(bySeqStore, keyRange, opts.descending, limit, onBatch);\n}\n\nvar cachedDBs = new ExportedMap();\nvar blobSupportPromise;\nvar openReqList = new ExportedMap();\n\nfunction IdbPouch(opts, callback) {\n var api = this;\n\n enqueueTask(function (thisCallback) {\n init(api, opts, thisCallback);\n }, callback, api.constructor);\n}\n\nfunction init(api, opts, callback) {\n\n var dbName = opts.name;\n\n var idb = null;\n api._meta = null;\n\n // called when creating a fresh new database\n function createSchema(db) {\n var docStore = db.createObjectStore(DOC_STORE, {keyPath : 'id'});\n db.createObjectStore(BY_SEQ_STORE, {autoIncrement: true})\n .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n db.createObjectStore(ATTACH_STORE, {keyPath: 'digest'});\n db.createObjectStore(META_STORE, {keyPath: 'id', autoIncrement: false});\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n\n // added in v2\n docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n // added in v3\n db.createObjectStore(LOCAL_STORE, {keyPath: '_id'});\n\n // added in v4\n var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n {autoIncrement: true});\n attAndSeqStore.createIndex('seq', 'seq');\n attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n }\n\n // migration to version 2\n // unfortunately \"deletedOrLocal\" is a misnomer now that we no longer\n // store local docs in the main doc-store, but whaddyagonnado\n function addDeletedOrLocalIndex(txn, callback) {\n var docStore = txn.objectStore(DOC_STORE);\n docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n docStore.openCursor().onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var metadata = cursor.value;\n var deleted = isDeleted(metadata);\n metadata.deletedOrLocal = deleted ? \"1\" : \"0\";\n docStore.put(metadata);\n cursor[\"continue\"]();\n } else {\n callback();\n }\n };\n }\n\n // migration to version 3 (part 1)\n function createLocalStoreSchema(db) {\n db.createObjectStore(LOCAL_STORE, {keyPath: '_id'})\n .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n }\n\n // migration to version 3 (part 2)\n function migrateLocalStore(txn, cb) {\n var localStore = txn.objectStore(LOCAL_STORE);\n var docStore = txn.objectStore(DOC_STORE);\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n\n var cursor = docStore.openCursor();\n cursor.onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var metadata = cursor.value;\n var docId = metadata.id;\n var local = isLocalId(docId);\n var rev$$1 = winningRev(metadata);\n if (local) {\n var docIdRev = docId + \"::\" + rev$$1;\n // remove all seq entries\n // associated with this docId\n var start = docId + \"::\";\n var end = docId + \"::~\";\n var index = seqStore.index('_doc_id_rev');\n var range = IDBKeyRange.bound(start, end, false, false);\n var seqCursor = index.openCursor(range);\n seqCursor.onsuccess = function (e) {\n seqCursor = e.target.result;\n if (!seqCursor) {\n // done\n docStore[\"delete\"](cursor.primaryKey);\n cursor[\"continue\"]();\n } else {\n var data = seqCursor.value;\n if (data._doc_id_rev === docIdRev) {\n localStore.put(data);\n }\n seqStore[\"delete\"](seqCursor.primaryKey);\n seqCursor[\"continue\"]();\n }\n };\n } else {\n cursor[\"continue\"]();\n }\n } else if (cb) {\n cb();\n }\n };\n }\n\n // migration to version 4 (part 1)\n function addAttachAndSeqStore(db) {\n var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n {autoIncrement: true});\n attAndSeqStore.createIndex('seq', 'seq');\n attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n }\n\n // migration to version 4 (part 2)\n function migrateAttsAndSeqs(txn, callback) {\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var attStore = txn.objectStore(ATTACH_STORE);\n var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n\n // need to actually populate the table. this is the expensive part,\n // so as an optimization, check first that this database even\n // contains attachments\n var req = attStore.count();\n req.onsuccess = function (e) {\n var count = e.target.result;\n if (!count) {\n return callback(); // done\n }\n\n seqStore.openCursor().onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n return callback(); // done\n }\n var doc = cursor.value;\n var seq = cursor.primaryKey;\n var atts = Object.keys(doc._attachments || {});\n var digestMap = {};\n for (var j = 0; j < atts.length; j++) {\n var att = doc._attachments[atts[j]];\n digestMap[att.digest] = true; // uniq digests, just in case\n }\n var digests = Object.keys(digestMap);\n for (j = 0; j < digests.length; j++) {\n var digest = digests[j];\n attAndSeqStore.put({\n seq: seq,\n digestSeq: digest + '::' + seq\n });\n }\n cursor[\"continue\"]();\n };\n };\n }\n\n // migration to version 5\n // Instead of relying on on-the-fly migration of metadata,\n // this brings the doc-store to its modern form:\n // - metadata.winningrev\n // - metadata.seq\n // - stringify the metadata when storing it\n function migrateMetadata(txn) {\n\n function decodeMetadataCompat(storedObject) {\n if (!storedObject.data) {\n // old format, when we didn't store it stringified\n storedObject.deleted = storedObject.deletedOrLocal === '1';\n return storedObject;\n }\n return decodeMetadata(storedObject);\n }\n\n // ensure that every metadata has a winningRev and seq,\n // which was previously created on-the-fly but better to migrate\n var bySeqStore = txn.objectStore(BY_SEQ_STORE);\n var docStore = txn.objectStore(DOC_STORE);\n var cursor = docStore.openCursor();\n cursor.onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n return; // done\n }\n var metadata = decodeMetadataCompat(cursor.value);\n\n metadata.winningRev = metadata.winningRev ||\n winningRev(metadata);\n\n function fetchMetadataSeq() {\n // metadata.seq was added post-3.2.0, so if it's missing,\n // we need to fetch it manually\n var start = metadata.id + '::';\n var end = metadata.id + '::\\uffff';\n var req = bySeqStore.index('_doc_id_rev').openCursor(\n IDBKeyRange.bound(start, end));\n\n var metadataSeq = 0;\n req.onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n metadata.seq = metadataSeq;\n return onGetMetadataSeq();\n }\n var seq = cursor.primaryKey;\n if (seq > metadataSeq) {\n metadataSeq = seq;\n }\n cursor[\"continue\"]();\n };\n }\n\n function onGetMetadataSeq() {\n var metadataToStore = encodeMetadata(metadata,\n metadata.winningRev, metadata.deleted);\n\n var req = docStore.put(metadataToStore);\n req.onsuccess = function () {\n cursor[\"continue\"]();\n };\n }\n\n if (metadata.seq) {\n return onGetMetadataSeq();\n }\n\n fetchMetadataSeq();\n };\n\n }\n\n api._remote = false;\n api.type = function () {\n return 'idb';\n };\n\n api._id = toPromise(function (callback) {\n callback(null, api._meta.instanceId);\n });\n\n api._bulkDocs = function idb_bulkDocs(req, reqOpts, callback) {\n idbBulkDocs(opts, req, reqOpts, api, idb, callback);\n };\n\n // First we look up the metadata in the ids database, then we fetch the\n // current revision(s) from the by sequence store\n api._get = function idb_get(id, opts, callback) {\n var doc;\n var metadata;\n var err;\n var txn = opts.ctx;\n if (!txn) {\n var txnResult = openTransactionSafely(idb,\n [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n }\n\n function finish() {\n callback(err, {doc: doc, metadata: metadata, ctx: txn});\n }\n\n txn.objectStore(DOC_STORE).get(id).onsuccess = function (e) {\n metadata = decodeMetadata(e.target.result);\n // we can determine the result here if:\n // 1. there is no such document\n // 2. the document is deleted and we don't ask about specific rev\n // When we ask with opts.rev we expect the answer to be either\n // doc (possibly with _deleted=true) or missing error\n if (!metadata) {\n err = createError(MISSING_DOC, 'missing');\n return finish();\n }\n\n var rev$$1;\n if (!opts.rev) {\n rev$$1 = metadata.winningRev;\n var deleted = isDeleted(metadata);\n if (deleted) {\n err = createError(MISSING_DOC, \"deleted\");\n return finish();\n }\n } else {\n rev$$1 = opts.latest ? latest(opts.rev, metadata) : opts.rev;\n }\n\n var objectStore = txn.objectStore(BY_SEQ_STORE);\n var key = metadata.id + '::' + rev$$1;\n\n objectStore.index('_doc_id_rev').get(key).onsuccess = function (e) {\n doc = e.target.result;\n if (doc) {\n doc = decodeDoc(doc);\n }\n if (!doc) {\n err = createError(MISSING_DOC, 'missing');\n return finish();\n }\n finish();\n };\n };\n };\n\n api._getAttachment = function (docId, attachId, attachment, opts, callback) {\n var txn;\n if (opts.ctx) {\n txn = opts.ctx;\n } else {\n var txnResult = openTransactionSafely(idb,\n [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n }\n var digest = attachment.digest;\n var type = attachment.content_type;\n\n txn.objectStore(ATTACH_STORE).get(digest).onsuccess = function (e) {\n var body = e.target.result.body;\n readBlobData(body, type, opts.binary, function (blobData) {\n callback(null, blobData);\n });\n };\n };\n\n api._info = function idb_info(callback) {\n var updateSeq;\n var docCount;\n\n var txnResult = openTransactionSafely(idb, [META_STORE, BY_SEQ_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {\n docCount = e.target.result.docCount;\n };\n txn.objectStore(BY_SEQ_STORE).openCursor(null, 'prev').onsuccess = function (e) {\n var cursor = e.target.result;\n updateSeq = cursor ? cursor.key : 0;\n };\n\n txn.oncomplete = function () {\n callback(null, {\n doc_count: docCount,\n update_seq: updateSeq,\n // for debugging\n idb_attachment_format: (api._meta.blobSupport ? 'binary' : 'base64')\n });\n };\n };\n\n api._allDocs = function idb_allDocs(opts, callback) {\n idbAllDocs(opts, idb, callback);\n };\n\n api._changes = function idbChanges(opts) {\n return changes(opts, api, dbName, idb);\n };\n\n api._close = function (callback) {\n // https://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase#close\n // \"Returns immediately and closes the connection in a separate thread...\"\n idb.close();\n cachedDBs[\"delete\"](dbName);\n callback();\n };\n\n api._getRevisionTree = function (docId, callback) {\n var txnResult = openTransactionSafely(idb, [DOC_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n var req = txn.objectStore(DOC_STORE).get(docId);\n req.onsuccess = function (event) {\n var doc = decodeMetadata(event.target.result);\n if (!doc) {\n callback(createError(MISSING_DOC));\n } else {\n callback(null, doc.rev_tree);\n }\n };\n };\n\n // This function removes revisions of document docId\n // which are listed in revs and sets this document\n // revision to to rev_tree\n api._doCompaction = function (docId, revs, callback) {\n var stores = [\n DOC_STORE,\n BY_SEQ_STORE,\n ATTACH_STORE,\n ATTACH_AND_SEQ_STORE\n ];\n var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n\n var docStore = txn.objectStore(DOC_STORE);\n\n docStore.get(docId).onsuccess = function (event) {\n var metadata = decodeMetadata(event.target.result);\n traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n revHash, ctx, opts) {\n var rev$$1 = pos + '-' + revHash;\n if (revs.indexOf(rev$$1) !== -1) {\n opts.status = 'missing';\n }\n });\n compactRevs(revs, docId, txn);\n var winningRev$$1 = metadata.winningRev;\n var deleted = metadata.deleted;\n txn.objectStore(DOC_STORE).put(\n encodeMetadata(metadata, winningRev$$1, deleted));\n };\n txn.onabort = idbError(callback);\n txn.oncomplete = function () {\n callback();\n };\n };\n\n\n api._getLocal = function (id, callback) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var tx = txnResult.txn;\n var req = tx.objectStore(LOCAL_STORE).get(id);\n\n req.onerror = idbError(callback);\n req.onsuccess = function (e) {\n var doc = e.target.result;\n if (!doc) {\n callback(createError(MISSING_DOC));\n } else {\n delete doc['_doc_id_rev']; // for backwards compat\n callback(null, doc);\n }\n };\n };\n\n api._putLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n delete doc._revisions; // ignore this, trust the rev\n var oldRev = doc._rev;\n var id = doc._id;\n if (!oldRev) {\n doc._rev = '0-1';\n } else {\n doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);\n }\n\n var tx = opts.ctx;\n var ret;\n if (!tx) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n tx = txnResult.txn;\n tx.onerror = idbError(callback);\n tx.oncomplete = function () {\n if (ret) {\n callback(null, ret);\n }\n };\n }\n\n var oStore = tx.objectStore(LOCAL_STORE);\n var req;\n if (oldRev) {\n req = oStore.get(id);\n req.onsuccess = function (e) {\n var oldDoc = e.target.result;\n if (!oldDoc || oldDoc._rev !== oldRev) {\n callback(createError(REV_CONFLICT));\n } else { // update\n var req = oStore.put(doc);\n req.onsuccess = function () {\n ret = {ok: true, id: doc._id, rev: doc._rev};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n };\n }\n };\n } else { // new doc\n req = oStore.add(doc);\n req.onerror = function (e) {\n // constraint error, already exists\n callback(createError(REV_CONFLICT));\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n };\n req.onsuccess = function () {\n ret = {ok: true, id: doc._id, rev: doc._rev};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n };\n }\n };\n\n api._removeLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var tx = opts.ctx;\n if (!tx) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n tx = txnResult.txn;\n tx.oncomplete = function () {\n if (ret) {\n callback(null, ret);\n }\n };\n }\n var ret;\n var id = doc._id;\n var oStore = tx.objectStore(LOCAL_STORE);\n var req = oStore.get(id);\n\n req.onerror = idbError(callback);\n req.onsuccess = function (e) {\n var oldDoc = e.target.result;\n if (!oldDoc || oldDoc._rev !== doc._rev) {\n callback(createError(MISSING_DOC));\n } else {\n oStore[\"delete\"](id);\n ret = {ok: true, id: id, rev: '0-0'};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n }\n };\n };\n\n api._destroy = function (opts, callback) {\n changesHandler$$1.removeAllListeners(dbName);\n\n //Close open request for \"dbName\" database to fix ie delay.\n var openReq = openReqList.get(dbName);\n if (openReq && openReq.result) {\n openReq.result.close();\n cachedDBs[\"delete\"](dbName);\n }\n var req = indexedDB.deleteDatabase(dbName);\n\n req.onsuccess = function () {\n //Remove open request from the list.\n openReqList[\"delete\"](dbName);\n if (hasLocalStorage() && (dbName in localStorage)) {\n delete localStorage[dbName];\n }\n callback(null, { 'ok': true });\n };\n\n req.onerror = idbError(callback);\n };\n\n var cached = cachedDBs.get(dbName);\n\n if (cached) {\n idb = cached.idb;\n api._meta = cached.global;\n return nextTick(function () {\n callback(null, api);\n });\n }\n\n var req;\n if (opts.storage) {\n req = tryStorageOption(dbName, opts.storage);\n } else {\n req = indexedDB.open(dbName, ADAPTER_VERSION);\n }\n\n openReqList.set(dbName, req);\n\n req.onupgradeneeded = function (e) {\n var db = e.target.result;\n if (e.oldVersion < 1) {\n return createSchema(db); // new db, initial schema\n }\n // do migrations\n\n var txn = e.currentTarget.transaction;\n // these migrations have to be done in this function, before\n // control is returned to the event loop, because IndexedDB\n\n if (e.oldVersion < 3) {\n createLocalStoreSchema(db); // v2 -> v3\n }\n if (e.oldVersion < 4) {\n addAttachAndSeqStore(db); // v3 -> v4\n }\n\n var migrations = [\n addDeletedOrLocalIndex, // v1 -> v2\n migrateLocalStore, // v2 -> v3\n migrateAttsAndSeqs, // v3 -> v4\n migrateMetadata // v4 -> v5\n ];\n\n var i = e.oldVersion;\n\n function next() {\n var migration = migrations[i - 1];\n i++;\n if (migration) {\n migration(txn, next);\n }\n }\n\n next();\n };\n\n req.onsuccess = function (e) {\n\n idb = e.target.result;\n\n idb.onversionchange = function () {\n idb.close();\n cachedDBs[\"delete\"](dbName);\n };\n\n idb.onabort = function (e) {\n guardedConsole('error', 'Database has a global failure', e.target.error);\n idb.close();\n cachedDBs[\"delete\"](dbName);\n };\n\n // Do a few setup operations (in parallel as much as possible):\n // 1. Fetch meta doc\n // 2. Check blob support\n // 3. Calculate docCount\n // 4. Generate an instanceId if necessary\n // 5. Store docCount and instanceId on meta doc\n\n var txn = idb.transaction([\n META_STORE,\n DETECT_BLOB_SUPPORT_STORE,\n DOC_STORE\n ], 'readwrite');\n\n var storedMetaDoc = false;\n var metaDoc;\n var docCount;\n var blobSupport;\n var instanceId;\n\n function completeSetup() {\n if (typeof blobSupport === 'undefined' || !storedMetaDoc) {\n return;\n }\n api._meta = {\n name: dbName,\n instanceId: instanceId,\n blobSupport: blobSupport\n };\n\n cachedDBs.set(dbName, {\n idb: idb,\n global: api._meta\n });\n callback(null, api);\n }\n\n function storeMetaDocIfReady() {\n if (typeof docCount === 'undefined' || typeof metaDoc === 'undefined') {\n return;\n }\n var instanceKey = dbName + '_id';\n if (instanceKey in metaDoc) {\n instanceId = metaDoc[instanceKey];\n } else {\n metaDoc[instanceKey] = instanceId = uuid();\n }\n metaDoc.docCount = docCount;\n txn.objectStore(META_STORE).put(metaDoc);\n }\n\n //\n // fetch or generate the instanceId\n //\n txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {\n metaDoc = e.target.result || { id: META_STORE };\n storeMetaDocIfReady();\n };\n\n //\n // countDocs\n //\n countDocs(txn, function (count) {\n docCount = count;\n storeMetaDocIfReady();\n });\n\n //\n // check blob support\n //\n if (!blobSupportPromise) {\n // make sure blob support is only checked once\n blobSupportPromise = checkBlobSupport(txn);\n }\n\n blobSupportPromise.then(function (val) {\n blobSupport = val;\n completeSetup();\n });\n\n // only when the metadata put transaction has completed,\n // consider the setup done\n txn.oncomplete = function () {\n storedMetaDoc = true;\n completeSetup();\n };\n txn.onabort = idbError(callback);\n };\n\n req.onerror = function () {\n var msg = 'Failed to open indexedDB, are you in private browsing mode?';\n guardedConsole('error', msg);\n callback(createError(IDB_ERROR, msg));\n };\n}\n\nIdbPouch.valid = function () {\n // Issue #2533, we finally gave up on doing bug\n // detection instead of browser sniffing. Safari brought us\n // to our knees.\n var isSafari = typeof openDatabase !== 'undefined' &&\n /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) &&\n !/Chrome/.test(navigator.userAgent) &&\n !/BlackBerry/.test(navigator.platform);\n\n // Safari <10.1 does not meet our requirements for IDB support (#5572)\n // since Safari 10.1 shipped with fetch, we can use that to detect it\n var hasFetch = typeof fetch === 'function' &&\n fetch.toString().indexOf('[native code') !== -1;\n\n // On Firefox SecurityError is thrown while referencing indexedDB if cookies\n // are not allowed. `typeof indexedDB` also triggers the error.\n try {\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n};\n\nfunction tryStorageOption(dbName, storage) {\n try { // option only available in Firefox 26+\n return indexedDB.open(dbName, {\n version: ADAPTER_VERSION,\n storage: storage\n });\n } catch (err) {\n return indexedDB.open(dbName, ADAPTER_VERSION);\n }\n}\n\nfunction IDBPouch (PouchDB) {\n PouchDB.adapter('idb', IdbPouch, true);\n}\n\n//\n// Parsing hex strings. Yeah.\n//\n// So basically we need this because of a bug in WebSQL:\n// https://code.google.com/p/chromium/issues/detail?id=422690\n// https://bugs.webkit.org/show_bug.cgi?id=137637\n//\n// UTF-8 and UTF-16 are provided as separate functions\n// for meager performance improvements\n//\n\nfunction decodeUtf8(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction hexToInt(charCode) {\n // '0'-'9' is 48-57\n // 'A'-'F' is 65-70\n // SQLite will only give us uppercase hex\n return charCode < 65 ? (charCode - 48) : (charCode - 55);\n}\n\n\n// Example:\n// pragma encoding=utf8;\n// select hex('A');\n// returns '41'\nfunction parseHexUtf8(str, start, end) {\n var result = '';\n while (start < end) {\n result += String.fromCharCode(\n (hexToInt(str.charCodeAt(start++)) << 4) |\n hexToInt(str.charCodeAt(start++)));\n }\n return result;\n}\n\n// Example:\n// pragma encoding=utf16;\n// select hex('A');\n// returns '4100'\n// notice that the 00 comes after the 41 (i.e. it's swizzled)\nfunction parseHexUtf16(str, start, end) {\n var result = '';\n while (start < end) {\n // UTF-16, so swizzle the bytes\n result += String.fromCharCode(\n (hexToInt(str.charCodeAt(start + 2)) << 12) |\n (hexToInt(str.charCodeAt(start + 3)) << 8) |\n (hexToInt(str.charCodeAt(start)) << 4) |\n hexToInt(str.charCodeAt(start + 1)));\n start += 4;\n }\n return result;\n}\n\nfunction parseHexString(str, encoding) {\n if (encoding === 'UTF-8') {\n return decodeUtf8(parseHexUtf8(str, 0, str.length));\n } else {\n return parseHexUtf16(str, 0, str.length);\n }\n}\n\nfunction quote(str) {\n return \"'\" + str + \"'\";\n}\n\nvar ADAPTER_VERSION$1 = 7; // used to manage migrations\n\n// The object stores created for each database\n// DOC_STORE stores the document meta data, its revision history and state\nvar DOC_STORE$1 = quote('document-store');\n// BY_SEQ_STORE stores a particular version of a document, keyed by its\n// sequence id\nvar BY_SEQ_STORE$1 = quote('by-sequence');\n// Where we store attachments\nvar ATTACH_STORE$1 = quote('attach-store');\nvar LOCAL_STORE$1 = quote('local-store');\nvar META_STORE$1 = quote('metadata-store');\n// where we store many-to-many relations between attachment\n// digests and seqs\nvar ATTACH_AND_SEQ_STORE$1 = quote('attach-seq-store');\n\n// escapeBlob and unescapeBlob are workarounds for a websql bug:\n// https://code.google.com/p/chromium/issues/detail?id=422690\n// https://bugs.webkit.org/show_bug.cgi?id=137637\n// The goal is to never actually insert the \\u0000 character\n// in the database.\nfunction escapeBlob(str) {\n return str\n .replace(/\\u0002/g, '\\u0002\\u0002')\n .replace(/\\u0001/g, '\\u0001\\u0002')\n .replace(/\\u0000/g, '\\u0001\\u0001');\n}\n\nfunction unescapeBlob(str) {\n return str\n .replace(/\\u0001\\u0001/g, '\\u0000')\n .replace(/\\u0001\\u0002/g, '\\u0001')\n .replace(/\\u0002\\u0002/g, '\\u0002');\n}\n\nfunction stringifyDoc(doc) {\n // don't bother storing the id/rev. it uses lots of space,\n // in persistent map/reduce especially\n delete doc._id;\n delete doc._rev;\n return JSON.stringify(doc);\n}\n\nfunction unstringifyDoc(doc, id, rev$$1) {\n doc = JSON.parse(doc);\n doc._id = id;\n doc._rev = rev$$1;\n return doc;\n}\n\n// question mark groups IN queries, e.g. 3 -> '(?,?,?)'\nfunction qMarks(num) {\n var s = '(';\n while (num--) {\n s += '?';\n if (num) {\n s += ',';\n }\n }\n return s + ')';\n}\n\nfunction select(selector, table, joiner, where, orderBy) {\n return 'SELECT ' + selector + ' FROM ' +\n (typeof table === 'string' ? table : table.join(' JOIN ')) +\n (joiner ? (' ON ' + joiner) : '') +\n (where ? (' WHERE ' +\n (typeof where === 'string' ? where : where.join(' AND '))) : '') +\n (orderBy ? (' ORDER BY ' + orderBy) : '');\n}\n\nfunction compactRevs$1(revs, docId, tx) {\n\n if (!revs.length) {\n return;\n }\n\n var numDone = 0;\n var seqs = [];\n\n function checkDone() {\n if (++numDone === revs.length) { // done\n deleteOrphans();\n }\n }\n\n function deleteOrphans() {\n // find orphaned attachment digests\n\n if (!seqs.length) {\n return;\n }\n\n var sql = 'SELECT DISTINCT digest AS digest FROM ' +\n ATTACH_AND_SEQ_STORE$1 + ' WHERE seq IN ' + qMarks(seqs.length);\n\n tx.executeSql(sql, seqs, function (tx, res) {\n\n var digestsToCheck = [];\n for (var i = 0; i < res.rows.length; i++) {\n digestsToCheck.push(res.rows.item(i).digest);\n }\n if (!digestsToCheck.length) {\n return;\n }\n\n var sql = 'DELETE FROM ' + ATTACH_AND_SEQ_STORE$1 +\n ' WHERE seq IN (' +\n seqs.map(function () { return '?'; }).join(',') +\n ')';\n tx.executeSql(sql, seqs, function (tx) {\n\n var sql = 'SELECT digest FROM ' + ATTACH_AND_SEQ_STORE$1 +\n ' WHERE digest IN (' +\n digestsToCheck.map(function () { return '?'; }).join(',') +\n ')';\n tx.executeSql(sql, digestsToCheck, function (tx, res) {\n var nonOrphanedDigests = new ExportedSet();\n for (var i = 0; i < res.rows.length; i++) {\n nonOrphanedDigests.add(res.rows.item(i).digest);\n }\n digestsToCheck.forEach(function (digest) {\n if (nonOrphanedDigests.has(digest)) {\n return;\n }\n tx.executeSql(\n 'DELETE FROM ' + ATTACH_AND_SEQ_STORE$1 + ' WHERE digest=?',\n [digest]);\n tx.executeSql(\n 'DELETE FROM ' + ATTACH_STORE$1 + ' WHERE digest=?', [digest]);\n });\n });\n });\n });\n }\n\n // update by-seq and attach stores in parallel\n revs.forEach(function (rev$$1) {\n var sql = 'SELECT seq FROM ' + BY_SEQ_STORE$1 +\n ' WHERE doc_id=? AND rev=?';\n\n tx.executeSql(sql, [docId, rev$$1], function (tx, res) {\n if (!res.rows.length) { // already deleted\n return checkDone();\n }\n var seq = res.rows.item(0).seq;\n seqs.push(seq);\n\n tx.executeSql(\n 'DELETE FROM ' + BY_SEQ_STORE$1 + ' WHERE seq=?', [seq], checkDone);\n });\n });\n}\n\nfunction websqlError(callback) {\n return function (event) {\n guardedConsole('error', 'WebSQL threw an error', event);\n // event may actually be a SQLError object, so report is as such\n var errorNameMatch = event && event.constructor.toString()\n .match(/function ([^(]+)/);\n var errorName = (errorNameMatch && errorNameMatch[1]) || event.type;\n var errorReason = event.target || event.message;\n callback(createError(WSQ_ERROR, errorReason, errorName));\n };\n}\n\nfunction getSize(opts) {\n if ('size' in opts) {\n // triggers immediate popup in iOS, fixes #2347\n // e.g. 5000001 asks for 5 MB, 10000001 asks for 10 MB,\n return opts.size * 1000000;\n }\n // In iOS, doesn't matter as long as it's <= 5000000.\n // Except that if you request too much, our tests fail\n // because of the native \"do you accept?\" popup.\n // In Android <=4.3, this value is actually used as an\n // honest-to-god ceiling for data, so we need to\n // set it to a decently high number.\n var isAndroid = typeof navigator !== 'undefined' &&\n /Android/.test(navigator.userAgent);\n return isAndroid ? 5000000 : 1; // in PhantomJS, if you use 0 it will crash\n}\n\nfunction websqlBulkDocs(dbOpts, req, opts, api, db, websqlChanges, callback) {\n var newEdits = opts.new_edits;\n var userDocs = req.docs;\n\n // Parse the docs, give them a sequence number for the result\n var docInfos = userDocs.map(function (doc) {\n if (doc._id && isLocalId(doc._id)) {\n return doc;\n }\n var newDoc = parseDoc(doc, newEdits);\n return newDoc;\n });\n\n var docInfoErrors = docInfos.filter(function (docInfo) {\n return docInfo.error;\n });\n if (docInfoErrors.length) {\n return callback(docInfoErrors[0]);\n }\n\n var tx;\n var results = new Array(docInfos.length);\n var fetchedDocs = new ExportedMap();\n\n var preconditionErrored;\n function complete() {\n if (preconditionErrored) {\n return callback(preconditionErrored);\n }\n websqlChanges.notify(api._name);\n callback(null, results);\n }\n\n function verifyAttachment(digest, callback) {\n var sql = 'SELECT count(*) as cnt FROM ' + ATTACH_STORE$1 +\n ' WHERE digest=?';\n tx.executeSql(sql, [digest], function (tx, result) {\n if (result.rows.item(0).cnt === 0) {\n var err = createError(MISSING_STUB,\n 'unknown stub attachment with digest ' +\n digest);\n callback(err);\n } else {\n callback();\n }\n });\n }\n\n function verifyAttachments(finish) {\n var digests = [];\n docInfos.forEach(function (docInfo) {\n if (docInfo.data && docInfo.data._attachments) {\n Object.keys(docInfo.data._attachments).forEach(function (filename) {\n var att = docInfo.data._attachments[filename];\n if (att.stub) {\n digests.push(att.digest);\n }\n });\n }\n });\n if (!digests.length) {\n return finish();\n }\n var numDone = 0;\n var err;\n\n function checkDone() {\n if (++numDone === digests.length) {\n finish(err);\n }\n }\n digests.forEach(function (digest) {\n verifyAttachment(digest, function (attErr) {\n if (attErr && !err) {\n err = attErr;\n }\n checkDone();\n });\n });\n }\n\n function writeDoc(docInfo, winningRev$$1, winningRevIsDeleted, newRevIsDeleted,\n isUpdate, delta, resultsIdx, callback) {\n\n function finish() {\n var data = docInfo.data;\n var deletedInt = newRevIsDeleted ? 1 : 0;\n\n var id = data._id;\n var rev = data._rev;\n var json = stringifyDoc(data);\n var sql = 'INSERT INTO ' + BY_SEQ_STORE$1 +\n ' (doc_id, rev, json, deleted) VALUES (?, ?, ?, ?);';\n var sqlArgs = [id, rev, json, deletedInt];\n\n // map seqs to attachment digests, which\n // we will need later during compaction\n function insertAttachmentMappings(seq, callback) {\n var attsAdded = 0;\n var attsToAdd = Object.keys(data._attachments || {});\n\n if (!attsToAdd.length) {\n return callback();\n }\n function checkDone() {\n if (++attsAdded === attsToAdd.length) {\n callback();\n }\n return false; // ack handling a constraint error\n }\n function add(att) {\n var sql = 'INSERT INTO ' + ATTACH_AND_SEQ_STORE$1 +\n ' (digest, seq) VALUES (?,?)';\n var sqlArgs = [data._attachments[att].digest, seq];\n tx.executeSql(sql, sqlArgs, checkDone, checkDone);\n // second callback is for a constaint error, which we ignore\n // because this docid/rev has already been associated with\n // the digest (e.g. when new_edits == false)\n }\n for (var i = 0; i < attsToAdd.length; i++) {\n add(attsToAdd[i]); // do in parallel\n }\n }\n\n tx.executeSql(sql, sqlArgs, function (tx, result) {\n var seq = result.insertId;\n insertAttachmentMappings(seq, function () {\n dataWritten(tx, seq);\n });\n }, function () {\n // constraint error, recover by updating instead (see #1638)\n var fetchSql = select('seq', BY_SEQ_STORE$1, null,\n 'doc_id=? AND rev=?');\n tx.executeSql(fetchSql, [id, rev], function (tx, res) {\n var seq = res.rows.item(0).seq;\n var sql = 'UPDATE ' + BY_SEQ_STORE$1 +\n ' SET json=?, deleted=? WHERE doc_id=? AND rev=?;';\n var sqlArgs = [json, deletedInt, id, rev];\n tx.executeSql(sql, sqlArgs, function (tx) {\n insertAttachmentMappings(seq, function () {\n dataWritten(tx, seq);\n });\n });\n });\n return false; // ack that we've handled the error\n });\n }\n\n function collectResults(attachmentErr) {\n if (!err) {\n if (attachmentErr) {\n err = attachmentErr;\n callback(err);\n } else if (recv === attachments.length) {\n finish();\n }\n }\n }\n\n var err = null;\n var recv = 0;\n\n docInfo.data._id = docInfo.metadata.id;\n docInfo.data._rev = docInfo.metadata.rev;\n var attachments = Object.keys(docInfo.data._attachments || {});\n\n\n if (newRevIsDeleted) {\n docInfo.data._deleted = true;\n }\n\n function attachmentSaved(err) {\n recv++;\n collectResults(err);\n }\n\n attachments.forEach(function (key) {\n var att = docInfo.data._attachments[key];\n if (!att.stub) {\n var data = att.data;\n delete att.data;\n att.revpos = parseInt(winningRev$$1, 10);\n var digest = att.digest;\n saveAttachment(digest, data, attachmentSaved);\n } else {\n recv++;\n collectResults();\n }\n });\n\n if (!attachments.length) {\n finish();\n }\n\n function dataWritten(tx, seq) {\n var id = docInfo.metadata.id;\n\n var revsToCompact = docInfo.stemmedRevs || [];\n if (isUpdate && api.auto_compaction) {\n revsToCompact = compactTree(docInfo.metadata).concat(revsToCompact);\n }\n if (revsToCompact.length) {\n compactRevs$1(revsToCompact, id, tx);\n }\n\n docInfo.metadata.seq = seq;\n var rev = docInfo.metadata.rev;\n delete docInfo.metadata.rev;\n\n var sql = isUpdate ?\n 'UPDATE ' + DOC_STORE$1 +\n ' SET json=?, max_seq=?, winningseq=' +\n '(SELECT seq FROM ' + BY_SEQ_STORE$1 +\n ' WHERE doc_id=' + DOC_STORE$1 + '.id AND rev=?) WHERE id=?'\n : 'INSERT INTO ' + DOC_STORE$1 +\n ' (id, winningseq, max_seq, json) VALUES (?,?,?,?);';\n var metadataStr = safeJsonStringify(docInfo.metadata);\n var params = isUpdate ?\n [metadataStr, seq, winningRev$$1, id] :\n [id, seq, seq, metadataStr];\n tx.executeSql(sql, params, function () {\n results[resultsIdx] = {\n ok: true,\n id: docInfo.metadata.id,\n rev: rev\n };\n fetchedDocs.set(id, docInfo.metadata);\n callback();\n });\n }\n }\n\n function websqlProcessDocs() {\n processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs, tx,\n results, writeDoc, opts);\n }\n\n function fetchExistingDocs(callback) {\n if (!docInfos.length) {\n return callback();\n }\n\n var numFetched = 0;\n\n function checkDone() {\n if (++numFetched === docInfos.length) {\n callback();\n }\n }\n\n docInfos.forEach(function (docInfo) {\n if (docInfo._id && isLocalId(docInfo._id)) {\n return checkDone(); // skip local docs\n }\n var id = docInfo.metadata.id;\n tx.executeSql('SELECT json FROM ' + DOC_STORE$1 +\n ' WHERE id = ?', [id], function (tx, result) {\n if (result.rows.length) {\n var metadata = safeJsonParse(result.rows.item(0).json);\n fetchedDocs.set(id, metadata);\n }\n checkDone();\n });\n });\n }\n\n function saveAttachment(digest, data, callback) {\n var sql = 'SELECT digest FROM ' + ATTACH_STORE$1 + ' WHERE digest=?';\n tx.executeSql(sql, [digest], function (tx, result) {\n if (result.rows.length) { // attachment already exists\n return callback();\n }\n // we could just insert before selecting and catch the error,\n // but my hunch is that it's cheaper not to serialize the blob\n // from JS to C if we don't have to (TODO: confirm this)\n sql = 'INSERT INTO ' + ATTACH_STORE$1 +\n ' (digest, body, escaped) VALUES (?,?,1)';\n tx.executeSql(sql, [digest, escapeBlob(data)], function () {\n callback();\n }, function () {\n // ignore constaint errors, means it already exists\n callback();\n return false; // ack we handled the error\n });\n });\n }\n\n preprocessAttachments(docInfos, 'binary', function (err) {\n if (err) {\n return callback(err);\n }\n db.transaction(function (txn) {\n tx = txn;\n verifyAttachments(function (err) {\n if (err) {\n preconditionErrored = err;\n } else {\n fetchExistingDocs(websqlProcessDocs);\n }\n });\n }, websqlError(callback), complete);\n });\n}\n\nvar cachedDatabases = new ExportedMap();\n\n// openDatabase passed in through opts (e.g. for node-websql)\nfunction openDatabaseWithOpts(opts) {\n return opts.websql(opts.name, opts.version, opts.description, opts.size);\n}\n\nfunction openDBSafely(opts) {\n try {\n return {\n db: openDatabaseWithOpts(opts)\n };\n } catch (err) {\n return {\n error: err\n };\n }\n}\n\nfunction openDB(opts) {\n var cachedResult = cachedDatabases.get(opts.name);\n if (!cachedResult) {\n cachedResult = openDBSafely(opts);\n cachedDatabases.set(opts.name, cachedResult);\n }\n return cachedResult;\n}\n\nvar websqlChanges = new Changes();\n\nfunction fetchAttachmentsIfNecessary$1(doc, opts, api, txn, cb) {\n var attachments = Object.keys(doc._attachments || {});\n if (!attachments.length) {\n return cb && cb();\n }\n var numDone = 0;\n\n function checkDone() {\n if (++numDone === attachments.length && cb) {\n cb();\n }\n }\n\n function fetchAttachment(doc, att) {\n var attObj = doc._attachments[att];\n var attOpts = {binary: opts.binary, ctx: txn};\n api._getAttachment(doc._id, att, attObj, attOpts, function (_, data) {\n doc._attachments[att] = $inject_Object_assign(\n pick(attObj, ['digest', 'content_type']),\n { data: data }\n );\n checkDone();\n });\n }\n\n attachments.forEach(function (att) {\n if (opts.attachments && opts.include_docs) {\n fetchAttachment(doc, att);\n } else {\n doc._attachments[att].stub = true;\n checkDone();\n }\n });\n}\n\nvar POUCH_VERSION = 1;\n\n// these indexes cover the ground for most allDocs queries\nvar BY_SEQ_STORE_DELETED_INDEX_SQL =\n 'CREATE INDEX IF NOT EXISTS \\'by-seq-deleted-idx\\' ON ' +\n BY_SEQ_STORE$1 + ' (seq, deleted)';\nvar BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL =\n 'CREATE UNIQUE INDEX IF NOT EXISTS \\'by-seq-doc-id-rev\\' ON ' +\n BY_SEQ_STORE$1 + ' (doc_id, rev)';\nvar DOC_STORE_WINNINGSEQ_INDEX_SQL =\n 'CREATE INDEX IF NOT EXISTS \\'doc-winningseq-idx\\' ON ' +\n DOC_STORE$1 + ' (winningseq)';\nvar ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL =\n 'CREATE INDEX IF NOT EXISTS \\'attach-seq-seq-idx\\' ON ' +\n ATTACH_AND_SEQ_STORE$1 + ' (seq)';\nvar ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL =\n 'CREATE UNIQUE INDEX IF NOT EXISTS \\'attach-seq-digest-idx\\' ON ' +\n ATTACH_AND_SEQ_STORE$1 + ' (digest, seq)';\n\nvar DOC_STORE_AND_BY_SEQ_JOINER = BY_SEQ_STORE$1 +\n '.seq = ' + DOC_STORE$1 + '.winningseq';\n\nvar SELECT_DOCS = BY_SEQ_STORE$1 + '.seq AS seq, ' +\n BY_SEQ_STORE$1 + '.deleted AS deleted, ' +\n BY_SEQ_STORE$1 + '.json AS data, ' +\n BY_SEQ_STORE$1 + '.rev AS rev, ' +\n DOC_STORE$1 + '.json AS metadata';\n\nfunction WebSqlPouch(opts, callback) {\n var api = this;\n var instanceId = null;\n var size = getSize(opts);\n var idRequests = [];\n var encoding;\n\n api._name = opts.name;\n\n // extend the options here, because sqlite plugin has a ton of options\n // and they are constantly changing, so it's more prudent to allow anything\n var websqlOpts = $inject_Object_assign({}, opts, {\n version: POUCH_VERSION,\n description: opts.name,\n size: size\n });\n var openDBResult = openDB(websqlOpts);\n if (openDBResult.error) {\n return websqlError(callback)(openDBResult.error);\n }\n var db = openDBResult.db;\n if (typeof db.readTransaction !== 'function') {\n // doesn't exist in sqlite plugin\n db.readTransaction = db.transaction;\n }\n\n function dbCreated() {\n // note the db name in case the browser upgrades to idb\n if (hasLocalStorage()) {\n window.localStorage['_pouch__websqldb_' + api._name] = true;\n }\n callback(null, api);\n }\n\n // In this migration, we added the 'deleted' and 'local' columns to the\n // by-seq and doc store tables.\n // To preserve existing user data, we re-process all the existing JSON\n // and add these values.\n // Called migration2 because it corresponds to adapter version (db_version) #2\n function runMigration2(tx, callback) {\n // index used for the join in the allDocs query\n tx.executeSql(DOC_STORE_WINNINGSEQ_INDEX_SQL);\n\n tx.executeSql('ALTER TABLE ' + BY_SEQ_STORE$1 +\n ' ADD COLUMN deleted TINYINT(1) DEFAULT 0', [], function () {\n tx.executeSql(BY_SEQ_STORE_DELETED_INDEX_SQL);\n tx.executeSql('ALTER TABLE ' + DOC_STORE$1 +\n ' ADD COLUMN local TINYINT(1) DEFAULT 0', [], function () {\n tx.executeSql('CREATE INDEX IF NOT EXISTS \\'doc-store-local-idx\\' ON ' +\n DOC_STORE$1 + ' (local, id)');\n\n var sql = 'SELECT ' + DOC_STORE$1 + '.winningseq AS seq, ' + DOC_STORE$1 +\n '.json AS metadata FROM ' + BY_SEQ_STORE$1 + ' JOIN ' + DOC_STORE$1 +\n ' ON ' + BY_SEQ_STORE$1 + '.seq = ' + DOC_STORE$1 + '.winningseq';\n\n tx.executeSql(sql, [], function (tx, result) {\n\n var deleted = [];\n var local = [];\n\n for (var i = 0; i < result.rows.length; i++) {\n var item = result.rows.item(i);\n var seq = item.seq;\n var metadata = JSON.parse(item.metadata);\n if (isDeleted(metadata)) {\n deleted.push(seq);\n }\n if (isLocalId(metadata.id)) {\n local.push(metadata.id);\n }\n }\n tx.executeSql('UPDATE ' + DOC_STORE$1 + 'SET local = 1 WHERE id IN ' +\n qMarks(local.length), local, function () {\n tx.executeSql('UPDATE ' + BY_SEQ_STORE$1 +\n ' SET deleted = 1 WHERE seq IN ' +\n qMarks(deleted.length), deleted, callback);\n });\n });\n });\n });\n }\n\n // in this migration, we make all the local docs unversioned\n function runMigration3(tx, callback) {\n var local = 'CREATE TABLE IF NOT EXISTS ' + LOCAL_STORE$1 +\n ' (id UNIQUE, rev, json)';\n tx.executeSql(local, [], function () {\n var sql = 'SELECT ' + DOC_STORE$1 + '.id AS id, ' +\n BY_SEQ_STORE$1 + '.json AS data ' +\n 'FROM ' + BY_SEQ_STORE$1 + ' JOIN ' +\n DOC_STORE$1 + ' ON ' + BY_SEQ_STORE$1 + '.seq = ' +\n DOC_STORE$1 + '.winningseq WHERE local = 1';\n tx.executeSql(sql, [], function (tx, res) {\n var rows = [];\n for (var i = 0; i < res.rows.length; i++) {\n rows.push(res.rows.item(i));\n }\n function doNext() {\n if (!rows.length) {\n return callback(tx);\n }\n var row = rows.shift();\n var rev$$1 = JSON.parse(row.data)._rev;\n tx.executeSql('INSERT INTO ' + LOCAL_STORE$1 +\n ' (id, rev, json) VALUES (?,?,?)',\n [row.id, rev$$1, row.data], function (tx) {\n tx.executeSql('DELETE FROM ' + DOC_STORE$1 + ' WHERE id=?',\n [row.id], function (tx) {\n tx.executeSql('DELETE FROM ' + BY_SEQ_STORE$1 + ' WHERE seq=?',\n [row.seq], function () {\n doNext();\n });\n });\n });\n }\n doNext();\n });\n });\n }\n\n // in this migration, we remove doc_id_rev and just use rev\n function runMigration4(tx, callback) {\n\n function updateRows(rows) {\n function doNext() {\n if (!rows.length) {\n return callback(tx);\n }\n var row = rows.shift();\n var doc_id_rev = parseHexString(row.hex, encoding);\n var idx = doc_id_rev.lastIndexOf('::');\n var doc_id = doc_id_rev.substring(0, idx);\n var rev$$1 = doc_id_rev.substring(idx + 2);\n var sql = 'UPDATE ' + BY_SEQ_STORE$1 +\n ' SET doc_id=?, rev=? WHERE doc_id_rev=?';\n tx.executeSql(sql, [doc_id, rev$$1, doc_id_rev], function () {\n doNext();\n });\n }\n doNext();\n }\n\n var sql = 'ALTER TABLE ' + BY_SEQ_STORE$1 + ' ADD COLUMN doc_id';\n tx.executeSql(sql, [], function (tx) {\n var sql = 'ALTER TABLE ' + BY_SEQ_STORE$1 + ' ADD COLUMN rev';\n tx.executeSql(sql, [], function (tx) {\n tx.executeSql(BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL, [], function (tx) {\n var sql = 'SELECT hex(doc_id_rev) as hex FROM ' + BY_SEQ_STORE$1;\n tx.executeSql(sql, [], function (tx, res) {\n var rows = [];\n for (var i = 0; i < res.rows.length; i++) {\n rows.push(res.rows.item(i));\n }\n updateRows(rows);\n });\n });\n });\n });\n }\n\n // in this migration, we add the attach_and_seq table\n // for issue #2818\n function runMigration5(tx, callback) {\n\n function migrateAttsAndSeqs(tx) {\n // need to actually populate the table. this is the expensive part,\n // so as an optimization, check first that this database even\n // contains attachments\n var sql = 'SELECT COUNT(*) AS cnt FROM ' + ATTACH_STORE$1;\n tx.executeSql(sql, [], function (tx, res) {\n var count = res.rows.item(0).cnt;\n if (!count) {\n return callback(tx);\n }\n\n var offset = 0;\n var pageSize = 10;\n function nextPage() {\n var sql = select(\n SELECT_DOCS + ', ' + DOC_STORE$1 + '.id AS id',\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE_AND_BY_SEQ_JOINER,\n null,\n DOC_STORE$1 + '.id '\n );\n sql += ' LIMIT ' + pageSize + ' OFFSET ' + offset;\n offset += pageSize;\n tx.executeSql(sql, [], function (tx, res) {\n if (!res.rows.length) {\n return callback(tx);\n }\n var digestSeqs = {};\n function addDigestSeq(digest, seq) {\n // uniq digest/seq pairs, just in case there are dups\n var seqs = digestSeqs[digest] = (digestSeqs[digest] || []);\n if (seqs.indexOf(seq) === -1) {\n seqs.push(seq);\n }\n }\n for (var i = 0; i < res.rows.length; i++) {\n var row = res.rows.item(i);\n var doc = unstringifyDoc(row.data, row.id, row.rev);\n var atts = Object.keys(doc._attachments || {});\n for (var j = 0; j < atts.length; j++) {\n var att = doc._attachments[atts[j]];\n addDigestSeq(att.digest, row.seq);\n }\n }\n var digestSeqPairs = [];\n Object.keys(digestSeqs).forEach(function (digest) {\n var seqs = digestSeqs[digest];\n seqs.forEach(function (seq) {\n digestSeqPairs.push([digest, seq]);\n });\n });\n if (!digestSeqPairs.length) {\n return nextPage();\n }\n var numDone = 0;\n digestSeqPairs.forEach(function (pair) {\n var sql = 'INSERT INTO ' + ATTACH_AND_SEQ_STORE$1 +\n ' (digest, seq) VALUES (?,?)';\n tx.executeSql(sql, pair, function () {\n if (++numDone === digestSeqPairs.length) {\n nextPage();\n }\n });\n });\n });\n }\n nextPage();\n });\n }\n\n var attachAndRev = 'CREATE TABLE IF NOT EXISTS ' +\n ATTACH_AND_SEQ_STORE$1 + ' (digest, seq INTEGER)';\n tx.executeSql(attachAndRev, [], function (tx) {\n tx.executeSql(\n ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL, [], function (tx) {\n tx.executeSql(\n ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL, [],\n migrateAttsAndSeqs);\n });\n });\n }\n\n // in this migration, we use escapeBlob() and unescapeBlob()\n // instead of reading out the binary as HEX, which is slow\n function runMigration6(tx, callback) {\n var sql = 'ALTER TABLE ' + ATTACH_STORE$1 +\n ' ADD COLUMN escaped TINYINT(1) DEFAULT 0';\n tx.executeSql(sql, [], callback);\n }\n\n // issue #3136, in this migration we need a \"latest seq\" as well\n // as the \"winning seq\" in the doc store\n function runMigration7(tx, callback) {\n var sql = 'ALTER TABLE ' + DOC_STORE$1 +\n ' ADD COLUMN max_seq INTEGER';\n tx.executeSql(sql, [], function (tx) {\n var sql = 'UPDATE ' + DOC_STORE$1 + ' SET max_seq=(SELECT MAX(seq) FROM ' +\n BY_SEQ_STORE$1 + ' WHERE doc_id=id)';\n tx.executeSql(sql, [], function (tx) {\n // add unique index after filling, else we'll get a constraint\n // error when we do the ALTER TABLE\n var sql =\n 'CREATE UNIQUE INDEX IF NOT EXISTS \\'doc-max-seq-idx\\' ON ' +\n DOC_STORE$1 + ' (max_seq)';\n tx.executeSql(sql, [], callback);\n });\n });\n }\n\n function checkEncoding(tx, cb) {\n // UTF-8 on chrome/android, UTF-16 on safari < 7.1\n tx.executeSql('SELECT HEX(\"a\") AS hex', [], function (tx, res) {\n var hex = res.rows.item(0).hex;\n encoding = hex.length === 2 ? 'UTF-8' : 'UTF-16';\n cb();\n }\n );\n }\n\n function onGetInstanceId() {\n while (idRequests.length > 0) {\n var idCallback = idRequests.pop();\n idCallback(null, instanceId);\n }\n }\n\n function onGetVersion(tx, dbVersion) {\n if (dbVersion === 0) {\n // initial schema\n\n var meta = 'CREATE TABLE IF NOT EXISTS ' + META_STORE$1 +\n ' (dbid, db_version INTEGER)';\n var attach = 'CREATE TABLE IF NOT EXISTS ' + ATTACH_STORE$1 +\n ' (digest UNIQUE, escaped TINYINT(1), body BLOB)';\n var attachAndRev = 'CREATE TABLE IF NOT EXISTS ' +\n ATTACH_AND_SEQ_STORE$1 + ' (digest, seq INTEGER)';\n // TODO: migrate winningseq to INTEGER\n var doc = 'CREATE TABLE IF NOT EXISTS ' + DOC_STORE$1 +\n ' (id unique, json, winningseq, max_seq INTEGER UNIQUE)';\n var seq = 'CREATE TABLE IF NOT EXISTS ' + BY_SEQ_STORE$1 +\n ' (seq INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +\n 'json, deleted TINYINT(1), doc_id, rev)';\n var local = 'CREATE TABLE IF NOT EXISTS ' + LOCAL_STORE$1 +\n ' (id UNIQUE, rev, json)';\n\n // creates\n tx.executeSql(attach);\n tx.executeSql(local);\n tx.executeSql(attachAndRev, [], function () {\n tx.executeSql(ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL);\n tx.executeSql(ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL);\n });\n tx.executeSql(doc, [], function () {\n tx.executeSql(DOC_STORE_WINNINGSEQ_INDEX_SQL);\n tx.executeSql(seq, [], function () {\n tx.executeSql(BY_SEQ_STORE_DELETED_INDEX_SQL);\n tx.executeSql(BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL);\n tx.executeSql(meta, [], function () {\n // mark the db version, and new dbid\n var initSeq = 'INSERT INTO ' + META_STORE$1 +\n ' (db_version, dbid) VALUES (?,?)';\n instanceId = uuid();\n var initSeqArgs = [ADAPTER_VERSION$1, instanceId];\n tx.executeSql(initSeq, initSeqArgs, function () {\n onGetInstanceId();\n });\n });\n });\n });\n } else { // version > 0\n\n var setupDone = function () {\n var migrated = dbVersion < ADAPTER_VERSION$1;\n if (migrated) {\n // update the db version within this transaction\n tx.executeSql('UPDATE ' + META_STORE$1 + ' SET db_version = ' +\n ADAPTER_VERSION$1);\n }\n // notify db.id() callers\n var sql = 'SELECT dbid FROM ' + META_STORE$1;\n tx.executeSql(sql, [], function (tx, result) {\n instanceId = result.rows.item(0).dbid;\n onGetInstanceId();\n });\n };\n\n // would love to use promises here, but then websql\n // ends the transaction early\n var tasks = [\n runMigration2,\n runMigration3,\n runMigration4,\n runMigration5,\n runMigration6,\n runMigration7,\n setupDone\n ];\n\n // run each migration sequentially\n var i = dbVersion;\n var nextMigration = function (tx) {\n tasks[i - 1](tx, nextMigration);\n i++;\n };\n nextMigration(tx);\n }\n }\n\n function setup() {\n db.transaction(function (tx) {\n // first check the encoding\n checkEncoding(tx, function () {\n // then get the version\n fetchVersion(tx);\n });\n }, websqlError(callback), dbCreated);\n }\n\n function fetchVersion(tx) {\n var sql = 'SELECT sql FROM sqlite_master WHERE tbl_name = ' + META_STORE$1;\n tx.executeSql(sql, [], function (tx, result) {\n if (!result.rows.length) {\n // database hasn't even been created yet (version 0)\n onGetVersion(tx, 0);\n } else if (!/db_version/.test(result.rows.item(0).sql)) {\n // table was created, but without the new db_version column,\n // so add it.\n tx.executeSql('ALTER TABLE ' + META_STORE$1 +\n ' ADD COLUMN db_version INTEGER', [], function () {\n // before version 2, this column didn't even exist\n onGetVersion(tx, 1);\n });\n } else { // column exists, we can safely get it\n tx.executeSql('SELECT db_version FROM ' + META_STORE$1,\n [], function (tx, result) {\n var dbVersion = result.rows.item(0).db_version;\n onGetVersion(tx, dbVersion);\n });\n }\n });\n }\n\n setup();\n\n function getMaxSeq(tx, callback) {\n var sql = 'SELECT MAX(seq) AS seq FROM ' + BY_SEQ_STORE$1;\n tx.executeSql(sql, [], function (tx, res) {\n var updateSeq = res.rows.item(0).seq || 0;\n callback(updateSeq);\n });\n }\n\n function countDocs(tx, callback) {\n // count the total rows\n var sql = select(\n 'COUNT(' + DOC_STORE$1 + '.id) AS \\'num\\'',\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE_AND_BY_SEQ_JOINER,\n BY_SEQ_STORE$1 + '.deleted=0');\n\n tx.executeSql(sql, [], function (tx, result) {\n callback(result.rows.item(0).num);\n });\n }\n\n api._remote = false;\n api.type = function () {\n return 'websql';\n };\n\n api._id = toPromise(function (callback) {\n callback(null, instanceId);\n });\n\n api._info = function (callback) {\n var seq;\n var docCount;\n db.readTransaction(function (tx) {\n getMaxSeq(tx, function (theSeq) {\n seq = theSeq;\n });\n countDocs(tx, function (theDocCount) {\n docCount = theDocCount;\n });\n }, websqlError(callback), function () {\n callback(null, {\n doc_count: docCount,\n update_seq: seq,\n websql_encoding: encoding\n });\n });\n };\n\n api._bulkDocs = function (req, reqOpts, callback) {\n websqlBulkDocs(opts, req, reqOpts, api, db, websqlChanges, callback);\n };\n\n function latest$$1(tx, id, rev$$1, callback, finish) {\n var sql = select(\n SELECT_DOCS,\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE_AND_BY_SEQ_JOINER,\n DOC_STORE$1 + '.id=?');\n var sqlArgs = [id];\n\n tx.executeSql(sql, sqlArgs, function (a, results) {\n if (!results.rows.length) {\n var err = createError(MISSING_DOC, 'missing');\n return finish(err);\n }\n var item = results.rows.item(0);\n var metadata = safeJsonParse(item.metadata);\n callback(latest(rev$$1, metadata));\n });\n }\n\n api._get = function (id, opts, callback) {\n var doc;\n var metadata;\n var tx = opts.ctx;\n if (!tx) {\n return db.readTransaction(function (txn) {\n api._get(id, $inject_Object_assign({ctx: txn}, opts), callback);\n });\n }\n\n function finish(err) {\n callback(err, {doc: doc, metadata: metadata, ctx: tx});\n }\n\n var sql;\n var sqlArgs;\n\n if (!opts.rev) {\n sql = select(\n SELECT_DOCS,\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE_AND_BY_SEQ_JOINER,\n DOC_STORE$1 + '.id=?');\n sqlArgs = [id];\n } else if (opts.latest) {\n latest$$1(tx, id, opts.rev, function (latestRev) {\n opts.latest = false;\n opts.rev = latestRev;\n api._get(id, opts, callback);\n }, finish);\n return;\n } else {\n sql = select(\n SELECT_DOCS,\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE$1 + '.id=' + BY_SEQ_STORE$1 + '.doc_id',\n [BY_SEQ_STORE$1 + '.doc_id=?', BY_SEQ_STORE$1 + '.rev=?']);\n sqlArgs = [id, opts.rev];\n }\n\n tx.executeSql(sql, sqlArgs, function (a, results) {\n if (!results.rows.length) {\n var missingErr = createError(MISSING_DOC, 'missing');\n return finish(missingErr);\n }\n var item = results.rows.item(0);\n metadata = safeJsonParse(item.metadata);\n if (item.deleted && !opts.rev) {\n var deletedErr = createError(MISSING_DOC, 'deleted');\n return finish(deletedErr);\n }\n doc = unstringifyDoc(item.data, metadata.id, item.rev);\n finish();\n });\n };\n\n api._allDocs = function (opts, callback) {\n var results = [];\n var totalRows;\n var updateSeq;\n\n var start = 'startkey' in opts ? opts.startkey : false;\n var end = 'endkey' in opts ? opts.endkey : false;\n var key = 'key' in opts ? opts.key : false;\n var keys = 'keys' in opts ? opts.keys : false;\n var descending = 'descending' in opts ? opts.descending : false;\n var limit = 'limit' in opts ? opts.limit : -1;\n var offset = 'skip' in opts ? opts.skip : 0;\n var inclusiveEnd = opts.inclusive_end !== false;\n \n var sqlArgs = [];\n var criteria = [];\n\n if (keys) {\n var destinctKeys = [];\n var bindingStr = \"\";\n keys.forEach(function (key) {\n if (destinctKeys.indexOf(key) === -1) {\n destinctKeys.push(key);\n bindingStr += '?,';\n }\n });\n bindingStr = bindingStr.substring(0, bindingStr.length - 1); // keys is never empty\n criteria.push(DOC_STORE$1 + '.id IN (' + bindingStr + ')');\n sqlArgs = sqlArgs.concat(destinctKeys);\n } else if (key !== false) {\n criteria.push(DOC_STORE$1 + '.id = ?');\n sqlArgs.push(key);\n } else if (start !== false || end !== false) {\n if (start !== false) {\n criteria.push(DOC_STORE$1 + '.id ' + (descending ? '<=' : '>=') + ' ?');\n sqlArgs.push(start);\n }\n if (end !== false) {\n var comparator = descending ? '>' : '<';\n if (inclusiveEnd) {\n comparator += '=';\n }\n criteria.push(DOC_STORE$1 + '.id ' + comparator + ' ?');\n sqlArgs.push(end);\n }\n if (key !== false) {\n criteria.push(DOC_STORE$1 + '.id = ?');\n sqlArgs.push(key);\n }\n }\n\n if (!keys) {\n // report deleted if keys are specified\n criteria.push(BY_SEQ_STORE$1 + '.deleted = 0');\n }\n\n db.readTransaction(function (tx) {\n // count the docs in parallel to other operations\n countDocs(tx, function (docCount) {\n totalRows = docCount;\n });\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n // get max sequence in parallel to other operations\n getMaxSeq(tx, function (theSeq) {\n updateSeq = theSeq;\n });\n }\n\n if (limit === 0) {\n return;\n }\n\n // do a single query to fetch the documents\n var sql = select(\n SELECT_DOCS,\n [DOC_STORE$1, BY_SEQ_STORE$1],\n DOC_STORE_AND_BY_SEQ_JOINER,\n criteria,\n DOC_STORE$1 + '.id ' + (descending ? 'DESC' : 'ASC')\n );\n sql += ' LIMIT ' + limit + ' OFFSET ' + offset;\n\n tx.executeSql(sql, sqlArgs, function (tx, result) {\n for (var i = 0, l = result.rows.length; i < l; i++) {\n var item = result.rows.item(i);\n var metadata = safeJsonParse(item.metadata);\n var id = metadata.id;\n var data = unstringifyDoc(item.data, id, item.rev);\n var winningRev$$1 = data._rev;\n var doc = {\n id: id,\n key: id,\n value: {rev: winningRev$$1}\n };\n if (opts.include_docs) {\n doc.doc = data;\n doc.doc._rev = winningRev$$1;\n if (opts.conflicts) {\n var conflicts = collectConflicts(metadata);\n if (conflicts.length) {\n doc.doc._conflicts = conflicts;\n }\n }\n fetchAttachmentsIfNecessary$1(doc.doc, opts, api, tx);\n }\n if (item.deleted) {\n if (keys) {\n doc.value.deleted = true;\n doc.doc = null;\n } else {\n // propably should not happen\n continue;\n }\n }\n if (!keys) {\n results.push(doc);\n } else {\n var index = keys.indexOf(id, index);\n do {\n results[index] = doc;\n index = keys.indexOf(id, index + 1);\n } while (index > -1 && index < keys.length);\n }\n }\n if (keys) {\n keys.forEach(function (key, index) {\n if (!results[index]) {\n results[index] = {key: key, error: 'not_found'};\n }\n });\n }\n });\n }, websqlError(callback), function () {\n var returnVal = {\n total_rows: totalRows,\n offset: opts.skip,\n rows: results\n };\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n returnVal.update_seq = updateSeq;\n }\n callback(null, returnVal);\n });\n };\n\n api._changes = function (opts) {\n opts = clone(opts);\n\n if (opts.continuous) {\n var id = api._name + ':' + uuid();\n websqlChanges.addListener(api._name, id, api, opts);\n websqlChanges.notify(api._name);\n return {\n cancel: function () {\n websqlChanges.removeListener(api._name, id);\n }\n };\n }\n\n var descending = opts.descending;\n\n // Ignore the `since` parameter when `descending` is true\n opts.since = opts.since && !descending ? opts.since : 0;\n\n var limit = 'limit' in opts ? opts.limit : -1;\n if (limit === 0) {\n limit = 1; // per CouchDB _changes spec\n }\n\n var returnDocs;\n if ('return_docs' in opts) {\n returnDocs = opts.return_docs;\n } else if ('returnDocs' in opts) {\n // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n returnDocs = opts.returnDocs;\n } else {\n returnDocs = true;\n }\n var results = [];\n var numResults = 0;\n\n function fetchChanges() {\n\n var selectStmt =\n DOC_STORE$1 + '.json AS metadata, ' +\n DOC_STORE$1 + '.max_seq AS maxSeq, ' +\n BY_SEQ_STORE$1 + '.json AS winningDoc, ' +\n BY_SEQ_STORE$1 + '.rev AS winningRev ';\n\n var from = DOC_STORE$1 + ' JOIN ' + BY_SEQ_STORE$1;\n\n var joiner = DOC_STORE$1 + '.id=' + BY_SEQ_STORE$1 + '.doc_id' +\n ' AND ' + DOC_STORE$1 + '.winningseq=' + BY_SEQ_STORE$1 + '.seq';\n\n var criteria = ['maxSeq > ?'];\n var sqlArgs = [opts.since];\n\n if (opts.doc_ids) {\n criteria.push(DOC_STORE$1 + '.id IN ' + qMarks(opts.doc_ids.length));\n sqlArgs = sqlArgs.concat(opts.doc_ids);\n }\n\n var orderBy = 'maxSeq ' + (descending ? 'DESC' : 'ASC');\n\n var sql = select(selectStmt, from, joiner, criteria, orderBy);\n\n var filter = filterChange(opts);\n if (!opts.view && !opts.filter) {\n // we can just limit in the query\n sql += ' LIMIT ' + limit;\n }\n\n var lastSeq = opts.since || 0;\n db.readTransaction(function (tx) {\n tx.executeSql(sql, sqlArgs, function (tx, result) {\n function reportChange(change) {\n return function () {\n opts.onChange(change);\n };\n }\n for (var i = 0, l = result.rows.length; i < l; i++) {\n var item = result.rows.item(i);\n var metadata = safeJsonParse(item.metadata);\n lastSeq = item.maxSeq;\n\n var doc = unstringifyDoc(item.winningDoc, metadata.id,\n item.winningRev);\n var change = opts.processChange(doc, metadata, opts);\n change.seq = item.maxSeq;\n\n var filtered = filter(change);\n if (typeof filtered === 'object') {\n return opts.complete(filtered);\n }\n\n if (filtered) {\n numResults++;\n if (returnDocs) {\n results.push(change);\n }\n // process the attachment immediately\n // for the benefit of live listeners\n if (opts.attachments && opts.include_docs) {\n fetchAttachmentsIfNecessary$1(doc, opts, api, tx,\n reportChange(change));\n } else {\n reportChange(change)();\n }\n }\n if (numResults === limit) {\n break;\n }\n }\n });\n }, websqlError(opts.complete), function () {\n if (!opts.continuous) {\n opts.complete(null, {\n results: results,\n last_seq: lastSeq\n });\n }\n });\n }\n\n fetchChanges();\n };\n\n api._close = function (callback) {\n //WebSQL databases do not need to be closed\n callback();\n };\n\n api._getAttachment = function (docId, attachId, attachment, opts, callback) {\n var res;\n var tx = opts.ctx;\n var digest = attachment.digest;\n var type = attachment.content_type;\n var sql = 'SELECT escaped, ' +\n 'CASE WHEN escaped = 1 THEN body ELSE HEX(body) END AS body FROM ' +\n ATTACH_STORE$1 + ' WHERE digest=?';\n tx.executeSql(sql, [digest], function (tx, result) {\n // websql has a bug where \\u0000 causes early truncation in strings\n // and blobs. to work around this, we used to use the hex() function,\n // but that's not performant. after migration 6, we remove \\u0000\n // and add it back in afterwards\n var item = result.rows.item(0);\n var data = item.escaped ? unescapeBlob(item.body) :\n parseHexString(item.body, encoding);\n if (opts.binary) {\n res = binStringToBluffer(data, type);\n } else {\n res = thisBtoa(data);\n }\n callback(null, res);\n });\n };\n\n api._getRevisionTree = function (docId, callback) {\n db.readTransaction(function (tx) {\n var sql = 'SELECT json AS metadata FROM ' + DOC_STORE$1 + ' WHERE id = ?';\n tx.executeSql(sql, [docId], function (tx, result) {\n if (!result.rows.length) {\n callback(createError(MISSING_DOC));\n } else {\n var data = safeJsonParse(result.rows.item(0).metadata);\n callback(null, data.rev_tree);\n }\n });\n });\n };\n\n api._doCompaction = function (docId, revs, callback) {\n if (!revs.length) {\n return callback();\n }\n db.transaction(function (tx) {\n\n // update doc store\n var sql = 'SELECT json AS metadata FROM ' + DOC_STORE$1 + ' WHERE id = ?';\n tx.executeSql(sql, [docId], function (tx, result) {\n var metadata = safeJsonParse(result.rows.item(0).metadata);\n traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n revHash, ctx, opts) {\n var rev$$1 = pos + '-' + revHash;\n if (revs.indexOf(rev$$1) !== -1) {\n opts.status = 'missing';\n }\n });\n\n var sql = 'UPDATE ' + DOC_STORE$1 + ' SET json = ? WHERE id = ?';\n tx.executeSql(sql, [safeJsonStringify(metadata), docId]);\n });\n\n compactRevs$1(revs, docId, tx);\n }, websqlError(callback), function () {\n callback();\n });\n };\n\n api._getLocal = function (id, callback) {\n db.readTransaction(function (tx) {\n var sql = 'SELECT json, rev FROM ' + LOCAL_STORE$1 + ' WHERE id=?';\n tx.executeSql(sql, [id], function (tx, res) {\n if (res.rows.length) {\n var item = res.rows.item(0);\n var doc = unstringifyDoc(item.json, id, item.rev);\n callback(null, doc);\n } else {\n callback(createError(MISSING_DOC));\n }\n });\n });\n };\n\n api._putLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n delete doc._revisions; // ignore this, trust the rev\n var oldRev = doc._rev;\n var id = doc._id;\n var newRev;\n if (!oldRev) {\n newRev = doc._rev = '0-1';\n } else {\n newRev = doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);\n }\n var json = stringifyDoc(doc);\n\n var ret;\n function putLocal(tx) {\n var sql;\n var values;\n if (oldRev) {\n sql = 'UPDATE ' + LOCAL_STORE$1 + ' SET rev=?, json=? ' +\n 'WHERE id=? AND rev=?';\n values = [newRev, json, id, oldRev];\n } else {\n sql = 'INSERT INTO ' + LOCAL_STORE$1 + ' (id, rev, json) VALUES (?,?,?)';\n values = [id, newRev, json];\n }\n tx.executeSql(sql, values, function (tx, res) {\n if (res.rowsAffected) {\n ret = {ok: true, id: id, rev: newRev};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n } else {\n callback(createError(REV_CONFLICT));\n }\n }, function () {\n callback(createError(REV_CONFLICT));\n return false; // ack that we handled the error\n });\n }\n\n if (opts.ctx) {\n putLocal(opts.ctx);\n } else {\n db.transaction(putLocal, websqlError(callback), function () {\n if (ret) {\n callback(null, ret);\n }\n });\n }\n };\n\n api._removeLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var ret;\n\n function removeLocal(tx) {\n var sql = 'DELETE FROM ' + LOCAL_STORE$1 + ' WHERE id=? AND rev=?';\n var params = [doc._id, doc._rev];\n tx.executeSql(sql, params, function (tx, res) {\n if (!res.rowsAffected) {\n return callback(createError(MISSING_DOC));\n }\n ret = {ok: true, id: doc._id, rev: '0-0'};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n });\n }\n\n if (opts.ctx) {\n removeLocal(opts.ctx);\n } else {\n db.transaction(removeLocal, websqlError(callback), function () {\n if (ret) {\n callback(null, ret);\n }\n });\n }\n };\n\n api._destroy = function (opts, callback) {\n websqlChanges.removeAllListeners(api._name);\n db.transaction(function (tx) {\n var stores = [DOC_STORE$1, BY_SEQ_STORE$1, ATTACH_STORE$1, META_STORE$1,\n LOCAL_STORE$1, ATTACH_AND_SEQ_STORE$1];\n stores.forEach(function (store) {\n tx.executeSql('DROP TABLE IF EXISTS ' + store, []);\n });\n }, websqlError(callback), function () {\n if (hasLocalStorage()) {\n delete window.localStorage['_pouch__websqldb_' + api._name];\n delete window.localStorage[api._name];\n }\n callback(null, {'ok': true});\n });\n };\n}\n\nfunction canOpenTestDB() {\n try {\n openDatabase('_pouch_validate_websql', 1, '', 1);\n return true;\n } catch (err) {\n return false;\n }\n}\n\n// WKWebView had a bug where WebSQL would throw a DOM Exception 18\n// (see https://bugs.webkit.org/show_bug.cgi?id=137760 and\n// https://github.com/pouchdb/pouchdb/issues/5079)\n// This has been fixed in latest WebKit, so we try to detect it here.\nfunction isValidWebSQL() {\n // WKWebView UA:\n // Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X)\n // AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13C75\n // Chrome for iOS UA:\n // Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en)\n // AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60\n // Mobile/9B206 Safari/7534.48.3\n // Firefox for iOS UA:\n // Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4\n // (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4\n\n // indexedDB is null on some UIWebViews and undefined in others\n // see: https://bugs.webkit.org/show_bug.cgi?id=137034\n if (typeof indexedDB === 'undefined' || indexedDB === null ||\n !/iP(hone|od|ad)/.test(navigator.userAgent)) {\n // definitely not WKWebView, avoid creating an unnecessary database\n return true;\n }\n // Cache the result in LocalStorage. Reason we do this is because if we\n // call openDatabase() too many times, Safari craps out in SauceLabs and\n // starts throwing DOM Exception 14s.\n var hasLS = hasLocalStorage();\n // Include user agent in the hash, so that if Safari is upgraded, we don't\n // continually think it's broken.\n var localStorageKey = '_pouch__websqldb_valid_' + navigator.userAgent;\n if (hasLS && localStorage[localStorageKey]) {\n return localStorage[localStorageKey] === '1';\n }\n var openedTestDB = canOpenTestDB();\n if (hasLS) {\n localStorage[localStorageKey] = openedTestDB ? '1' : '0';\n }\n return openedTestDB;\n}\n\nfunction valid() {\n if (typeof openDatabase !== 'function') {\n return false;\n }\n return isValidWebSQL();\n}\n\nfunction openDB$2(name, version, description, size) {\n // Traditional WebSQL API\n return openDatabase(name, version, description, size);\n}\n\nfunction WebSQLPouch(opts, callback) {\n var msg = 'WebSQL is deprecated and will be removed in future releases of PouchDB. ' +\n 'Please migrate to IndexedDB: https://pouchdb.com/2018/01/23/pouchdb-6.4.2.html';\n guardedConsole('warn', msg);\n var _opts = $inject_Object_assign({\n websql: openDB$2\n }, opts);\n\n WebSqlPouch.call(this, _opts, callback);\n}\n\nWebSQLPouch.valid = valid;\n\nWebSQLPouch.use_prefix = true;\n\nfunction WebSqlPouch$1 (PouchDB) {\n PouchDB.adapter('websql', WebSQLPouch, true);\n}\n\n/* global fetch */\n/* global Headers */\nfunction wrappedFetch() {\n var wrappedPromise = {};\n\n var promise = new PouchPromise(function (resolve, reject) {\n wrappedPromise.resolve = resolve;\n wrappedPromise.reject = reject;\n });\n\n var args = new Array(arguments.length);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n wrappedPromise.promise = promise;\n\n PouchPromise.resolve().then(function () {\n return fetch.apply(null, args);\n }).then(function (response) {\n wrappedPromise.resolve(response);\n })[\"catch\"](function (error) {\n wrappedPromise.reject(error);\n });\n\n return wrappedPromise;\n}\n\nfunction fetchRequest(options, callback) {\n var wrappedPromise, timer, response;\n\n var headers = new Headers();\n\n var fetchOptions = {\n method: options.method,\n credentials: 'include',\n headers: headers\n };\n\n if (options.json) {\n headers.set('Accept', 'application/json');\n headers.set('Content-Type', options.headers['Content-Type'] ||\n 'application/json');\n }\n\n if (options.body &&\n options.processData &&\n typeof options.body !== 'string') {\n fetchOptions.body = JSON.stringify(options.body);\n } else if ('body' in options) {\n fetchOptions.body = options.body;\n } else {\n fetchOptions.body = null;\n }\n\n Object.keys(options.headers).forEach(function (key) {\n if (options.headers.hasOwnProperty(key)) {\n headers.set(key, options.headers[key]);\n }\n });\n\n wrappedPromise = wrappedFetch(options.url, fetchOptions);\n\n if (options.timeout > 0) {\n timer = setTimeout(function () {\n wrappedPromise.reject(new Error('Load timeout for resource: ' +\n options.url));\n }, options.timeout);\n }\n\n wrappedPromise.promise.then(function (fetchResponse) {\n response = {\n statusCode: fetchResponse.status\n };\n\n if (options.timeout > 0) {\n clearTimeout(timer);\n }\n\n if (response.statusCode >= 200 && response.statusCode < 300) {\n return options.binary ? fetchResponse.blob() : fetchResponse.text();\n }\n\n return fetchResponse.json();\n }).then(function (result) {\n if (response.statusCode >= 200 && response.statusCode < 300) {\n callback(null, response, result);\n } else {\n result.status = response.statusCode;\n callback(result);\n }\n })[\"catch\"](function (error) {\n if (!error) {\n // this happens when the listener is canceled\n error = new Error('canceled');\n }\n callback(error);\n });\n\n return {abort: wrappedPromise.reject};\n}\n\nfunction xhRequest(options, callback) {\n\n var xhr, timer;\n var timedout = false;\n\n var abortReq = function () {\n xhr.abort();\n cleanUp();\n };\n\n var timeoutReq = function () {\n timedout = true;\n xhr.abort();\n cleanUp();\n };\n\n var ret = {abort: abortReq};\n\n var cleanUp = function () {\n clearTimeout(timer);\n ret.abort = function () {};\n if (xhr) {\n xhr.onprogress = undefined;\n if (xhr.upload) {\n xhr.upload.onprogress = undefined;\n }\n xhr.onreadystatechange = undefined;\n xhr = undefined;\n }\n };\n\n if (options.xhr) {\n xhr = new options.xhr();\n } else {\n xhr = new XMLHttpRequest();\n }\n\n try {\n xhr.open(options.method, options.url);\n } catch (exception) {\n return callback(new Error(exception.name || 'Url is invalid'));\n }\n\n xhr.withCredentials = ('withCredentials' in options) ?\n options.withCredentials : true;\n\n if (options.method === 'GET') {\n delete options.headers['Content-Type'];\n } else if (options.json) {\n options.headers.Accept = 'application/json';\n options.headers['Content-Type'] = options.headers['Content-Type'] ||\n 'application/json';\n if (options.body &&\n options.processData &&\n typeof options.body !== \"string\") {\n options.body = JSON.stringify(options.body);\n }\n }\n\n if (options.binary) {\n xhr.responseType = 'arraybuffer';\n }\n\n if (!('body' in options)) {\n options.body = null;\n }\n\n for (var key in options.headers) {\n if (options.headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, options.headers[key]);\n }\n }\n\n if (options.timeout > 0) {\n timer = setTimeout(timeoutReq, options.timeout);\n xhr.onprogress = function () {\n clearTimeout(timer);\n if (xhr.readyState !== 4) {\n timer = setTimeout(timeoutReq, options.timeout);\n }\n };\n if (typeof xhr.upload !== 'undefined') { // does not exist in ie9\n xhr.upload.onprogress = xhr.onprogress;\n }\n }\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState !== 4) {\n return;\n }\n\n var response = {\n statusCode: xhr.status\n };\n\n if (xhr.status >= 200 && xhr.status < 300) {\n var data;\n if (options.binary) {\n data = createBlob([xhr.response || ''], {\n type: xhr.getResponseHeader('Content-Type')\n });\n } else {\n data = xhr.responseText;\n }\n callback(null, response, data);\n } else {\n var err = {};\n if (timedout) {\n err = new Error('ETIMEDOUT');\n err.code = 'ETIMEDOUT';\n } else if (typeof xhr.response === 'string' && xhr.response !== '') {\n try {\n err = JSON.parse(xhr.response);\n } catch (e) {}\n }\n\n err.status = xhr.status;\n\n callback(err);\n }\n cleanUp();\n };\n\n if (options.body && (options.body instanceof Blob)) {\n readAsArrayBuffer(options.body, function (arrayBuffer) {\n xhr.send(arrayBuffer);\n });\n } else {\n xhr.send(options.body);\n }\n\n return ret;\n}\n\nfunction testXhr() {\n try {\n new XMLHttpRequest();\n return true;\n } catch (err) {\n return false;\n }\n}\n\nvar hasXhr = testXhr();\n\nfunction ajax(options, callback) {\n if (!false && (hasXhr || options.xhr)) {\n return xhRequest(options, callback);\n } else {\n return fetchRequest(options, callback);\n }\n}\n\n// the blob already has a type; do nothing\n\nfunction defaultBody() {\n return '';\n}\n\nfunction ajaxCore(options, callback) {\n\n options = clone(options);\n\n var defaultOptions = {\n method : \"GET\",\n headers: {},\n json: true,\n processData: true,\n timeout: 10000,\n cache: false\n };\n\n options = $inject_Object_assign(defaultOptions, options);\n\n function onSuccess(obj, resp, cb) {\n if (!options.binary && options.json && typeof obj === 'string') {\n /* istanbul ignore next */\n try {\n obj = JSON.parse(obj);\n } catch (e) {\n // Probably a malformed JSON from server\n return cb(e);\n }\n }\n if (Array.isArray(obj)) {\n obj = obj.map(function (v) {\n if (v.error || v.missing) {\n return generateErrorFromResponse(v);\n } else {\n return v;\n }\n });\n }\n if (options.binary) {\n \n }\n cb(null, obj, resp);\n }\n\n if (options.json) {\n if (!options.binary) {\n options.headers.Accept = 'application/json';\n }\n options.headers['Content-Type'] = options.headers['Content-Type'] ||\n 'application/json';\n }\n\n if (options.binary) {\n options.encoding = null;\n options.json = false;\n }\n\n if (!options.processData) {\n options.json = false;\n }\n\n return ajax(options, function (err, response, body) {\n\n if (err) {\n return callback(generateErrorFromResponse(err));\n }\n\n var error;\n var content_type = response.headers && response.headers['content-type'];\n var data = body || defaultBody();\n\n // CouchDB doesn't always return the right content-type for JSON data, so\n // we check for ^{ and }$ (ignoring leading/trailing whitespace)\n if (!options.binary && (options.json || !options.processData) &&\n typeof data !== 'object' &&\n (/json/.test(content_type) ||\n (/^[\\s]*\\{/.test(data) && /\\}[\\s]*$/.test(data)))) {\n try {\n data = JSON.parse(data.toString());\n } catch (e) {}\n }\n\n if (response.statusCode >= 200 && response.statusCode < 300) {\n onSuccess(data, response, callback);\n } else {\n error = generateErrorFromResponse(data);\n error.status = response.statusCode;\n callback(error);\n }\n });\n}\n\nfunction ajax$1(opts, callback) {\n\n // cache-buster, specifically designed to work around IE's aggressive caching\n // see http://www.dashbay.com/2011/05/internet-explorer-caches-ajax/\n // Also Safari caches POSTs, so we need to cache-bust those too.\n var ua = (navigator && navigator.userAgent) ?\n navigator.userAgent.toLowerCase() : '';\n\n var isSafari = ua.indexOf('safari') !== -1 && ua.indexOf('chrome') === -1;\n var isIE = ua.indexOf('msie') !== -1;\n var isTrident = ua.indexOf('trident') !== -1;\n var isEdge = ua.indexOf('edge') !== -1;\n\n // it appears the new version of safari also caches GETs,\n // see https://github.com/pouchdb/pouchdb/issues/5010\n var shouldCacheBust = (isSafari ||\n ((isIE || isTrident || isEdge) && opts.method === 'GET'));\n\n var cache = 'cache' in opts ? opts.cache : true;\n\n var isBlobUrl = /^blob:/.test(opts.url); // don't append nonces for blob URLs\n\n if (!isBlobUrl && (shouldCacheBust || !cache)) {\n var hasArgs = opts.url.indexOf('?') !== -1;\n opts.url += (hasArgs ? '&' : '?') + '_nonce=' + Date.now();\n }\n\n return ajaxCore(opts, callback);\n}\n\n// dead simple promise pool, inspired by https://github.com/timdp/es6-promise-pool\n// but much smaller in code size. limits the number of concurrent promises that are executed\n\n\nfunction pool(promiseFactories, limit) {\n return new PouchPromise(function (resolve, reject) {\n var running = 0;\n var current = 0;\n var done = 0;\n var len = promiseFactories.length;\n var err;\n\n function runNext() {\n running++;\n promiseFactories[current++]().then(onSuccess, onError);\n }\n\n function doNext() {\n if (++done === len) {\n /* istanbul ignore if */\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n } else {\n runNextBatch();\n }\n }\n\n function onSuccess() {\n running--;\n doNext();\n }\n\n /* istanbul ignore next */\n function onError(thisErr) {\n running--;\n err = err || thisErr;\n doNext();\n }\n\n function runNextBatch() {\n while (running < limit && current < len) {\n runNext();\n }\n }\n\n runNextBatch();\n });\n}\n\nvar CHANGES_BATCH_SIZE = 25;\nvar MAX_SIMULTANEOUS_REVS = 50;\nvar CHANGES_TIMEOUT_BUFFER = 5000;\nvar DEFAULT_HEARTBEAT = 10000;\n\nvar supportsBulkGetMap = {};\n\nfunction readAttachmentsAsBlobOrBuffer(row) {\n var doc = row.doc || row.ok;\n var atts = doc._attachments;\n if (!atts) {\n return;\n }\n Object.keys(atts).forEach(function (filename) {\n var att = atts[filename];\n att.data = b64ToBluffer(att.data, att.content_type);\n });\n}\n\nfunction encodeDocId(id) {\n if (/^_design/.test(id)) {\n return '_design/' + encodeURIComponent(id.slice(8));\n }\n if (/^_local/.test(id)) {\n return '_local/' + encodeURIComponent(id.slice(7));\n }\n return encodeURIComponent(id);\n}\n\nfunction preprocessAttachments$2(doc) {\n if (!doc._attachments || !Object.keys(doc._attachments)) {\n return PouchPromise.resolve();\n }\n\n return PouchPromise.all(Object.keys(doc._attachments).map(function (key) {\n var attachment = doc._attachments[key];\n if (attachment.data && typeof attachment.data !== 'string') {\n return new PouchPromise(function (resolve) {\n blobToBase64(attachment.data, resolve);\n }).then(function (b64) {\n attachment.data = b64;\n });\n }\n }));\n}\n\nfunction hasUrlPrefix(opts) {\n if (!opts.prefix) {\n return false;\n }\n\n var protocol = parseUri(opts.prefix).protocol;\n\n return protocol === 'http' || protocol === 'https';\n}\n\n// Get all the information you possibly can about the URI given by name and\n// return it as a suitable object.\nfunction getHost(name, opts) {\n\n // encode db name if opts.prefix is a url (#5574)\n if (hasUrlPrefix(opts)) {\n var dbName = opts.name.substr(opts.prefix.length);\n name = opts.prefix + encodeURIComponent(dbName);\n }\n\n // Prase the URI into all its little bits\n var uri = parseUri(name);\n\n // Store the user and password as a separate auth object\n if (uri.user || uri.password) {\n uri.auth = {username: uri.user, password: uri.password};\n }\n\n // Split the path part of the URI into parts using '/' as the delimiter\n // after removing any leading '/' and any trailing '/'\n var parts = uri.path.replace(/(^\\/|\\/$)/g, '').split('/');\n\n // Store the first part as the database name and remove it from the parts\n // array\n uri.db = parts.pop();\n // Prevent double encoding of URI component\n if (uri.db.indexOf('%') === -1) {\n uri.db = encodeURIComponent(uri.db);\n }\n\n // Restore the path by joining all the remaining parts (all the parts\n // except for the database name) with '/'s\n uri.path = parts.join('/');\n\n return uri;\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genDBUrl(opts, path) {\n return genUrl(opts, opts.db + '/' + path);\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genUrl(opts, path) {\n // If the host already has a path, then we need to have a path delimiter\n // Otherwise, the path delimiter is the empty string\n var pathDel = !opts.path ? '' : '/';\n\n // If the host already has a path, then we need to have a path delimiter\n // Otherwise, the path delimiter is the empty string\n return opts.protocol + '://' + opts.host +\n (opts.port ? (':' + opts.port) : '') +\n '/' + opts.path + pathDel + path;\n}\n\nfunction paramsToStr(params) {\n return '?' + Object.keys(params).map(function (k) {\n return k + '=' + encodeURIComponent(params[k]);\n }).join('&');\n}\n\n// Implements the PouchDB API for dealing with CouchDB instances over HTTP\nfunction HttpPouch(opts, callback) {\n\n // The functions that will be publicly available for HttpPouch\n var api = this;\n\n var host = getHost(opts.name, opts);\n var dbUrl = genDBUrl(host, '');\n\n opts = clone(opts);\n var ajaxOpts = opts.ajax || {};\n\n if (opts.auth || host.auth) {\n var nAuth = opts.auth || host.auth;\n var str = nAuth.username + ':' + nAuth.password;\n var token = thisBtoa(unescape(encodeURIComponent(str)));\n ajaxOpts.headers = ajaxOpts.headers || {};\n ajaxOpts.headers.Authorization = 'Basic ' + token;\n }\n\n // Not strictly necessary, but we do this because numerous tests\n // rely on swapping ajax in and out.\n api._ajax = ajax$1;\n\n function ajax(userOpts, options, callback) {\n var reqAjax = (userOpts || {}).ajax || {};\n var reqOpts = $inject_Object_assign(clone(ajaxOpts), reqAjax, options);\n var defaultHeaders = clone(ajaxOpts.headers || {});\n reqOpts.headers = $inject_Object_assign(defaultHeaders, reqAjax.headers,\n options.headers || {});\n /* istanbul ignore if */\n if (api.constructor.listeners('debug').length) {\n api.constructor.emit('debug', ['http', reqOpts.method, reqOpts.url]);\n }\n return api._ajax(reqOpts, callback);\n }\n\n function ajaxPromise(userOpts, opts) {\n return new PouchPromise(function (resolve, reject) {\n ajax(userOpts, opts, function (err, res) {\n /* istanbul ignore if */\n if (err) {\n return reject(err);\n }\n resolve(res);\n });\n });\n }\n\n function adapterFun$$1(name, fun) {\n return adapterFun(name, getArguments(function (args) {\n setup().then(function () {\n return fun.apply(this, args);\n })[\"catch\"](function (e) {\n var callback = args.pop();\n callback(e);\n });\n }));\n }\n\n var setupPromise;\n\n function setup() {\n // TODO: Remove `skipSetup` in favor of `skip_setup` in a future release\n if (opts.skipSetup || opts.skip_setup) {\n return PouchPromise.resolve();\n }\n\n // If there is a setup in process or previous successful setup\n // done then we will use that\n // If previous setups have been rejected we will try again\n if (setupPromise) {\n return setupPromise;\n }\n\n var checkExists = {method: 'GET', url: dbUrl};\n setupPromise = ajaxPromise({}, checkExists)[\"catch\"](function (err) {\n if (err && err.status && err.status === 404) {\n // Doesnt exist, create it\n explainError(404, 'PouchDB is just detecting if the remote exists.');\n return ajaxPromise({}, {method: 'PUT', url: dbUrl});\n } else {\n return PouchPromise.reject(err);\n }\n })[\"catch\"](function (err) {\n // If we try to create a database that already exists, skipped in\n // istanbul since its catching a race condition.\n /* istanbul ignore if */\n if (err && err.status && err.status === 412) {\n return true;\n }\n return PouchPromise.reject(err);\n });\n\n setupPromise[\"catch\"](function () {\n setupPromise = null;\n });\n\n return setupPromise;\n }\n\n nextTick(function () {\n callback(null, api);\n });\n\n api._remote = true;\n /* istanbul ignore next */\n api.type = function () {\n return 'http';\n };\n\n api.id = adapterFun$$1('id', function (callback) {\n ajax({}, {method: 'GET', url: genUrl(host, '')}, function (err, result) {\n var uuid$$1 = (result && result.uuid) ?\n (result.uuid + host.db) : genDBUrl(host, '');\n callback(null, uuid$$1);\n });\n });\n\n api.request = adapterFun$$1('request', function (options, callback) {\n options.url = genDBUrl(host, options.url);\n ajax({}, options, callback);\n });\n\n // Sends a POST request to the host calling the couchdb _compact function\n // version: The version of CouchDB it is running\n api.compact = adapterFun$$1('compact', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n ajax(opts, {\n url: genDBUrl(host, '_compact'),\n method: 'POST'\n }, function () {\n function ping() {\n api.info(function (err, res) {\n // CouchDB may send a \"compact_running:true\" if it's\n // already compacting. PouchDB Server doesn't.\n /* istanbul ignore else */\n if (res && !res.compact_running) {\n callback(null, {ok: true});\n } else {\n setTimeout(ping, opts.interval || 200);\n }\n });\n }\n // Ping the http if it's finished compaction\n ping();\n });\n });\n\n api.bulkGet = adapterFun('bulkGet', function (opts, callback) {\n var self = this;\n\n function doBulkGet(cb) {\n var params = {};\n if (opts.revs) {\n params.revs = true;\n }\n if (opts.attachments) {\n /* istanbul ignore next */\n params.attachments = true;\n }\n if (opts.latest) {\n params.latest = true;\n }\n ajax(opts, {\n url: genDBUrl(host, '_bulk_get' + paramsToStr(params)),\n method: 'POST',\n body: { docs: opts.docs}\n }, function (err, result) {\n if (!err && opts.attachments && opts.binary) {\n result.results.forEach(function (res) {\n res.docs.forEach(readAttachmentsAsBlobOrBuffer);\n });\n }\n cb(err, result);\n });\n }\n\n /* istanbul ignore next */\n function doBulkGetShim() {\n // avoid \"url too long error\" by splitting up into multiple requests\n var batchSize = MAX_SIMULTANEOUS_REVS;\n var numBatches = Math.ceil(opts.docs.length / batchSize);\n var numDone = 0;\n var results = new Array(numBatches);\n\n function onResult(batchNum) {\n return function (err, res) {\n // err is impossible because shim returns a list of errs in that case\n results[batchNum] = res.results;\n if (++numDone === numBatches) {\n callback(null, {results: flatten(results)});\n }\n };\n }\n\n for (var i = 0; i < numBatches; i++) {\n var subOpts = pick(opts, ['revs', 'attachments', 'binary', 'latest']);\n subOpts.ajax = ajaxOpts;\n subOpts.docs = opts.docs.slice(i * batchSize,\n Math.min(opts.docs.length, (i + 1) * batchSize));\n bulkGet(self, subOpts, onResult(i));\n }\n }\n\n // mark the whole database as either supporting or not supporting _bulk_get\n var dbUrl = genUrl(host, '');\n var supportsBulkGet = supportsBulkGetMap[dbUrl];\n\n /* istanbul ignore next */\n if (typeof supportsBulkGet !== 'boolean') {\n // check if this database supports _bulk_get\n doBulkGet(function (err, res) {\n if (err) {\n supportsBulkGetMap[dbUrl] = false;\n explainError(\n err.status,\n 'PouchDB is just detecting if the remote ' +\n 'supports the _bulk_get API.'\n );\n doBulkGetShim();\n } else {\n supportsBulkGetMap[dbUrl] = true;\n callback(null, res);\n }\n });\n } else if (supportsBulkGet) {\n doBulkGet(callback);\n } else {\n doBulkGetShim();\n }\n });\n\n // Calls GET on the host, which gets back a JSON string containing\n // couchdb: A welcome string\n // version: The version of CouchDB it is running\n api._info = function (callback) {\n setup().then(function () {\n ajax({}, {\n method: 'GET',\n url: genDBUrl(host, '')\n }, function (err, res) {\n /* istanbul ignore next */\n if (err) {\n return callback(err);\n }\n res.host = genDBUrl(host, '');\n callback(null, res);\n });\n })[\"catch\"](callback);\n };\n\n // Get the document with the given id from the database given by host.\n // The id could be solely the _id in the database, or it may be a\n // _design/ID or _local/ID path\n api.get = adapterFun$$1('get', function (id, opts, callback) {\n // If no options were given, set the callback to the second parameter\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n\n // List of parameters to add to the GET request\n var params = {};\n\n if (opts.revs) {\n params.revs = true;\n }\n\n if (opts.revs_info) {\n params.revs_info = true;\n }\n\n if (opts.latest) {\n params.latest = true;\n }\n\n if (opts.open_revs) {\n if (opts.open_revs !== \"all\") {\n opts.open_revs = JSON.stringify(opts.open_revs);\n }\n params.open_revs = opts.open_revs;\n }\n\n if (opts.rev) {\n params.rev = opts.rev;\n }\n\n if (opts.conflicts) {\n params.conflicts = opts.conflicts;\n }\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = opts.update_seq;\n }\n\n id = encodeDocId(id);\n\n // Set the options for the ajax call\n var options = {\n method: 'GET',\n url: genDBUrl(host, id + paramsToStr(params))\n };\n\n function fetchAttachments(doc) {\n var atts = doc._attachments;\n var filenames = atts && Object.keys(atts);\n if (!atts || !filenames.length) {\n return;\n }\n // we fetch these manually in separate XHRs, because\n // Sync Gateway would normally send it back as multipart/mixed,\n // which we cannot parse. Also, this is more efficient than\n // receiving attachments as base64-encoded strings.\n function fetch(filename) {\n var att = atts[filename];\n var path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +\n '?rev=' + doc._rev;\n return ajaxPromise(opts, {\n method: 'GET',\n url: genDBUrl(host, path),\n binary: true\n }).then(function (blob) {\n if (opts.binary) {\n return blob;\n }\n return new PouchPromise(function (resolve) {\n blobToBase64(blob, resolve);\n });\n }).then(function (data) {\n delete att.stub;\n delete att.length;\n att.data = data;\n });\n }\n\n var promiseFactories = filenames.map(function (filename) {\n return function () {\n return fetch(filename);\n };\n });\n\n // This limits the number of parallel xhr requests to 5 any time\n // to avoid issues with maximum browser request limits\n return pool(promiseFactories, 5);\n }\n\n function fetchAllAttachments(docOrDocs) {\n if (Array.isArray(docOrDocs)) {\n return PouchPromise.all(docOrDocs.map(function (doc) {\n if (doc.ok) {\n return fetchAttachments(doc.ok);\n }\n }));\n }\n return fetchAttachments(docOrDocs);\n }\n\n ajaxPromise(opts, options).then(function (res) {\n return PouchPromise.resolve().then(function () {\n if (opts.attachments) {\n return fetchAllAttachments(res);\n }\n }).then(function () {\n callback(null, res);\n });\n })[\"catch\"](function (e) {\n e.docId = id;\n callback(e);\n });\n });\n\n // Delete the document given by doc from the database given by host.\n api.remove = adapterFun$$1('remove',\n function (docOrId, optsOrRev, opts, callback) {\n var doc;\n if (typeof optsOrRev === 'string') {\n // id, rev, opts, callback style\n doc = {\n _id: docOrId,\n _rev: optsOrRev\n };\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n } else {\n // doc, opts, callback style\n doc = docOrId;\n if (typeof optsOrRev === 'function') {\n callback = optsOrRev;\n opts = {};\n } else {\n callback = opts;\n opts = optsOrRev;\n }\n }\n\n var rev$$1 = (doc._rev || opts.rev);\n\n // Delete the document\n ajax(opts, {\n method: 'DELETE',\n url: genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev$$1\n }, callback);\n });\n\n function encodeAttachmentId(attachmentId) {\n return attachmentId.split(\"/\").map(encodeURIComponent).join(\"/\");\n }\n\n // Get the attachment\n api.getAttachment =\n adapterFun$$1('getAttachment', function (docId, attachmentId, opts,\n callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var params = opts.rev ? ('?rev=' + opts.rev) : '';\n var url = genDBUrl(host, encodeDocId(docId)) + '/' +\n encodeAttachmentId(attachmentId) + params;\n ajax(opts, {\n method: 'GET',\n url: url,\n binary: true\n }, callback);\n });\n\n // Remove the attachment given by the id and rev\n api.removeAttachment =\n adapterFun$$1('removeAttachment', function (docId, attachmentId, rev$$1,\n callback) {\n\n var url = genDBUrl(host, encodeDocId(docId) + '/' +\n encodeAttachmentId(attachmentId)) + '?rev=' + rev$$1;\n\n ajax({}, {\n method: 'DELETE',\n url: url\n }, callback);\n });\n\n // Add the attachment given by blob and its contentType property\n // to the document with the given id, the revision given by rev, and\n // add it to the database given by host.\n api.putAttachment =\n adapterFun$$1('putAttachment', function (docId, attachmentId, rev$$1, blob,\n type, callback) {\n if (typeof type === 'function') {\n callback = type;\n type = blob;\n blob = rev$$1;\n rev$$1 = null;\n }\n var id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);\n var url = genDBUrl(host, id);\n if (rev$$1) {\n url += '?rev=' + rev$$1;\n }\n\n if (typeof blob === 'string') {\n // input is assumed to be a base64 string\n var binary;\n try {\n binary = thisAtob(blob);\n } catch (err) {\n return callback(createError(BAD_ARG,\n 'Attachment is not a valid base64 string'));\n }\n blob = binary ? binStringToBluffer(binary, type) : '';\n }\n\n var opts = {\n headers: {'Content-Type': type},\n method: 'PUT',\n url: url,\n processData: false,\n body: blob,\n timeout: ajaxOpts.timeout || 60000\n };\n // Add the attachment\n ajax({}, opts, callback);\n });\n\n // Update/create multiple documents given by req in the database\n // given by host.\n api._bulkDocs = function (req, opts, callback) {\n // If new_edits=false then it prevents the database from creating\n // new revision numbers for the documents. Instead it just uses\n // the old ones. This is used in database replication.\n req.new_edits = opts.new_edits;\n\n setup().then(function () {\n return PouchPromise.all(req.docs.map(preprocessAttachments$2));\n }).then(function () {\n // Update/create the documents\n ajax(opts, {\n method: 'POST',\n url: genDBUrl(host, '_bulk_docs'),\n timeout: opts.timeout,\n body: req\n }, function (err, results) {\n if (err) {\n return callback(err);\n }\n results.forEach(function (result) {\n result.ok = true; // smooths out cloudant not adding this\n });\n callback(null, results);\n });\n })[\"catch\"](callback);\n };\n\n\n // Update/create document\n api._put = function (doc, opts, callback) {\n setup().then(function () {\n return preprocessAttachments$2(doc);\n }).then(function () {\n // Update/create the document\n ajax(opts, {\n method: 'PUT',\n url: genDBUrl(host, encodeDocId(doc._id)),\n body: doc\n }, function (err, result) {\n if (err) {\n err.docId = doc && doc._id;\n return callback(err);\n }\n callback(null, result);\n });\n })[\"catch\"](callback);\n };\n\n\n // Get a listing of the documents in the database given\n // by host and ordered by increasing id.\n api.allDocs = adapterFun$$1('allDocs', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n\n // List of parameters to add to the GET request\n var params = {};\n var body;\n var method = 'GET';\n\n if (opts.conflicts) {\n params.conflicts = true;\n }\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = true;\n }\n\n if (opts.descending) {\n params.descending = true;\n }\n\n if (opts.include_docs) {\n params.include_docs = true;\n }\n\n // added in CouchDB 1.6.0\n if (opts.attachments) {\n params.attachments = true;\n }\n\n if (opts.key) {\n params.key = JSON.stringify(opts.key);\n }\n\n if (opts.start_key) {\n opts.startkey = opts.start_key;\n }\n\n if (opts.startkey) {\n params.startkey = JSON.stringify(opts.startkey);\n }\n\n if (opts.end_key) {\n opts.endkey = opts.end_key;\n }\n\n if (opts.endkey) {\n params.endkey = JSON.stringify(opts.endkey);\n }\n\n if (typeof opts.inclusive_end !== 'undefined') {\n params.inclusive_end = !!opts.inclusive_end;\n }\n\n if (typeof opts.limit !== 'undefined') {\n params.limit = opts.limit;\n }\n\n if (typeof opts.skip !== 'undefined') {\n params.skip = opts.skip;\n }\n\n var paramStr = paramsToStr(params);\n\n if (typeof opts.keys !== 'undefined') {\n method = 'POST';\n body = {keys: opts.keys};\n }\n\n // Get the document listing\n ajaxPromise(opts, {\n method: method,\n url: genDBUrl(host, '_all_docs' + paramStr),\n body: body\n }).then(function (res) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n res.rows.forEach(readAttachmentsAsBlobOrBuffer);\n }\n callback(null, res);\n })[\"catch\"](callback);\n });\n\n // Get a list of changes made to documents in the database given by host.\n // TODO According to the README, there should be two other methods here,\n // api.changes.addListener and api.changes.removeListener.\n api._changes = function (opts) {\n\n // We internally page the results of a changes request, this means\n // if there is a large set of changes to be returned we can start\n // processing them quicker instead of waiting on the entire\n // set of changes to return and attempting to process them at once\n var batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;\n\n opts = clone(opts);\n\n if (opts.continuous && !('heartbeat' in opts)) {\n opts.heartbeat = DEFAULT_HEARTBEAT;\n }\n\n var requestTimeout = ('timeout' in opts) ? opts.timeout :\n ('timeout' in ajaxOpts) ? ajaxOpts.timeout :\n 30 * 1000;\n\n // ensure CHANGES_TIMEOUT_BUFFER applies\n if ('timeout' in opts && opts.timeout &&\n (requestTimeout - opts.timeout) < CHANGES_TIMEOUT_BUFFER) {\n requestTimeout = opts.timeout + CHANGES_TIMEOUT_BUFFER;\n }\n\n if ('heartbeat' in opts && opts.heartbeat &&\n (requestTimeout - opts.heartbeat) < CHANGES_TIMEOUT_BUFFER) {\n requestTimeout = opts.heartbeat + CHANGES_TIMEOUT_BUFFER;\n }\n\n var params = {};\n if ('timeout' in opts && opts.timeout) {\n params.timeout = opts.timeout;\n }\n\n var limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;\n var returnDocs;\n if ('return_docs' in opts) {\n returnDocs = opts.return_docs;\n } else if ('returnDocs' in opts) {\n // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n returnDocs = opts.returnDocs;\n } else {\n returnDocs = true;\n }\n //\n var leftToFetch = limit;\n\n if (opts.style) {\n params.style = opts.style;\n }\n\n if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {\n params.include_docs = true;\n }\n\n if (opts.attachments) {\n params.attachments = true;\n }\n\n if (opts.continuous) {\n params.feed = 'longpoll';\n }\n\n if (opts.seq_interval) {\n params.seq_interval = opts.seq_interval;\n }\n\n if (opts.conflicts) {\n params.conflicts = true;\n }\n\n if (opts.descending) {\n params.descending = true;\n }\n \n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = true;\n }\n\n if ('heartbeat' in opts) {\n // If the heartbeat value is false, it disables the default heartbeat\n if (opts.heartbeat) {\n params.heartbeat = opts.heartbeat;\n }\n }\n\n if (opts.filter && typeof opts.filter === 'string') {\n params.filter = opts.filter;\n }\n\n if (opts.view && typeof opts.view === 'string') {\n params.filter = '_view';\n params.view = opts.view;\n }\n\n // If opts.query_params exists, pass it through to the changes request.\n // These parameters may be used by the filter on the source database.\n if (opts.query_params && typeof opts.query_params === 'object') {\n for (var param_name in opts.query_params) {\n /* istanbul ignore else */\n if (opts.query_params.hasOwnProperty(param_name)) {\n params[param_name] = opts.query_params[param_name];\n }\n }\n }\n\n var method = 'GET';\n var body;\n\n if (opts.doc_ids) {\n // set this automagically for the user; it's annoying that couchdb\n // requires both a \"filter\" and a \"doc_ids\" param.\n params.filter = '_doc_ids';\n method = 'POST';\n body = {doc_ids: opts.doc_ids };\n }\n /* istanbul ignore next */\n else if (opts.selector) {\n // set this automagically for the user, similar to above\n params.filter = '_selector';\n method = 'POST';\n body = {selector: opts.selector };\n }\n\n var xhr;\n var lastFetchedSeq;\n\n // Get all the changes starting wtih the one immediately after the\n // sequence number given by since.\n var fetch = function (since, callback) {\n if (opts.aborted) {\n return;\n }\n params.since = since;\n // \"since\" can be any kind of json object in Coudant/CouchDB 2.x\n /* istanbul ignore next */\n if (typeof params.since === \"object\") {\n params.since = JSON.stringify(params.since);\n }\n\n if (opts.descending) {\n if (limit) {\n params.limit = leftToFetch;\n }\n } else {\n params.limit = (!limit || leftToFetch > batchSize) ?\n batchSize : leftToFetch;\n }\n\n // Set the options for the ajax call\n var xhrOpts = {\n method: method,\n url: genDBUrl(host, '_changes' + paramsToStr(params)),\n timeout: requestTimeout,\n body: body\n };\n lastFetchedSeq = since;\n\n /* istanbul ignore if */\n if (opts.aborted) {\n return;\n }\n\n // Get the changes\n setup().then(function () {\n xhr = ajax(opts, xhrOpts, callback);\n })[\"catch\"](callback);\n };\n\n // If opts.since exists, get all the changes from the sequence\n // number given by opts.since. Otherwise, get all the changes\n // from the sequence number 0.\n var results = {results: []};\n\n var fetched = function (err, res) {\n if (opts.aborted) {\n return;\n }\n var raw_results_length = 0;\n // If the result of the ajax call (res) contains changes (res.results)\n if (res && res.results) {\n raw_results_length = res.results.length;\n results.last_seq = res.last_seq;\n var pending = null;\n var lastSeq = null;\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof res.pending === 'number') {\n pending = res.pending;\n }\n if (typeof results.last_seq === 'string' || typeof results.last_seq === 'number') {\n lastSeq = results.last_seq;\n }\n // For each change\n var req = {};\n req.query = opts.query_params;\n res.results = res.results.filter(function (c) {\n leftToFetch--;\n var ret = filterChange(opts)(c);\n if (ret) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n readAttachmentsAsBlobOrBuffer(c);\n }\n if (returnDocs) {\n results.results.push(c);\n }\n opts.onChange(c, pending, lastSeq);\n }\n return ret;\n });\n } else if (err) {\n // In case of an error, stop listening for changes and call\n // opts.complete\n opts.aborted = true;\n opts.complete(err);\n return;\n }\n\n // The changes feed may have timed out with no results\n // if so reuse last update sequence\n if (res && res.last_seq) {\n lastFetchedSeq = res.last_seq;\n }\n\n var finished = (limit && leftToFetch <= 0) ||\n (res && raw_results_length < batchSize) ||\n (opts.descending);\n\n if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {\n // Queue a call to fetch again with the newest sequence number\n nextTick(function () { fetch(lastFetchedSeq, fetched); });\n } else {\n // We're done, call the callback\n opts.complete(null, results);\n }\n };\n\n fetch(opts.since || 0, fetched);\n\n // Return a method to cancel this method from processing any more\n return {\n cancel: function () {\n opts.aborted = true;\n if (xhr) {\n xhr.abort();\n }\n }\n };\n };\n\n // Given a set of document/revision IDs (given by req), tets the subset of\n // those that do NOT correspond to revisions stored in the database.\n // See http://wiki.apache.org/couchdb/HttpPostRevsDiff\n api.revsDiff = adapterFun$$1('revsDiff', function (req, opts, callback) {\n // If no options were given, set the callback to be the second parameter\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n // Get the missing document/revision IDs\n ajax(opts, {\n method: 'POST',\n url: genDBUrl(host, '_revs_diff'),\n body: req\n }, callback);\n });\n\n api._close = function (callback) {\n callback();\n };\n\n api._destroy = function (options, callback) {\n ajax(options, {\n url: genDBUrl(host, ''),\n method: 'DELETE'\n }, function (err, resp) {\n if (err && err.status && err.status !== 404) {\n return callback(err);\n }\n callback(null, resp);\n });\n };\n}\n\n// HttpPouch is a valid adapter.\nHttpPouch.valid = function () {\n return true;\n};\n\nfunction HttpPouch$1 (PouchDB) {\n PouchDB.adapter('http', HttpPouch, false);\n PouchDB.adapter('https', HttpPouch, false);\n}\n\nfunction QueryParseError(message) {\n this.status = 400;\n this.name = 'query_parse_error';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, QueryParseError);\n } catch (e) {}\n}\n\ninherits(QueryParseError, Error);\n\nfunction NotFoundError(message) {\n this.status = 404;\n this.name = 'not_found';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, NotFoundError);\n } catch (e) {}\n}\n\ninherits(NotFoundError, Error);\n\nfunction BuiltInError(message) {\n this.status = 500;\n this.name = 'invalid_value';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, BuiltInError);\n } catch (e) {}\n}\n\ninherits(BuiltInError, Error);\n\nfunction promisedCallback(promise, callback) {\n if (callback) {\n promise.then(function (res) {\n nextTick(function () {\n callback(null, res);\n });\n }, function (reason) {\n nextTick(function () {\n callback(reason);\n });\n });\n }\n return promise;\n}\n\nfunction callbackify(fun) {\n return getArguments(function (args) {\n var cb = args.pop();\n var promise = fun.apply(this, args);\n if (typeof cb === 'function') {\n promisedCallback(promise, cb);\n }\n return promise;\n });\n}\n\n// Promise finally util similar to Q.finally\nfunction fin(promise, finalPromiseFactory) {\n return promise.then(function (res) {\n return finalPromiseFactory().then(function () {\n return res;\n });\n }, function (reason) {\n return finalPromiseFactory().then(function () {\n throw reason;\n });\n });\n}\n\nfunction sequentialize(queue, promiseFactory) {\n return function () {\n var args = arguments;\n var that = this;\n return queue.add(function () {\n return promiseFactory.apply(that, args);\n });\n };\n}\n\n// uniq an array of strings, order not guaranteed\n// similar to underscore/lodash _.uniq\nfunction uniq(arr) {\n var theSet = new ExportedSet(arr);\n var result = new Array(theSet.size);\n var index = -1;\n theSet.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n\nfunction mapToKeysArray(map) {\n var result = new Array(map.size);\n var index = -1;\n map.forEach(function (value, key) {\n result[++index] = key;\n });\n return result;\n}\n\nfunction createBuiltInError(name) {\n var message = 'builtin ' + name +\n ' function requires map values to be numbers' +\n ' or number arrays';\n return new BuiltInError(message);\n}\n\nfunction sum(values) {\n var result = 0;\n for (var i = 0, len = values.length; i < len; i++) {\n var num = values[i];\n if (typeof num !== 'number') {\n if (Array.isArray(num)) {\n // lists of numbers are also allowed, sum them separately\n result = typeof result === 'number' ? [result] : result;\n for (var j = 0, jLen = num.length; j < jLen; j++) {\n var jNum = num[j];\n if (typeof jNum !== 'number') {\n throw createBuiltInError('_sum');\n } else if (typeof result[j] === 'undefined') {\n result.push(jNum);\n } else {\n result[j] += jNum;\n }\n }\n } else { // not array/number\n throw createBuiltInError('_sum');\n }\n } else if (typeof result === 'number') {\n result += num;\n } else { // add number to array\n result[0] += num;\n }\n }\n return result;\n}\n\nvar log = guardedConsole.bind(null, 'log');\nvar isArray = Array.isArray;\nvar toJSON = JSON.parse;\n\nfunction evalFunctionWithEval(func, emit) {\n return scopeEval(\n \"return (\" + func.replace(/;\\s*$/, \"\") + \");\",\n {\n emit: emit,\n sum: sum,\n log: log,\n isArray: isArray,\n toJSON: toJSON\n }\n );\n}\n\n/*\n * Simple task queue to sequentialize actions. Assumes\n * callbacks will eventually fire (once).\n */\n\n\nfunction TaskQueue$2() {\n this.promise = new PouchPromise(function (fulfill) {fulfill(); });\n}\nTaskQueue$2.prototype.add = function (promiseFactory) {\n this.promise = this.promise[\"catch\"](function () {\n // just recover\n }).then(function () {\n return promiseFactory();\n });\n return this.promise;\n};\nTaskQueue$2.prototype.finish = function () {\n return this.promise;\n};\n\nfunction stringify(input) {\n if (!input) {\n return 'undefined'; // backwards compat for empty reduce\n }\n // for backwards compat with mapreduce, functions/strings are stringified\n // as-is. everything else is JSON-stringified.\n switch (typeof input) {\n case 'function':\n // e.g. a mapreduce map\n return input.toString();\n case 'string':\n // e.g. a mapreduce built-in _reduce function\n return input.toString();\n default:\n // e.g. a JSON object in the case of mango queries\n return JSON.stringify(input);\n }\n}\n\n/* create a string signature for a view so we can cache it and uniq it */\nfunction createViewSignature(mapFun, reduceFun) {\n // the \"undefined\" part is for backwards compatibility\n return stringify(mapFun) + stringify(reduceFun) + 'undefined';\n}\n\nfunction createView(sourceDB, viewName, mapFun, reduceFun, temporary, localDocName) {\n var viewSignature = createViewSignature(mapFun, reduceFun);\n\n var cachedViews;\n if (!temporary) {\n // cache this to ensure we don't try to update the same view twice\n cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};\n if (cachedViews[viewSignature]) {\n return cachedViews[viewSignature];\n }\n }\n\n var promiseForView = sourceDB.info().then(function (info) {\n\n var depDbName = info.db_name + '-mrview-' +\n (temporary ? 'temp' : stringMd5(viewSignature));\n\n // save the view name in the source db so it can be cleaned up if necessary\n // (e.g. when the _design doc is deleted, remove all associated view data)\n function diffFunction(doc) {\n doc.views = doc.views || {};\n var fullViewName = viewName;\n if (fullViewName.indexOf('/') === -1) {\n fullViewName = viewName + '/' + viewName;\n }\n var depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};\n /* istanbul ignore if */\n if (depDbs[depDbName]) {\n return; // no update necessary\n }\n depDbs[depDbName] = true;\n return doc;\n }\n return upsert(sourceDB, '_local/' + localDocName, diffFunction).then(function () {\n return sourceDB.registerDependentDatabase(depDbName).then(function (res) {\n var db = res.db;\n db.auto_compaction = true;\n var view = {\n name: depDbName,\n db: db,\n sourceDB: sourceDB,\n adapter: sourceDB.adapter,\n mapFun: mapFun,\n reduceFun: reduceFun\n };\n return view.db.get('_local/lastSeq')[\"catch\"](function (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n throw err;\n }\n }).then(function (lastSeqDoc) {\n view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;\n if (cachedViews) {\n view.db.once('destroyed', function () {\n delete cachedViews[viewSignature];\n });\n }\n return view;\n });\n });\n });\n });\n\n if (cachedViews) {\n cachedViews[viewSignature] = promiseForView;\n }\n return promiseForView;\n}\n\nvar persistentQueues = {};\nvar tempViewQueue = new TaskQueue$2();\nvar CHANGES_BATCH_SIZE$1 = 50;\n\nfunction parseViewName(name) {\n // can be either 'ddocname/viewname' or just 'viewname'\n // (where the ddoc name is the same)\n return name.indexOf('/') === -1 ? [name, name] : name.split('/');\n}\n\nfunction isGenOne(changes) {\n // only return true if the current change is 1-\n // and there are no other leafs\n return changes.length === 1 && /^1-/.test(changes[0].rev);\n}\n\nfunction emitError(db, e) {\n try {\n db.emit('error', e);\n } catch (err) {\n guardedConsole('error',\n 'The user\\'s map/reduce function threw an uncaught error.\\n' +\n 'You can debug this error by doing:\\n' +\n 'myDatabase.on(\\'error\\', function (err) { debugger; });\\n' +\n 'Please double-check your map/reduce function.');\n guardedConsole('error', e);\n }\n}\n\n/**\n * Returns an \"abstract\" mapreduce object of the form:\n *\n * {\n * query: queryFun,\n * viewCleanup: viewCleanupFun\n * }\n *\n * Arguments are:\n *\n * localDoc: string\n * This is for the local doc that gets saved in order to track the\n * \"dependent\" DBs and clean them up for viewCleanup. It should be\n * unique, so that indexer plugins don't collide with each other.\n * mapper: function (mapFunDef, emit)\n * Returns a map function based on the mapFunDef, which in the case of\n * normal map/reduce is just the de-stringified function, but may be\n * something else, such as an object in the case of pouchdb-find.\n * reducer: function (reduceFunDef)\n * Ditto, but for reducing. Modules don't have to support reducing\n * (e.g. pouchdb-find).\n * ddocValidator: function (ddoc, viewName)\n * Throws an error if the ddoc or viewName is not valid.\n * This could be a way to communicate to the user that the configuration for the\n * indexer is invalid.\n */\nfunction createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator) {\n\n function tryMap(db, fun, doc) {\n // emit an event if there was an error thrown by a map function.\n // putting try/catches in a single function also avoids deoptimizations.\n try {\n fun(doc);\n } catch (e) {\n emitError(db, e);\n }\n }\n\n function tryReduce(db, fun, keys, values, rereduce) {\n // same as above, but returning the result or an error. there are two separate\n // functions to avoid extra memory allocations since the tryCode() case is used\n // for custom map functions (common) vs this function, which is only used for\n // custom reduce functions (rare)\n try {\n return {output : fun(keys, values, rereduce)};\n } catch (e) {\n emitError(db, e);\n return {error: e};\n }\n }\n\n function sortByKeyThenValue(x, y) {\n var keyCompare = collate(x.key, y.key);\n return keyCompare !== 0 ? keyCompare : collate(x.value, y.value);\n }\n\n function sliceResults(results, limit, skip) {\n skip = skip || 0;\n if (typeof limit === 'number') {\n return results.slice(skip, limit + skip);\n } else if (skip > 0) {\n return results.slice(skip);\n }\n return results;\n }\n\n function rowToDocId(row) {\n var val = row.value;\n // Users can explicitly specify a joined doc _id, or it\n // defaults to the doc _id that emitted the key/value.\n var docId = (val && typeof val === 'object' && val._id) || row.id;\n return docId;\n }\n\n function readAttachmentsAsBlobOrBuffer(res) {\n res.rows.forEach(function (row) {\n var atts = row.doc && row.doc._attachments;\n if (!atts) {\n return;\n }\n Object.keys(atts).forEach(function (filename) {\n var att = atts[filename];\n atts[filename].data = b64ToBluffer(att.data, att.content_type);\n });\n });\n }\n\n function postprocessAttachments(opts) {\n return function (res) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n readAttachmentsAsBlobOrBuffer(res);\n }\n return res;\n };\n }\n\n function addHttpParam(paramName, opts, params, asJson) {\n // add an http param from opts to params, optionally json-encoded\n var val = opts[paramName];\n if (typeof val !== 'undefined') {\n if (asJson) {\n val = encodeURIComponent(JSON.stringify(val));\n }\n params.push(paramName + '=' + val);\n }\n }\n\n function coerceInteger(integerCandidate) {\n if (typeof integerCandidate !== 'undefined') {\n var asNumber = Number(integerCandidate);\n // prevents e.g. '1foo' or '1.1' being coerced to 1\n if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {\n return asNumber;\n } else {\n return integerCandidate;\n }\n }\n }\n\n function coerceOptions(opts) {\n opts.group_level = coerceInteger(opts.group_level);\n opts.limit = coerceInteger(opts.limit);\n opts.skip = coerceInteger(opts.skip);\n return opts;\n }\n\n function checkPositiveInteger(number) {\n if (number) {\n if (typeof number !== 'number') {\n return new QueryParseError('Invalid value for integer: \"' +\n number + '\"');\n }\n if (number < 0) {\n return new QueryParseError('Invalid value for positive integer: ' +\n '\"' + number + '\"');\n }\n }\n }\n\n function checkQueryParseError(options, fun) {\n var startkeyName = options.descending ? 'endkey' : 'startkey';\n var endkeyName = options.descending ? 'startkey' : 'endkey';\n\n if (typeof options[startkeyName] !== 'undefined' &&\n typeof options[endkeyName] !== 'undefined' &&\n collate(options[startkeyName], options[endkeyName]) > 0) {\n throw new QueryParseError('No rows can match your key range, ' +\n 'reverse your start_key and end_key or set {descending : true}');\n } else if (fun.reduce && options.reduce !== false) {\n if (options.include_docs) {\n throw new QueryParseError('{include_docs:true} is invalid for reduce');\n } else if (options.keys && options.keys.length > 1 &&\n !options.group && !options.group_level) {\n throw new QueryParseError('Multi-key fetches for reduce views must use ' +\n '{group: true}');\n }\n }\n ['group_level', 'limit', 'skip'].forEach(function (optionName) {\n var error = checkPositiveInteger(options[optionName]);\n if (error) {\n throw error;\n }\n });\n }\n\n function httpQuery(db, fun, opts) {\n // List of parameters to add to the PUT request\n var params = [];\n var body;\n var method = 'GET';\n\n // If opts.reduce exists and is defined, then add it to the list\n // of parameters.\n // If reduce=false then the results are that of only the map function\n // not the final result of map and reduce.\n addHttpParam('reduce', opts, params);\n addHttpParam('include_docs', opts, params);\n addHttpParam('attachments', opts, params);\n addHttpParam('limit', opts, params);\n addHttpParam('descending', opts, params);\n addHttpParam('group', opts, params);\n addHttpParam('group_level', opts, params);\n addHttpParam('skip', opts, params);\n addHttpParam('stale', opts, params);\n addHttpParam('conflicts', opts, params);\n addHttpParam('startkey', opts, params, true);\n addHttpParam('start_key', opts, params, true);\n addHttpParam('endkey', opts, params, true);\n addHttpParam('end_key', opts, params, true);\n addHttpParam('inclusive_end', opts, params);\n addHttpParam('key', opts, params, true);\n addHttpParam('update_seq', opts, params);\n\n // Format the list of parameters into a valid URI query string\n params = params.join('&');\n params = params === '' ? '' : '?' + params;\n\n // If keys are supplied, issue a POST to circumvent GET query string limits\n // see http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options\n if (typeof opts.keys !== 'undefined') {\n var MAX_URL_LENGTH = 2000;\n // according to http://stackoverflow.com/a/417184/680742,\n // the de facto URL length limit is 2000 characters\n\n var keysAsString =\n 'keys=' + encodeURIComponent(JSON.stringify(opts.keys));\n if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {\n // If the keys are short enough, do a GET. we do this to work around\n // Safari not understanding 304s on POSTs (see pouchdb/pouchdb#1239)\n params += (params[0] === '?' ? '&' : '?') + keysAsString;\n } else {\n method = 'POST';\n if (typeof fun === 'string') {\n body = {keys: opts.keys};\n } else { // fun is {map : mapfun}, so append to this\n fun.keys = opts.keys;\n }\n }\n }\n\n // We are referencing a query defined in the design doc\n if (typeof fun === 'string') {\n var parts = parseViewName(fun);\n return db.request({\n method: method,\n url: '_design/' + parts[0] + '/_view/' + parts[1] + params,\n body: body\n }).then(\n /* istanbul ignore next */\n function (result) {\n // fail the entire request if the result contains an error\n result.rows.forEach(function (row) {\n if (row.value && row.value.error && row.value.error === \"builtin_reduce_error\") {\n throw new Error(row.reason);\n }\n });\n\n return result;\n })\n .then(postprocessAttachments(opts));\n }\n\n // We are using a temporary view, terrible for performance, good for testing\n body = body || {};\n Object.keys(fun).forEach(function (key) {\n if (Array.isArray(fun[key])) {\n body[key] = fun[key];\n } else {\n body[key] = fun[key].toString();\n }\n });\n return db.request({\n method: 'POST',\n url: '_temp_view' + params,\n body: body\n }).then(postprocessAttachments(opts));\n }\n\n // custom adapters can define their own api._query\n // and override the default behavior\n /* istanbul ignore next */\n function customQuery(db, fun, opts) {\n return new PouchPromise(function (resolve, reject) {\n db._query(fun, opts, function (err, res) {\n if (err) {\n return reject(err);\n }\n resolve(res);\n });\n });\n }\n\n // custom adapters can define their own api._viewCleanup\n // and override the default behavior\n /* istanbul ignore next */\n function customViewCleanup(db) {\n return new PouchPromise(function (resolve, reject) {\n db._viewCleanup(function (err, res) {\n if (err) {\n return reject(err);\n }\n resolve(res);\n });\n });\n }\n\n function defaultsTo(value) {\n return function (reason) {\n /* istanbul ignore else */\n if (reason.status === 404) {\n return value;\n } else {\n throw reason;\n }\n };\n }\n\n // returns a promise for a list of docs to update, based on the input docId.\n // the order doesn't matter, because post-3.2.0, bulkDocs\n // is an atomic operation in all three adapters.\n function getDocsToPersist(docId, view, docIdsToChangesAndEmits) {\n var metaDocId = '_local/doc_' + docId;\n var defaultMetaDoc = {_id: metaDocId, keys: []};\n var docData = docIdsToChangesAndEmits.get(docId);\n var indexableKeysToKeyValues = docData[0];\n var changes = docData[1];\n\n function getMetaDoc() {\n if (isGenOne(changes)) {\n // generation 1, so we can safely assume initial state\n // for performance reasons (avoids unnecessary GETs)\n return PouchPromise.resolve(defaultMetaDoc);\n }\n return view.db.get(metaDocId)[\"catch\"](defaultsTo(defaultMetaDoc));\n }\n\n function getKeyValueDocs(metaDoc) {\n if (!metaDoc.keys.length) {\n // no keys, no need for a lookup\n return PouchPromise.resolve({rows: []});\n }\n return view.db.allDocs({\n keys: metaDoc.keys,\n include_docs: true\n });\n }\n\n function processKeyValueDocs(metaDoc, kvDocsRes) {\n var kvDocs = [];\n var oldKeys = new ExportedSet();\n\n for (var i = 0, len = kvDocsRes.rows.length; i < len; i++) {\n var row = kvDocsRes.rows[i];\n var doc = row.doc;\n if (!doc) { // deleted\n continue;\n }\n kvDocs.push(doc);\n oldKeys.add(doc._id);\n doc._deleted = !indexableKeysToKeyValues.has(doc._id);\n if (!doc._deleted) {\n var keyValue = indexableKeysToKeyValues.get(doc._id);\n if ('value' in keyValue) {\n doc.value = keyValue.value;\n }\n }\n }\n var newKeys = mapToKeysArray(indexableKeysToKeyValues);\n newKeys.forEach(function (key) {\n if (!oldKeys.has(key)) {\n // new doc\n var kvDoc = {\n _id: key\n };\n var keyValue = indexableKeysToKeyValues.get(key);\n if ('value' in keyValue) {\n kvDoc.value = keyValue.value;\n }\n kvDocs.push(kvDoc);\n }\n });\n metaDoc.keys = uniq(newKeys.concat(metaDoc.keys));\n kvDocs.push(metaDoc);\n\n return kvDocs;\n }\n\n return getMetaDoc().then(function (metaDoc) {\n return getKeyValueDocs(metaDoc).then(function (kvDocsRes) {\n return processKeyValueDocs(metaDoc, kvDocsRes);\n });\n });\n }\n\n // updates all emitted key/value docs and metaDocs in the mrview database\n // for the given batch of documents from the source database\n function saveKeyValues(view, docIdsToChangesAndEmits, seq) {\n var seqDocId = '_local/lastSeq';\n return view.db.get(seqDocId)[\n \"catch\"](defaultsTo({_id: seqDocId, seq: 0}))\n .then(function (lastSeqDoc) {\n var docIds = mapToKeysArray(docIdsToChangesAndEmits);\n return PouchPromise.all(docIds.map(function (docId) {\n return getDocsToPersist(docId, view, docIdsToChangesAndEmits);\n })).then(function (listOfDocsToPersist) {\n var docsToPersist = flatten(listOfDocsToPersist);\n lastSeqDoc.seq = seq;\n docsToPersist.push(lastSeqDoc);\n // write all docs in a single operation, update the seq once\n return view.db.bulkDocs({docs : docsToPersist});\n });\n });\n }\n\n function getQueue(view) {\n var viewName = typeof view === 'string' ? view : view.name;\n var queue = persistentQueues[viewName];\n if (!queue) {\n queue = persistentQueues[viewName] = new TaskQueue$2();\n }\n return queue;\n }\n\n function updateView(view) {\n return sequentialize(getQueue(view), function () {\n return updateViewInQueue(view);\n })();\n }\n\n function updateViewInQueue(view) {\n // bind the emit function once\n var mapResults;\n var doc;\n\n function emit(key, value) {\n var output = {id: doc._id, key: normalizeKey(key)};\n // Don't explicitly store the value unless it's defined and non-null.\n // This saves on storage space, because often people don't use it.\n if (typeof value !== 'undefined' && value !== null) {\n output.value = normalizeKey(value);\n }\n mapResults.push(output);\n }\n\n var mapFun = mapper(view.mapFun, emit);\n\n var currentSeq = view.seq || 0;\n\n function processChange(docIdsToChangesAndEmits, seq) {\n return function () {\n return saveKeyValues(view, docIdsToChangesAndEmits, seq);\n };\n }\n\n var queue = new TaskQueue$2();\n\n function processNextBatch() {\n return view.sourceDB.changes({\n conflicts: true,\n include_docs: true,\n style: 'all_docs',\n since: currentSeq,\n limit: CHANGES_BATCH_SIZE$1\n }).then(processBatch);\n }\n\n function processBatch(response) {\n var results = response.results;\n if (!results.length) {\n return;\n }\n var docIdsToChangesAndEmits = createDocIdsToChangesAndEmits(results);\n queue.add(processChange(docIdsToChangesAndEmits, currentSeq));\n if (results.length < CHANGES_BATCH_SIZE$1) {\n return;\n }\n return processNextBatch();\n }\n\n function createDocIdsToChangesAndEmits(results) {\n var docIdsToChangesAndEmits = new ExportedMap();\n for (var i = 0, len = results.length; i < len; i++) {\n var change = results[i];\n if (change.doc._id[0] !== '_') {\n mapResults = [];\n doc = change.doc;\n\n if (!doc._deleted) {\n tryMap(view.sourceDB, mapFun, doc);\n }\n mapResults.sort(sortByKeyThenValue);\n\n var indexableKeysToKeyValues = createIndexableKeysToKeyValues(mapResults);\n docIdsToChangesAndEmits.set(change.doc._id, [\n indexableKeysToKeyValues,\n change.changes\n ]);\n }\n currentSeq = change.seq;\n }\n return docIdsToChangesAndEmits;\n }\n\n function createIndexableKeysToKeyValues(mapResults) {\n var indexableKeysToKeyValues = new ExportedMap();\n var lastKey;\n for (var i = 0, len = mapResults.length; i < len; i++) {\n var emittedKeyValue = mapResults[i];\n var complexKey = [emittedKeyValue.key, emittedKeyValue.id];\n if (i > 0 && collate(emittedKeyValue.key, lastKey) === 0) {\n complexKey.push(i); // dup key+id, so make it unique\n }\n indexableKeysToKeyValues.set(toIndexableString(complexKey), emittedKeyValue);\n lastKey = emittedKeyValue.key;\n }\n return indexableKeysToKeyValues;\n }\n\n return processNextBatch().then(function () {\n return queue.finish();\n }).then(function () {\n view.seq = currentSeq;\n });\n }\n\n function reduceView(view, results, options) {\n if (options.group_level === 0) {\n delete options.group_level;\n }\n\n var shouldGroup = options.group || options.group_level;\n\n var reduceFun = reducer(view.reduceFun);\n\n var groups = [];\n var lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY :\n options.group_level;\n results.forEach(function (e) {\n var last = groups[groups.length - 1];\n var groupKey = shouldGroup ? e.key : null;\n\n // only set group_level for array keys\n if (shouldGroup && Array.isArray(groupKey)) {\n groupKey = groupKey.slice(0, lvl);\n }\n\n if (last && collate(last.groupKey, groupKey) === 0) {\n last.keys.push([e.key, e.id]);\n last.values.push(e.value);\n return;\n }\n groups.push({\n keys: [[e.key, e.id]],\n values: [e.value],\n groupKey: groupKey\n });\n });\n results = [];\n for (var i = 0, len = groups.length; i < len; i++) {\n var e = groups[i];\n var reduceTry = tryReduce(view.sourceDB, reduceFun, e.keys, e.values, false);\n if (reduceTry.error && reduceTry.error instanceof BuiltInError) {\n // CouchDB returns an error if a built-in errors out\n throw reduceTry.error;\n }\n results.push({\n // CouchDB just sets the value to null if a non-built-in errors out\n value: reduceTry.error ? null : reduceTry.output,\n key: e.groupKey\n });\n }\n // no total_rows/offset when reducing\n return {rows: sliceResults(results, options.limit, options.skip)};\n }\n\n function queryView(view, opts) {\n return sequentialize(getQueue(view), function () {\n return queryViewInQueue(view, opts);\n })();\n }\n\n function queryViewInQueue(view, opts) {\n var totalRows;\n var shouldReduce = view.reduceFun && opts.reduce !== false;\n var skip = opts.skip || 0;\n if (typeof opts.keys !== 'undefined' && !opts.keys.length) {\n // equivalent query\n opts.limit = 0;\n delete opts.keys;\n }\n\n function fetchFromView(viewOpts) {\n viewOpts.include_docs = true;\n return view.db.allDocs(viewOpts).then(function (res) {\n totalRows = res.total_rows;\n return res.rows.map(function (result) {\n\n // implicit migration - in older versions of PouchDB,\n // we explicitly stored the doc as {id: ..., key: ..., value: ...}\n // this is tested in a migration test\n /* istanbul ignore next */\n if ('value' in result.doc && typeof result.doc.value === 'object' &&\n result.doc.value !== null) {\n var keys = Object.keys(result.doc.value).sort();\n // this detection method is not perfect, but it's unlikely the user\n // emitted a value which was an object with these 3 exact keys\n var expectedKeys = ['id', 'key', 'value'];\n if (!(keys < expectedKeys || keys > expectedKeys)) {\n return result.doc.value;\n }\n }\n\n var parsedKeyAndDocId = parseIndexableString(result.doc._id);\n return {\n key: parsedKeyAndDocId[0],\n id: parsedKeyAndDocId[1],\n value: ('value' in result.doc ? result.doc.value : null)\n };\n });\n });\n }\n\n function onMapResultsReady(rows) {\n var finalResults;\n if (shouldReduce) {\n finalResults = reduceView(view, rows, opts);\n } else {\n finalResults = {\n total_rows: totalRows,\n offset: skip,\n rows: rows\n };\n }\n /* istanbul ignore if */\n if (opts.update_seq) {\n finalResults.update_seq = view.seq;\n }\n if (opts.include_docs) {\n var docIds = uniq(rows.map(rowToDocId));\n\n return view.sourceDB.allDocs({\n keys: docIds,\n include_docs: true,\n conflicts: opts.conflicts,\n attachments: opts.attachments,\n binary: opts.binary\n }).then(function (allDocsRes) {\n var docIdsToDocs = new ExportedMap();\n allDocsRes.rows.forEach(function (row) {\n docIdsToDocs.set(row.id, row.doc);\n });\n rows.forEach(function (row) {\n var docId = rowToDocId(row);\n var doc = docIdsToDocs.get(docId);\n if (doc) {\n row.doc = doc;\n }\n });\n return finalResults;\n });\n } else {\n return finalResults;\n }\n }\n\n if (typeof opts.keys !== 'undefined') {\n var keys = opts.keys;\n var fetchPromises = keys.map(function (key) {\n var viewOpts = {\n startkey : toIndexableString([key]),\n endkey : toIndexableString([key, {}])\n };\n /* istanbul ignore if */\n if (opts.update_seq) {\n viewOpts.update_seq = true;\n }\n return fetchFromView(viewOpts);\n });\n return PouchPromise.all(fetchPromises).then(flatten).then(onMapResultsReady);\n } else { // normal query, no 'keys'\n var viewOpts = {\n descending : opts.descending\n };\n /* istanbul ignore if */\n if (opts.update_seq) {\n viewOpts.update_seq = true;\n }\n var startkey;\n var endkey;\n if ('start_key' in opts) {\n startkey = opts.start_key;\n }\n if ('startkey' in opts) {\n startkey = opts.startkey;\n }\n if ('end_key' in opts) {\n endkey = opts.end_key;\n }\n if ('endkey' in opts) {\n endkey = opts.endkey;\n }\n if (typeof startkey !== 'undefined') {\n viewOpts.startkey = opts.descending ?\n toIndexableString([startkey, {}]) :\n toIndexableString([startkey]);\n }\n if (typeof endkey !== 'undefined') {\n var inclusiveEnd = opts.inclusive_end !== false;\n if (opts.descending) {\n inclusiveEnd = !inclusiveEnd;\n }\n\n viewOpts.endkey = toIndexableString(\n inclusiveEnd ? [endkey, {}] : [endkey]);\n }\n if (typeof opts.key !== 'undefined') {\n var keyStart = toIndexableString([opts.key]);\n var keyEnd = toIndexableString([opts.key, {}]);\n if (viewOpts.descending) {\n viewOpts.endkey = keyStart;\n viewOpts.startkey = keyEnd;\n } else {\n viewOpts.startkey = keyStart;\n viewOpts.endkey = keyEnd;\n }\n }\n if (!shouldReduce) {\n if (typeof opts.limit === 'number') {\n viewOpts.limit = opts.limit;\n }\n viewOpts.skip = skip;\n }\n return fetchFromView(viewOpts).then(onMapResultsReady);\n }\n }\n\n function httpViewCleanup(db) {\n return db.request({\n method: 'POST',\n url: '_view_cleanup'\n });\n }\n\n function localViewCleanup(db) {\n return db.get('_local/' + localDocName).then(function (metaDoc) {\n var docsToViews = new ExportedMap();\n Object.keys(metaDoc.views).forEach(function (fullViewName) {\n var parts = parseViewName(fullViewName);\n var designDocName = '_design/' + parts[0];\n var viewName = parts[1];\n var views = docsToViews.get(designDocName);\n if (!views) {\n views = new ExportedSet();\n docsToViews.set(designDocName, views);\n }\n views.add(viewName);\n });\n var opts = {\n keys : mapToKeysArray(docsToViews),\n include_docs : true\n };\n return db.allDocs(opts).then(function (res) {\n var viewsToStatus = {};\n res.rows.forEach(function (row) {\n var ddocName = row.key.substring(8); // cuts off '_design/'\n docsToViews.get(row.key).forEach(function (viewName) {\n var fullViewName = ddocName + '/' + viewName;\n /* istanbul ignore if */\n if (!metaDoc.views[fullViewName]) {\n // new format, without slashes, to support PouchDB 2.2.0\n // migration test in pouchdb's browser.migration.js verifies this\n fullViewName = viewName;\n }\n var viewDBNames = Object.keys(metaDoc.views[fullViewName]);\n // design doc deleted, or view function nonexistent\n var statusIsGood = row.doc && row.doc.views &&\n row.doc.views[viewName];\n viewDBNames.forEach(function (viewDBName) {\n viewsToStatus[viewDBName] =\n viewsToStatus[viewDBName] || statusIsGood;\n });\n });\n });\n var dbsToDelete = Object.keys(viewsToStatus).filter(\n function (viewDBName) { return !viewsToStatus[viewDBName]; });\n var destroyPromises = dbsToDelete.map(function (viewDBName) {\n return sequentialize(getQueue(viewDBName), function () {\n return new db.constructor(viewDBName, db.__opts).destroy();\n })();\n });\n return PouchPromise.all(destroyPromises).then(function () {\n return {ok: true};\n });\n });\n }, defaultsTo({ok: true}));\n }\n\n function queryPromised(db, fun, opts) {\n /* istanbul ignore next */\n if (typeof db._query === 'function') {\n return customQuery(db, fun, opts);\n }\n if (isRemote(db)) {\n return httpQuery(db, fun, opts);\n }\n \n if (typeof fun !== 'string') {\n // temp_view\n checkQueryParseError(opts, fun);\n\n tempViewQueue.add(function () {\n var createViewPromise = createView(\n /* sourceDB */ db,\n /* viewName */ 'temp_view/temp_view',\n /* mapFun */ fun.map,\n /* reduceFun */ fun.reduce,\n /* temporary */ true,\n /* localDocName */ localDocName);\n return createViewPromise.then(function (view) {\n return fin(updateView(view).then(function () {\n return queryView(view, opts);\n }), function () {\n return view.db.destroy();\n });\n });\n });\n return tempViewQueue.finish();\n } else {\n // persistent view\n var fullViewName = fun;\n var parts = parseViewName(fullViewName);\n var designDocName = parts[0];\n var viewName = parts[1];\n return db.get('_design/' + designDocName).then(function (doc) {\n var fun = doc.views && doc.views[viewName];\n\n if (!fun) {\n // basic validator; it's assumed that every subclass would want this\n throw new NotFoundError('ddoc ' + doc._id + ' has no view named ' +\n viewName);\n }\n\n ddocValidator(doc, viewName);\n checkQueryParseError(opts, fun);\n\n var createViewPromise = createView(\n /* sourceDB */ db,\n /* viewName */ fullViewName,\n /* mapFun */ fun.map,\n /* reduceFun */ fun.reduce,\n /* temporary */ false,\n /* localDocName */ localDocName);\n return createViewPromise.then(function (view) {\n if (opts.stale === 'ok' || opts.stale === 'update_after') {\n if (opts.stale === 'update_after') {\n nextTick(function () {\n updateView(view);\n });\n }\n return queryView(view, opts);\n } else { // stale not ok\n return updateView(view).then(function () {\n return queryView(view, opts);\n });\n }\n });\n });\n }\n }\n\n function abstractQuery(fun, opts, callback) {\n var db = this;\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = opts ? coerceOptions(opts) : {};\n\n if (typeof fun === 'function') {\n fun = {map : fun};\n }\n\n var promise = PouchPromise.resolve().then(function () {\n return queryPromised(db, fun, opts);\n });\n promisedCallback(promise, callback);\n return promise;\n }\n\n var abstractViewCleanup = callbackify(function () {\n var db = this;\n /* istanbul ignore next */\n if (typeof db._viewCleanup === 'function') {\n return customViewCleanup(db);\n }\n if (isRemote(db)) {\n return httpViewCleanup(db);\n }\n return localViewCleanup(db);\n });\n\n return {\n query: abstractQuery,\n viewCleanup: abstractViewCleanup\n };\n}\n\nvar builtInReduce = {\n _sum: function (keys, values) {\n return sum(values);\n },\n\n _count: function (keys, values) {\n return values.length;\n },\n\n _stats: function (keys, values) {\n // no need to implement rereduce=true, because Pouch\n // will never call it\n function sumsqr(values) {\n var _sumsqr = 0;\n for (var i = 0, len = values.length; i < len; i++) {\n var num = values[i];\n _sumsqr += (num * num);\n }\n return _sumsqr;\n }\n return {\n sum : sum(values),\n min : Math.min.apply(null, values),\n max : Math.max.apply(null, values),\n count : values.length,\n sumsqr : sumsqr(values)\n };\n }\n};\n\nfunction getBuiltIn(reduceFunString) {\n if (/^_sum/.test(reduceFunString)) {\n return builtInReduce._sum;\n } else if (/^_count/.test(reduceFunString)) {\n return builtInReduce._count;\n } else if (/^_stats/.test(reduceFunString)) {\n return builtInReduce._stats;\n } else if (/^_/.test(reduceFunString)) {\n throw new Error(reduceFunString + ' is not a supported reduce function.');\n }\n}\n\nfunction mapper(mapFun, emit) {\n // for temp_views one can use emit(doc, emit), see #38\n if (typeof mapFun === \"function\" && mapFun.length === 2) {\n var origMap = mapFun;\n return function (doc) {\n return origMap(doc, emit);\n };\n } else {\n return evalFunctionWithEval(mapFun.toString(), emit);\n }\n}\n\nfunction reducer(reduceFun) {\n var reduceFunString = reduceFun.toString();\n var builtIn = getBuiltIn(reduceFunString);\n if (builtIn) {\n return builtIn;\n } else {\n return evalFunctionWithEval(reduceFunString);\n }\n}\n\nfunction ddocValidator(ddoc, viewName) {\n var fun = ddoc.views && ddoc.views[viewName];\n if (typeof fun.map !== 'string') {\n throw new NotFoundError('ddoc ' + ddoc._id + ' has no string view named ' +\n viewName + ', instead found object of type: ' + typeof fun.map);\n }\n}\n\nvar localDocName = 'mrviews';\nvar abstract = createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator);\n\nfunction query(fun, opts, callback) {\n return abstract.query.call(this, fun, opts, callback);\n}\n\nfunction viewCleanup(callback) {\n return abstract.viewCleanup.call(this, callback);\n}\n\nvar mapreduce = {\n query: query,\n viewCleanup: viewCleanup\n};\n\nfunction isGenOne$1(rev$$1) {\n return /^1-/.test(rev$$1);\n}\n\nfunction fileHasChanged(localDoc, remoteDoc, filename) {\n return !localDoc._attachments ||\n !localDoc._attachments[filename] ||\n localDoc._attachments[filename].digest !== remoteDoc._attachments[filename].digest;\n}\n\nfunction getDocAttachments(db, doc) {\n var filenames = Object.keys(doc._attachments);\n return PouchPromise.all(filenames.map(function (filename) {\n return db.getAttachment(doc._id, filename, {rev: doc._rev});\n }));\n}\n\nfunction getDocAttachmentsFromTargetOrSource(target, src, doc) {\n var doCheckForLocalAttachments = isRemote(src) && !isRemote(target);\n var filenames = Object.keys(doc._attachments);\n\n if (!doCheckForLocalAttachments) {\n return getDocAttachments(src, doc);\n }\n\n return target.get(doc._id).then(function (localDoc) {\n return PouchPromise.all(filenames.map(function (filename) {\n if (fileHasChanged(localDoc, doc, filename)) {\n return src.getAttachment(doc._id, filename);\n }\n\n return target.getAttachment(localDoc._id, filename);\n }));\n })[\"catch\"](function (error) {\n /* istanbul ignore if */\n if (error.status !== 404) {\n throw error;\n }\n\n return getDocAttachments(src, doc);\n });\n}\n\nfunction createBulkGetOpts(diffs) {\n var requests = [];\n Object.keys(diffs).forEach(function (id) {\n var missingRevs = diffs[id].missing;\n missingRevs.forEach(function (missingRev) {\n requests.push({\n id: id,\n rev: missingRev\n });\n });\n });\n\n return {\n docs: requests,\n revs: true,\n latest: true\n };\n}\n\n//\n// Fetch all the documents from the src as described in the \"diffs\",\n// which is a mapping of docs IDs to revisions. If the state ever\n// changes to \"cancelled\", then the returned promise will be rejected.\n// Else it will be resolved with a list of fetched documents.\n//\nfunction getDocs(src, target, diffs, state) {\n diffs = clone(diffs); // we do not need to modify this\n\n var resultDocs = [],\n ok = true;\n\n function getAllDocs() {\n\n var bulkGetOpts = createBulkGetOpts(diffs);\n\n if (!bulkGetOpts.docs.length) { // optimization: skip empty requests\n return;\n }\n\n return src.bulkGet(bulkGetOpts).then(function (bulkGetResponse) {\n /* istanbul ignore if */\n if (state.cancelled) {\n throw new Error('cancelled');\n }\n return PouchPromise.all(bulkGetResponse.results.map(function (bulkGetInfo) {\n return PouchPromise.all(bulkGetInfo.docs.map(function (doc) {\n var remoteDoc = doc.ok;\n\n if (doc.error) {\n // when AUTO_COMPACTION is set, docs can be returned which look\n // like this: {\"missing\":\"1-7c3ac256b693c462af8442f992b83696\"}\n ok = false;\n }\n\n if (!remoteDoc || !remoteDoc._attachments) {\n return remoteDoc;\n }\n\n return getDocAttachmentsFromTargetOrSource(target, src, remoteDoc)\n .then(function (attachments) {\n var filenames = Object.keys(remoteDoc._attachments);\n attachments\n .forEach(function (attachment, i) {\n var att = remoteDoc._attachments[filenames[i]];\n delete att.stub;\n delete att.length;\n att.data = attachment;\n });\n\n return remoteDoc;\n });\n }));\n }))\n\n .then(function (results) {\n resultDocs = resultDocs.concat(flatten(results).filter(Boolean));\n });\n });\n }\n\n function hasAttachments(doc) {\n return doc._attachments && Object.keys(doc._attachments).length > 0;\n }\n\n function hasConflicts(doc) {\n return doc._conflicts && doc._conflicts.length > 0;\n }\n\n function fetchRevisionOneDocs(ids) {\n // Optimization: fetch gen-1 docs and attachments in\n // a single request using _all_docs\n return src.allDocs({\n keys: ids,\n include_docs: true,\n conflicts: true\n }).then(function (res) {\n if (state.cancelled) {\n throw new Error('cancelled');\n }\n res.rows.forEach(function (row) {\n if (row.deleted || !row.doc || !isGenOne$1(row.value.rev) ||\n hasAttachments(row.doc) || hasConflicts(row.doc)) {\n // if any of these conditions apply, we need to fetch using get()\n return;\n }\n\n // strip _conflicts array to appease CSG (#5793)\n /* istanbul ignore if */\n if (row.doc._conflicts) {\n delete row.doc._conflicts;\n }\n\n // the doc we got back from allDocs() is sufficient\n resultDocs.push(row.doc);\n delete diffs[row.id];\n });\n });\n }\n\n function getRevisionOneDocs() {\n // filter out the generation 1 docs and get them\n // leaving the non-generation one docs to be got otherwise\n var ids = Object.keys(diffs).filter(function (id) {\n var missing = diffs[id].missing;\n return missing.length === 1 && isGenOne$1(missing[0]);\n });\n if (ids.length > 0) {\n return fetchRevisionOneDocs(ids);\n }\n }\n\n function returnResult() {\n return { ok:ok, docs:resultDocs };\n }\n\n return PouchPromise.resolve()\n .then(getRevisionOneDocs)\n .then(getAllDocs)\n .then(returnResult);\n}\n\nvar CHECKPOINT_VERSION = 1;\nvar REPLICATOR = \"pouchdb\";\n// This is an arbitrary number to limit the\n// amount of replication history we save in the checkpoint.\n// If we save too much, the checkpoing docs will become very big,\n// if we save fewer, we'll run a greater risk of having to\n// read all the changes from 0 when checkpoint PUTs fail\n// CouchDB 2.0 has a more involved history pruning,\n// but let's go for the simple version for now.\nvar CHECKPOINT_HISTORY_SIZE = 5;\nvar LOWEST_SEQ = 0;\n\nfunction updateCheckpoint(db, id, checkpoint, session, returnValue) {\n return db.get(id)[\"catch\"](function (err) {\n if (err.status === 404) {\n if (db.adapter === 'http' || db.adapter === 'https') {\n explainError(\n 404, 'PouchDB is just checking if a remote checkpoint exists.'\n );\n }\n return {\n session_id: session,\n _id: id,\n history: [],\n replicator: REPLICATOR,\n version: CHECKPOINT_VERSION\n };\n }\n throw err;\n }).then(function (doc) {\n if (returnValue.cancelled) {\n return;\n }\n\n // if the checkpoint has not changed, do not update\n if (doc.last_seq === checkpoint) {\n return;\n }\n\n // Filter out current entry for this replication\n doc.history = (doc.history || []).filter(function (item) {\n return item.session_id !== session;\n });\n\n // Add the latest checkpoint to history\n doc.history.unshift({\n last_seq: checkpoint,\n session_id: session\n });\n\n // Just take the last pieces in history, to\n // avoid really big checkpoint docs.\n // see comment on history size above\n doc.history = doc.history.slice(0, CHECKPOINT_HISTORY_SIZE);\n\n doc.version = CHECKPOINT_VERSION;\n doc.replicator = REPLICATOR;\n\n doc.session_id = session;\n doc.last_seq = checkpoint;\n\n return db.put(doc)[\"catch\"](function (err) {\n if (err.status === 409) {\n // retry; someone is trying to write a checkpoint simultaneously\n return updateCheckpoint(db, id, checkpoint, session, returnValue);\n }\n throw err;\n });\n });\n}\n\nfunction Checkpointer(src, target, id, returnValue, opts) {\n this.src = src;\n this.target = target;\n this.id = id;\n this.returnValue = returnValue;\n this.opts = opts || {};\n}\n\nCheckpointer.prototype.writeCheckpoint = function (checkpoint, session) {\n var self = this;\n return this.updateTarget(checkpoint, session).then(function () {\n return self.updateSource(checkpoint, session);\n });\n};\n\nCheckpointer.prototype.updateTarget = function (checkpoint, session) {\n if (this.opts.writeTargetCheckpoint) {\n return updateCheckpoint(this.target, this.id, checkpoint,\n session, this.returnValue);\n } else {\n return PouchPromise.resolve(true);\n }\n};\n\nCheckpointer.prototype.updateSource = function (checkpoint, session) {\n if (this.opts.writeSourceCheckpoint) {\n var self = this;\n return updateCheckpoint(this.src, this.id, checkpoint,\n session, this.returnValue)[\n \"catch\"](function (err) {\n if (isForbiddenError(err)) {\n self.opts.writeSourceCheckpoint = false;\n return true;\n }\n throw err;\n });\n } else {\n return PouchPromise.resolve(true);\n }\n};\n\nvar comparisons = {\n \"undefined\": function (targetDoc, sourceDoc) {\n // This is the previous comparison function\n if (collate(targetDoc.last_seq, sourceDoc.last_seq) === 0) {\n return sourceDoc.last_seq;\n }\n /* istanbul ignore next */\n return 0;\n },\n \"1\": function (targetDoc, sourceDoc) {\n // This is the comparison function ported from CouchDB\n return compareReplicationLogs(sourceDoc, targetDoc).last_seq;\n }\n};\n\nCheckpointer.prototype.getCheckpoint = function () {\n var self = this;\n\n if (self.opts && self.opts.writeSourceCheckpoint && !self.opts.writeTargetCheckpoint) {\n return self.src.get(self.id).then(function (sourceDoc) {\n return sourceDoc.last_seq || LOWEST_SEQ;\n })[\"catch\"](function (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n throw err;\n }\n return LOWEST_SEQ;\n });\n }\n\n return self.target.get(self.id).then(function (targetDoc) {\n if (self.opts && self.opts.writeTargetCheckpoint && !self.opts.writeSourceCheckpoint) {\n return targetDoc.last_seq || LOWEST_SEQ;\n }\n\n return self.src.get(self.id).then(function (sourceDoc) {\n // Since we can't migrate an old version doc to a new one\n // (no session id), we just go with the lowest seq in this case\n /* istanbul ignore if */\n if (targetDoc.version !== sourceDoc.version) {\n return LOWEST_SEQ;\n }\n\n var version;\n if (targetDoc.version) {\n version = targetDoc.version.toString();\n } else {\n version = \"undefined\";\n }\n\n if (version in comparisons) {\n return comparisons[version](targetDoc, sourceDoc);\n }\n /* istanbul ignore next */\n return LOWEST_SEQ;\n }, function (err) {\n if (err.status === 404 && targetDoc.last_seq) {\n return self.src.put({\n _id: self.id,\n last_seq: LOWEST_SEQ\n }).then(function () {\n return LOWEST_SEQ;\n }, function (err) {\n if (isForbiddenError(err)) {\n self.opts.writeSourceCheckpoint = false;\n return targetDoc.last_seq;\n }\n /* istanbul ignore next */\n return LOWEST_SEQ;\n });\n }\n throw err;\n });\n })[\"catch\"](function (err) {\n if (err.status !== 404) {\n throw err;\n }\n return LOWEST_SEQ;\n });\n};\n// This checkpoint comparison is ported from CouchDBs source\n// they come from here:\n// https://github.com/apache/couchdb-couch-replicator/blob/master/src/couch_replicator.erl#L863-L906\n\nfunction compareReplicationLogs(srcDoc, tgtDoc) {\n if (srcDoc.session_id === tgtDoc.session_id) {\n return {\n last_seq: srcDoc.last_seq,\n history: srcDoc.history\n };\n }\n\n return compareReplicationHistory(srcDoc.history, tgtDoc.history);\n}\n\nfunction compareReplicationHistory(sourceHistory, targetHistory) {\n // the erlang loop via function arguments is not so easy to repeat in JS\n // therefore, doing this as recursion\n var S = sourceHistory[0];\n var sourceRest = sourceHistory.slice(1);\n var T = targetHistory[0];\n var targetRest = targetHistory.slice(1);\n\n if (!S || targetHistory.length === 0) {\n return {\n last_seq: LOWEST_SEQ,\n history: []\n };\n }\n\n var sourceId = S.session_id;\n /* istanbul ignore if */\n if (hasSessionId(sourceId, targetHistory)) {\n return {\n last_seq: S.last_seq,\n history: sourceHistory\n };\n }\n\n var targetId = T.session_id;\n if (hasSessionId(targetId, sourceRest)) {\n return {\n last_seq: T.last_seq,\n history: targetRest\n };\n }\n\n return compareReplicationHistory(sourceRest, targetRest);\n}\n\nfunction hasSessionId(sessionId, history) {\n var props = history[0];\n var rest = history.slice(1);\n\n if (!sessionId || history.length === 0) {\n return false;\n }\n\n if (sessionId === props.session_id) {\n return true;\n }\n\n return hasSessionId(sessionId, rest);\n}\n\nfunction isForbiddenError(err) {\n return typeof err.status === 'number' && Math.floor(err.status / 100) === 4;\n}\n\nvar STARTING_BACK_OFF = 0;\n\nfunction backOff(opts, returnValue, error, callback) {\n if (opts.retry === false) {\n returnValue.emit('error', error);\n returnValue.removeAllListeners();\n return;\n }\n if (typeof opts.back_off_function !== 'function') {\n opts.back_off_function = defaultBackOff;\n }\n returnValue.emit('requestError', error);\n if (returnValue.state === 'active' || returnValue.state === 'pending') {\n returnValue.emit('paused', error);\n returnValue.state = 'stopped';\n var backOffSet = function backoffTimeSet() {\n opts.current_back_off = STARTING_BACK_OFF;\n };\n var removeBackOffSetter = function removeBackOffTimeSet() {\n returnValue.removeListener('active', backOffSet);\n };\n returnValue.once('paused', removeBackOffSetter);\n returnValue.once('active', backOffSet);\n }\n\n opts.current_back_off = opts.current_back_off || STARTING_BACK_OFF;\n opts.current_back_off = opts.back_off_function(opts.current_back_off);\n setTimeout(callback, opts.current_back_off);\n}\n\nfunction sortObjectPropertiesByKey(queryParams) {\n return Object.keys(queryParams).sort(collate).reduce(function (result, key) {\n result[key] = queryParams[key];\n return result;\n }, {});\n}\n\n// Generate a unique id particular to this replication.\n// Not guaranteed to align perfectly with CouchDB's rep ids.\nfunction generateReplicationId(src, target, opts) {\n var docIds = opts.doc_ids ? opts.doc_ids.sort(collate) : '';\n var filterFun = opts.filter ? opts.filter.toString() : '';\n var queryParams = '';\n var filterViewName = '';\n var selector = '';\n\n // possibility for checkpoints to be lost here as behaviour of\n // JSON.stringify is not stable (see #6226)\n /* istanbul ignore if */\n if (opts.selector) {\n selector = JSON.stringify(opts.selector);\n }\n\n if (opts.filter && opts.query_params) {\n queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));\n }\n\n if (opts.filter && opts.filter === '_view') {\n filterViewName = opts.view.toString();\n }\n\n return PouchPromise.all([src.id(), target.id()]).then(function (res) {\n var queryData = res[0] + res[1] + filterFun + filterViewName +\n queryParams + docIds + selector;\n return new PouchPromise(function (resolve) {\n binaryMd5(queryData, resolve);\n });\n }).then(function (md5sum) {\n // can't use straight-up md5 alphabet, because\n // the char '/' is interpreted as being for attachments,\n // and + is also not url-safe\n md5sum = md5sum.replace(/\\//g, '.').replace(/\\+/g, '_');\n return '_local/' + md5sum;\n });\n}\n\nfunction replicate(src, target, opts, returnValue, result) {\n var batches = []; // list of batches to be processed\n var currentBatch; // the batch currently being processed\n var pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n }; // next batch, not yet ready to be processed\n var writingCheckpoint = false; // true while checkpoint is being written\n var changesCompleted = false; // true when all changes received\n var replicationCompleted = false; // true when replication has completed\n var last_seq = 0;\n var continuous = opts.continuous || opts.live || false;\n var batch_size = opts.batch_size || 100;\n var batches_limit = opts.batches_limit || 10;\n var changesPending = false; // true while src.changes is running\n var doc_ids = opts.doc_ids;\n var selector = opts.selector;\n var repId;\n var checkpointer;\n var changedDocs = [];\n // Like couchdb, every replication gets a unique session id\n var session = uuid();\n var seq_interval = opts.seq_interval;\n\n result = result || {\n ok: true,\n start_time: new Date(),\n docs_read: 0,\n docs_written: 0,\n doc_write_failures: 0,\n errors: []\n };\n\n var changesOpts = {};\n returnValue.ready(src, target);\n\n function initCheckpointer() {\n if (checkpointer) {\n return PouchPromise.resolve();\n }\n return generateReplicationId(src, target, opts).then(function (res) {\n repId = res;\n\n var checkpointOpts = {};\n if (opts.checkpoint === false) {\n checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: false };\n } else if (opts.checkpoint === 'source') {\n checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: false };\n } else if (opts.checkpoint === 'target') {\n checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: true };\n } else {\n checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: true };\n }\n\n checkpointer = new Checkpointer(src, target, repId, returnValue, checkpointOpts);\n });\n }\n\n function writeDocs() {\n changedDocs = [];\n\n if (currentBatch.docs.length === 0) {\n return;\n }\n var docs = currentBatch.docs;\n var bulkOpts = {timeout: opts.timeout};\n return target.bulkDocs({docs: docs, new_edits: false}, bulkOpts).then(function (res) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n\n // `res` doesn't include full documents (which live in `docs`), so we create a map of \n // (id -> error), and check for errors while iterating over `docs`\n var errorsById = Object.create(null);\n res.forEach(function (res) {\n if (res.error) {\n errorsById[res.id] = res;\n }\n });\n\n var errorsNo = Object.keys(errorsById).length;\n result.doc_write_failures += errorsNo;\n result.docs_written += docs.length - errorsNo;\n\n docs.forEach(function (doc) {\n var error = errorsById[doc._id];\n if (error) {\n result.errors.push(error);\n // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)\n var errorName = (error.name || '').toLowerCase();\n if (errorName === 'unauthorized' || errorName === 'forbidden') {\n returnValue.emit('denied', clone(error));\n } else {\n throw error;\n }\n } else {\n changedDocs.push(doc);\n }\n });\n\n }, function (err) {\n result.doc_write_failures += docs.length;\n throw err;\n });\n }\n\n function finishBatch() {\n if (currentBatch.error) {\n throw new Error('There was a problem getting docs.');\n }\n result.last_seq = last_seq = currentBatch.seq;\n var outResult = clone(result);\n if (changedDocs.length) {\n outResult.docs = changedDocs;\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof currentBatch.pending === 'number') {\n outResult.pending = currentBatch.pending;\n delete currentBatch.pending;\n }\n returnValue.emit('change', outResult);\n }\n writingCheckpoint = true;\n return checkpointer.writeCheckpoint(currentBatch.seq,\n session).then(function () {\n writingCheckpoint = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n currentBatch = undefined;\n getChanges();\n })[\"catch\"](function (err) {\n onCheckpointError(err);\n throw err;\n });\n }\n\n function getDiffs() {\n var diff = {};\n currentBatch.changes.forEach(function (change) {\n // Couchbase Sync Gateway emits these, but we can ignore them\n /* istanbul ignore if */\n if (change.id === \"_user/\") {\n return;\n }\n diff[change.id] = change.changes.map(function (x) {\n return x.rev;\n });\n });\n return target.revsDiff(diff).then(function (diffs) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n // currentBatch.diffs elements are deleted as the documents are written\n currentBatch.diffs = diffs;\n });\n }\n\n function getBatchDocs() {\n return getDocs(src, target, currentBatch.diffs, returnValue).then(function (got) {\n currentBatch.error = !got.ok;\n got.docs.forEach(function (doc) {\n delete currentBatch.diffs[doc._id];\n result.docs_read++;\n currentBatch.docs.push(doc);\n });\n });\n }\n\n function startNextBatch() {\n if (returnValue.cancelled || currentBatch) {\n return;\n }\n if (batches.length === 0) {\n processPendingBatch(true);\n return;\n }\n currentBatch = batches.shift();\n getDiffs()\n .then(getBatchDocs)\n .then(writeDocs)\n .then(finishBatch)\n .then(startNextBatch)[\n \"catch\"](function (err) {\n abortReplication('batch processing terminated with error', err);\n });\n }\n\n\n function processPendingBatch(immediate) {\n if (pendingBatch.changes.length === 0) {\n if (batches.length === 0 && !currentBatch) {\n if ((continuous && changesOpts.live) || changesCompleted) {\n returnValue.state = 'pending';\n returnValue.emit('paused');\n }\n if (changesCompleted) {\n completeReplication();\n }\n }\n return;\n }\n if (\n immediate ||\n changesCompleted ||\n pendingBatch.changes.length >= batch_size\n ) {\n batches.push(pendingBatch);\n pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n };\n if (returnValue.state === 'pending' || returnValue.state === 'stopped') {\n returnValue.state = 'active';\n returnValue.emit('active');\n }\n startNextBatch();\n }\n }\n\n\n function abortReplication(reason, err) {\n if (replicationCompleted) {\n return;\n }\n if (!err.message) {\n err.message = reason;\n }\n result.ok = false;\n result.status = 'aborting';\n batches = [];\n pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n };\n completeReplication(err);\n }\n\n\n function completeReplication(fatalError) {\n if (replicationCompleted) {\n return;\n }\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n result.status = 'cancelled';\n if (writingCheckpoint) {\n return;\n }\n }\n result.status = result.status || 'complete';\n result.end_time = new Date();\n result.last_seq = last_seq;\n replicationCompleted = true;\n\n if (fatalError) {\n // need to extend the error because Firefox considers \".result\" read-only\n fatalError = createError(fatalError);\n fatalError.result = result;\n\n // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)\n var errorName = (fatalError.name || '').toLowerCase();\n if (errorName === 'unauthorized' || errorName === 'forbidden') {\n returnValue.emit('error', fatalError);\n returnValue.removeAllListeners();\n } else {\n backOff(opts, returnValue, fatalError, function () {\n replicate(src, target, opts, returnValue);\n });\n }\n } else {\n returnValue.emit('complete', result);\n returnValue.removeAllListeners();\n }\n }\n\n\n function onChange(change, pending, lastSeq) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof pending === 'number') {\n pendingBatch.pending = pending;\n }\n\n var filter = filterChange(opts)(change);\n if (!filter) {\n return;\n }\n pendingBatch.seq = change.seq || lastSeq;\n pendingBatch.changes.push(change);\n processPendingBatch(batches.length === 0 && changesOpts.live);\n }\n\n\n function onChangesComplete(changes) {\n changesPending = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n\n // if no results were returned then we're done,\n // else fetch more\n if (changes.results.length > 0) {\n changesOpts.since = changes.last_seq;\n getChanges();\n processPendingBatch(true);\n } else {\n\n var complete = function () {\n if (continuous) {\n changesOpts.live = true;\n getChanges();\n } else {\n changesCompleted = true;\n }\n processPendingBatch(true);\n };\n\n // update the checkpoint so we start from the right seq next time\n if (!currentBatch && changes.results.length === 0) {\n writingCheckpoint = true;\n checkpointer.writeCheckpoint(changes.last_seq,\n session).then(function () {\n writingCheckpoint = false;\n result.last_seq = last_seq = changes.last_seq;\n complete();\n })[\n \"catch\"](onCheckpointError);\n } else {\n complete();\n }\n }\n }\n\n\n function onChangesError(err) {\n changesPending = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n abortReplication('changes rejected', err);\n }\n\n\n function getChanges() {\n if (!(\n !changesPending &&\n !changesCompleted &&\n batches.length < batches_limit\n )) {\n return;\n }\n changesPending = true;\n function abortChanges() {\n changes.cancel();\n }\n function removeListener() {\n returnValue.removeListener('cancel', abortChanges);\n }\n\n if (returnValue._changes) { // remove old changes() and listeners\n returnValue.removeListener('cancel', returnValue._abortChanges);\n returnValue._changes.cancel();\n }\n returnValue.once('cancel', abortChanges);\n\n var changes = src.changes(changesOpts)\n .on('change', onChange);\n changes.then(removeListener, removeListener);\n changes.then(onChangesComplete)[\n \"catch\"](onChangesError);\n\n if (opts.retry) {\n // save for later so we can cancel if necessary\n returnValue._changes = changes;\n returnValue._abortChanges = abortChanges;\n }\n }\n\n\n function startChanges() {\n initCheckpointer().then(function () {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n return;\n }\n return checkpointer.getCheckpoint().then(function (checkpoint) {\n last_seq = checkpoint;\n changesOpts = {\n since: last_seq,\n limit: batch_size,\n batch_size: batch_size,\n style: 'all_docs',\n doc_ids: doc_ids,\n selector: selector,\n return_docs: true // required so we know when we're done\n };\n if (seq_interval !== false) {\n changesOpts.seq_interval = seq_interval || batch_size;\n }\n if (opts.filter) {\n if (typeof opts.filter !== 'string') {\n // required for the client-side filter in onChange\n changesOpts.include_docs = true;\n } else { // ddoc filter\n changesOpts.filter = opts.filter;\n }\n }\n if ('heartbeat' in opts) {\n changesOpts.heartbeat = opts.heartbeat;\n }\n if ('timeout' in opts) {\n changesOpts.timeout = opts.timeout;\n }\n if (opts.query_params) {\n changesOpts.query_params = opts.query_params;\n }\n if (opts.view) {\n changesOpts.view = opts.view;\n }\n getChanges();\n });\n })[\"catch\"](function (err) {\n abortReplication('getCheckpoint rejected with ', err);\n });\n }\n\n /* istanbul ignore next */\n function onCheckpointError(err) {\n writingCheckpoint = false;\n abortReplication('writeCheckpoint completed with error', err);\n }\n\n /* istanbul ignore if */\n if (returnValue.cancelled) { // cancelled immediately\n completeReplication();\n return;\n }\n\n if (!returnValue._addedListeners) {\n returnValue.once('cancel', completeReplication);\n\n if (typeof opts.complete === 'function') {\n returnValue.once('error', opts.complete);\n returnValue.once('complete', function (result) {\n opts.complete(null, result);\n });\n }\n returnValue._addedListeners = true;\n }\n\n if (typeof opts.since === 'undefined') {\n startChanges();\n } else {\n initCheckpointer().then(function () {\n writingCheckpoint = true;\n return checkpointer.writeCheckpoint(opts.since, session);\n }).then(function () {\n writingCheckpoint = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n return;\n }\n last_seq = opts.since;\n startChanges();\n })[\"catch\"](onCheckpointError);\n }\n}\n\n// We create a basic promise so the caller can cancel the replication possibly\n// before we have actually started listening to changes etc\ninherits(Replication, events.EventEmitter);\nfunction Replication() {\n events.EventEmitter.call(this);\n this.cancelled = false;\n this.state = 'pending';\n var self = this;\n var promise = new PouchPromise(function (fulfill, reject) {\n self.once('complete', fulfill);\n self.once('error', reject);\n });\n self.then = function (resolve, reject) {\n return promise.then(resolve, reject);\n };\n self[\"catch\"] = function (reject) {\n return promise[\"catch\"](reject);\n };\n // As we allow error handling via \"error\" event as well,\n // put a stub in here so that rejecting never throws UnhandledError.\n self[\"catch\"](function () {});\n}\n\nReplication.prototype.cancel = function () {\n this.cancelled = true;\n this.state = 'cancelled';\n this.emit('cancel');\n};\n\nReplication.prototype.ready = function (src, target) {\n var self = this;\n if (self._readyCalled) {\n return;\n }\n self._readyCalled = true;\n\n function onDestroy() {\n self.cancel();\n }\n src.once('destroyed', onDestroy);\n target.once('destroyed', onDestroy);\n function cleanup() {\n src.removeListener('destroyed', onDestroy);\n target.removeListener('destroyed', onDestroy);\n }\n self.once('complete', cleanup);\n};\n\nfunction toPouch(db, opts) {\n var PouchConstructor = opts.PouchConstructor;\n if (typeof db === 'string') {\n return new PouchConstructor(db, opts);\n } else {\n return db;\n }\n}\n\nfunction replicateWrapper(src, target, opts, callback) {\n\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof opts === 'undefined') {\n opts = {};\n }\n\n if (opts.doc_ids && !Array.isArray(opts.doc_ids)) {\n throw createError(BAD_REQUEST,\n \"`doc_ids` filter parameter is not a list.\");\n }\n\n opts.complete = callback;\n opts = clone(opts);\n opts.continuous = opts.continuous || opts.live;\n opts.retry = ('retry' in opts) ? opts.retry : false;\n /*jshint validthis:true */\n opts.PouchConstructor = opts.PouchConstructor || this;\n var replicateRet = new Replication(opts);\n var srcPouch = toPouch(src, opts);\n var targetPouch = toPouch(target, opts);\n replicate(srcPouch, targetPouch, opts, replicateRet);\n return replicateRet;\n}\n\ninherits(Sync, events.EventEmitter);\nfunction sync$1(src, target, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof opts === 'undefined') {\n opts = {};\n }\n opts = clone(opts);\n /*jshint validthis:true */\n opts.PouchConstructor = opts.PouchConstructor || this;\n src = toPouch(src, opts);\n target = toPouch(target, opts);\n return new Sync(src, target, opts, callback);\n}\n\nfunction Sync(src, target, opts, callback) {\n var self = this;\n this.canceled = false;\n\n var optsPush = opts.push ? $inject_Object_assign({}, opts, opts.push) : opts;\n var optsPull = opts.pull ? $inject_Object_assign({}, opts, opts.pull) : opts;\n\n this.push = replicateWrapper(src, target, optsPush);\n this.pull = replicateWrapper(target, src, optsPull);\n\n this.pushPaused = true;\n this.pullPaused = true;\n\n function pullChange(change) {\n self.emit('change', {\n direction: 'pull',\n change: change\n });\n }\n function pushChange(change) {\n self.emit('change', {\n direction: 'push',\n change: change\n });\n }\n function pushDenied(doc) {\n self.emit('denied', {\n direction: 'push',\n doc: doc\n });\n }\n function pullDenied(doc) {\n self.emit('denied', {\n direction: 'pull',\n doc: doc\n });\n }\n function pushPaused() {\n self.pushPaused = true;\n /* istanbul ignore if */\n if (self.pullPaused) {\n self.emit('paused');\n }\n }\n function pullPaused() {\n self.pullPaused = true;\n /* istanbul ignore if */\n if (self.pushPaused) {\n self.emit('paused');\n }\n }\n function pushActive() {\n self.pushPaused = false;\n /* istanbul ignore if */\n if (self.pullPaused) {\n self.emit('active', {\n direction: 'push'\n });\n }\n }\n function pullActive() {\n self.pullPaused = false;\n /* istanbul ignore if */\n if (self.pushPaused) {\n self.emit('active', {\n direction: 'pull'\n });\n }\n }\n\n var removed = {};\n\n function removeAll(type) { // type is 'push' or 'pull'\n return function (event, func) {\n var isChange = event === 'change' &&\n (func === pullChange || func === pushChange);\n var isDenied = event === 'denied' &&\n (func === pullDenied || func === pushDenied);\n var isPaused = event === 'paused' &&\n (func === pullPaused || func === pushPaused);\n var isActive = event === 'active' &&\n (func === pullActive || func === pushActive);\n\n if (isChange || isDenied || isPaused || isActive) {\n if (!(event in removed)) {\n removed[event] = {};\n }\n removed[event][type] = true;\n if (Object.keys(removed[event]).length === 2) {\n // both push and pull have asked to be removed\n self.removeAllListeners(event);\n }\n }\n };\n }\n\n if (opts.live) {\n this.push.on('complete', self.pull.cancel.bind(self.pull));\n this.pull.on('complete', self.push.cancel.bind(self.push));\n }\n\n function addOneListener(ee, event, listener) {\n if (ee.listeners(event).indexOf(listener) == -1) {\n ee.on(event, listener);\n }\n }\n\n this.on('newListener', function (event) {\n if (event === 'change') {\n addOneListener(self.pull, 'change', pullChange);\n addOneListener(self.push, 'change', pushChange);\n } else if (event === 'denied') {\n addOneListener(self.pull, 'denied', pullDenied);\n addOneListener(self.push, 'denied', pushDenied);\n } else if (event === 'active') {\n addOneListener(self.pull, 'active', pullActive);\n addOneListener(self.push, 'active', pushActive);\n } else if (event === 'paused') {\n addOneListener(self.pull, 'paused', pullPaused);\n addOneListener(self.push, 'paused', pushPaused);\n }\n });\n\n this.on('removeListener', function (event) {\n if (event === 'change') {\n self.pull.removeListener('change', pullChange);\n self.push.removeListener('change', pushChange);\n } else if (event === 'denied') {\n self.pull.removeListener('denied', pullDenied);\n self.push.removeListener('denied', pushDenied);\n } else if (event === 'active') {\n self.pull.removeListener('active', pullActive);\n self.push.removeListener('active', pushActive);\n } else if (event === 'paused') {\n self.pull.removeListener('paused', pullPaused);\n self.push.removeListener('paused', pushPaused);\n }\n });\n\n this.pull.on('removeListener', removeAll('pull'));\n this.push.on('removeListener', removeAll('push'));\n\n var promise = PouchPromise.all([\n this.push,\n this.pull\n ]).then(function (resp) {\n var out = {\n push: resp[0],\n pull: resp[1]\n };\n self.emit('complete', out);\n if (callback) {\n callback(null, out);\n }\n self.removeAllListeners();\n return out;\n }, function (err) {\n self.cancel();\n if (callback) {\n // if there's a callback, then the callback can receive\n // the error event\n callback(err);\n } else {\n // if there's no callback, then we're safe to emit an error\n // event, which would otherwise throw an unhandled error\n // due to 'error' being a special event in EventEmitters\n self.emit('error', err);\n }\n self.removeAllListeners();\n if (callback) {\n // no sense throwing if we're already emitting an 'error' event\n throw err;\n }\n });\n\n this.then = function (success, err) {\n return promise.then(success, err);\n };\n\n this[\"catch\"] = function (err) {\n return promise[\"catch\"](err);\n };\n}\n\nSync.prototype.cancel = function () {\n if (!this.canceled) {\n this.canceled = true;\n this.push.cancel();\n this.pull.cancel();\n }\n};\n\nfunction replication(PouchDB) {\n PouchDB.replicate = replicateWrapper;\n PouchDB.sync = sync$1;\n\n Object.defineProperty(PouchDB.prototype, 'replicate', {\n get: function () {\n var self = this;\n if (typeof this.replicateMethods === 'undefined') {\n this.replicateMethods = {\n from: function (other, opts, callback) {\n return self.constructor.replicate(other, self, opts, callback);\n },\n to: function (other, opts, callback) {\n return self.constructor.replicate(self, other, opts, callback);\n }\n };\n }\n return this.replicateMethods;\n }\n });\n\n PouchDB.prototype.sync = function (dbName, opts, callback) {\n return this.constructor.sync(this, dbName, opts, callback);\n };\n}\n\nPouchDB.plugin(IDBPouch)\n .plugin(WebSqlPouch$1)\n .plugin(HttpPouch$1)\n .plugin(mapreduce)\n .plugin(replication);\n\n// Pull from src because pouchdb-node/pouchdb-browser themselves\n// are aggressively optimized and jsnext:main would normally give us this\n// aggressive bundle.\n\nmodule.exports = PouchDB;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"1\":1,\"10\":10,\"11\":11,\"16\":16,\"2\":2,\"4\":4,\"5\":5,\"6\":6,\"7\":7}]},{},[17])(17)\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/pouchdb/dist/pouchdb.js\n// module id = 22\n// module chunks = 0","import Events from '../../_events';\nimport Routie from \"routie\";\n\n$(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n Routie({\n 'navigation': function() {\n $('#NavbarCollapse').addClass('in');\n },\n 'carousel:id:num': function(id, num) {\n $(`#Carousel${ id}`).carousel(num);\n },\n });\n});\n\n\n// WEBPACK FOOTER //\n// ./app/client/src/js/_components/routes/index.js","\"use strict\";\n\nvar path = require('path');\n\nvar methods = ['get', 'post', 'put', 'patch', 'delete', 'del', 'all'];\n\nvar __slice = [].slice;\n\nmodule.exports = function (map) {\n var args, root, _map, cb;\n args = __slice.call(arguments, 1);\n\n if (typeof args[args.length - 1] === \"function\") cb = args.pop();\n\n root = path.join.apply(path, args);\n _map = {};\n methods.forEach(function (m) {\n _map[m] = function (subpath) {\n var args = __slice.call(arguments);\n args.length < 2 ? args.unshift(root) : args[0] = root + args[0];\n return map[m].apply(map, args);\n }\n });\n if (cb) cb(_map);\n return _map;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/routie/index.js\n// module id = 24\n// module chunks = 0","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/path-browserify/index.js\n// module id = 25\n// module chunks = 0","// 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\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/node_modules/process/browser.js\n// module id = 26\n// module chunks = 0","/*! smooth-scroll v14.2.0 | (c) 2018 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/smooth-scroll */\n!(function(e,t){\"function\"==typeof define&&define.amd?define([],(function(){return t(e)})):\"object\"==typeof exports?module.exports=t(e):e.SmoothScroll=t(e)})(\"undefined\"!=typeof global?global:\"undefined\"!=typeof window?window:this,(function(e){\"use strict\";var t={ignore:\"[data-scroll-ignore]\",header:null,topOnEmptyHash:!0,speed:500,clip:!0,offset:0,easing:\"easeInOutCubic\",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},n=function(){return\"querySelector\"in document&&\"addEventListener\"in e&&\"requestAnimationFrame\"in e&&\"closest\"in e.Element.prototype},o=function(){for(var e={},t=0;t<arguments.length;t++)!(function(t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(arguments[t]);return e},r=function(t){return!!(\"matchMedia\"in e&&e.matchMedia(\"(prefers-reduced-motion)\").matches)},a=function(t){return parseInt(e.getComputedStyle(t).height,10)},i=function(e){var t;try{t=decodeURIComponent(e)}catch(n){t=e}return t},c=function(e){\"#\"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,r=-1,a=\"\",i=n.charCodeAt(0);++r<o;){if(0===(t=n.charCodeAt(r)))throw new InvalidCharacterError(\"Invalid character: the input contains U+0000.\");t>=1&&t<=31||127==t||0===r&&t>=48&&t<=57||1===r&&t>=48&&t<=57&&45===i?a+=\"\\\\\"+t.toString(16)+\" \":a+=t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(r):\"\\\\\"+n.charAt(r)}var c;try{c=decodeURIComponent(\"#\"+a)}catch(e){c=\"#\"+a}return c},u=function(e,t){var n;return\"easeInQuad\"===e.easing&&(n=t*t),\"easeOutQuad\"===e.easing&&(n=t*(2-t)),\"easeInOutQuad\"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),\"easeInCubic\"===e.easing&&(n=t*t*t),\"easeOutCubic\"===e.easing&&(n=--t*t*t+1),\"easeInOutCubic\"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),\"easeInQuart\"===e.easing&&(n=t*t*t*t),\"easeOutQuart\"===e.easing&&(n=1- --t*t*t*t),\"easeInOutQuart\"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),\"easeInQuint\"===e.easing&&(n=t*t*t*t*t),\"easeOutQuint\"===e.easing&&(n=1+--t*t*t*t*t),\"easeInOutQuint\"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t},s=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,n,o,r){var a=0;if(t.offsetParent)do{a+=t.offsetTop,t=t.offsetParent}while(t);return a=Math.max(a-n-o,0),r&&(a=Math.min(a,s()-e.innerHeight)),a},d=function(e){return e?a(e)+e.offsetTop:0},f=function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?\"#top\":\"#\"+e.id)},m=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute(\"tabindex\",\"-1\"),t.focus(),t.style.outline=\"none\"),e.scrollTo(0,n))},h=function(t,n,o,r){if(n.emitEvents&&\"function\"==typeof e.CustomEvent){var a=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:r}});document.dispatchEvent(a)}};return function(a,p){var g,v,y,S,E,b,O,I={};I.cancelScroll=function(e){cancelAnimationFrame(O),O=null,e||h(\"scrollCancel\",g)},I.animateScroll=function(n,r,a){var i=o(g||t,a||{}),c=\"[object Number]\"===Object.prototype.toString.call(n),p=c||!n.tagName?null:n;if(c||p){var v=e.pageYOffset;i.header&&!S&&(S=document.querySelector(i.header)),E||(E=d(S));var y,b,C,w=c?n:l(p,E,parseInt(\"function\"==typeof i.offset?i.offset(n,r):i.offset,10),i.clip),L=w-v,A=s(),H=0,q=function(t,o){var a=e.pageYOffset;if(t==o||a==o||(v<o&&e.innerHeight+a)>=A)return I.cancelScroll(!0),m(n,o,c),h(\"scrollStop\",i,n,r),y=null,O=null,!0},Q=function(t){y||(y=t),H+=t-y,b=H/parseInt(i.speed,10),b=b>1?1:b,C=v+L*u(i,b),e.scrollTo(0,Math.floor(C)),q(C,w)||(O=e.requestAnimationFrame(Q),y=t)};0===e.pageYOffset&&e.scrollTo(0,0),f(n,c,i),h(\"scrollStart\",i,n,r),I.cancelScroll(!0),e.requestAnimationFrame(Q)}};var C=function(t){if(!r()&&0===t.button&&!t.metaKey&&!t.ctrlKey&&\"closest\"in t.target&&(y=t.target.closest(a))&&\"a\"===y.tagName.toLowerCase()&&!t.target.closest(g.ignore)&&y.hostname===e.location.hostname&&y.pathname===e.location.pathname&&/#/.test(y.href)){var n=c(i(y.hash)),o=g.topOnEmptyHash&&\"#\"===n?document.documentElement:document.querySelector(n);o=o||\"#top\"!==n?o:document.documentElement,o&&(t.preventDefault(),I.animateScroll(o,y))}},w=function(e){if(history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(g)&&history.state.anchor){var t=document.querySelector(c(i(history.state.anchor)));t&&I.animateScroll(t,null,{updateURL:!1})}},L=function(e){b||(b=setTimeout((function(){b=null,E=d(S)}),66))};return I.destroy=function(){g&&(document.removeEventListener(\"click\",C,!1),e.removeEventListener(\"resize\",L,!1),e.removeEventListener(\"popstate\",w,!1),I.cancelScroll(),g=null,v=null,y=null,S=null,E=null,b=null,O=null)},I.init=function(r){if(!n())throw\"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.\";I.destroy(),g=o(t,r||{}),S=g.header?document.querySelector(g.header):null,E=d(S),document.addEventListener(\"click\",C,!1),S&&e.addEventListener(\"resize\",L,!1),g.updateURL&&g.popstate&&e.addEventListener(\"popstate\",w,!1)},I.init(p),I}}));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/smooth-scroll/dist/smooth-scroll.min.js\n// module id = 27\n// module chunks = 0","var map = {\n\t\"./icon-cfpb.png\": 29,\n\t\"./icon-lender.png\": 30,\n\t\"./logo.png\": 31\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 28;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/client/src/img nonrecursive \\.(png|jpe?g|svg)$\n// module id = 28\n// module chunks = 0","module.exports = \"../img/icon-cfpb.png\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/client/src/img/icon-cfpb.png\n// module id = 29\n// module chunks = 0","module.exports = \"../img/icon-lender.png\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/client/src/img/icon-lender.png\n// module id = 30\n// module chunks = 0","module.exports = \"../img/logo.png\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/client/src/img/logo.png\n// module id = 31\n// module chunks = 0","function webpackEmptyContext(req) {\n\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 32;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/font-awesome nonrecursive \\.(otf|eot|svg|ttf|woff|woff2)$\n// module id = 32\n// module chunks = 0"],"sourceRoot":""} |