{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/trix/dist/trix.js","webpack:///./node_modules/@rails/actiontext/app/assets/javascripts/actiontext.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.esm.js","webpack:///./node_modules/chart.js/dist/chunks/helpers.segment.mjs","webpack:///./node_modules/chart.js/dist/chart.mjs","webpack:///./node_modules/chart.js/auto/auto.mjs","webpack:///./app/javascript/pages/astronomer_page.js","webpack:///./app/javascript/pages/session_page.js","webpack:///./app/javascript/packs/application.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","this","Rails","linkClickSelector","buttonClickSelector","selector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","ref","document","querySelector","content","cspNonce","Element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","element","getData","setData","isContentEditable","isEditable","parentElement","$","Array","slice","querySelectorAll","csrfParam","csrfToken","meta","CSRFProtection","xhr","token","setRequestHeader","refreshCSRFTokens","param","forEach","input","CustomEvent","fire","preventDefault","window","event","params","evt","createEvent","initCustomEvent","bubbles","cancelable","detail","Event","result","defaultPrevented","obj","data","dispatchEvent","stopEverything","e","target","stopPropagation","stopImmediatePropagation","delegate","eventType","handler","addEventListener","parentNode","AcceptHeaders","createXHR","prepareOptions","processResponse","text","html","xml","json","script","ajax","options","response","responseText","getResponseHeader","Math","floor","status","success","statusText","error","complete","beforeSend","readyState","XMLHttpRequest","OPENED","send","url","location","href","type","toUpperCase","indexOf","dataType","accept","done","open","crossDomain","withCredentials","onreadystatechange","DONE","parser","match","JSON","parse","createElement","setAttribute","head","appendChild","removeChild","DOMParser","replace","parseFromString","isCrossDomain","originAnchor","urlAnchor","protocol","host","toArray","serializeElement","additionalParam","inputs","elements","disabled","option","selected","push","checked","map","encodeURIComponent","join","formElements","form","filter","el","allowAction","handleConfirm","confirm","message","answer","callback","getAttribute","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","innerHTML","originalText","removeEventListener","handleMethod","formContent","link","method","action","style","display","body","click","isRemote","handleRemote","button","enctype","FormData","append","args","arguments","length","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","jQuery","rails","Error","ajaxPrefilter","originalOptions","start","_rails_loaded","setTimeout","g","Function","Set","clear","values","has","add","splice","apply","TypeError","_state","_handled","_value","_deferreds","h","onFulfilled","onRejected","promise","then","a","u","setImmediate","console","warn","all","resolve","constructor","reject","race","_setImmediateFn","_setUnhandledRejectionFn","Promise","customElements","registerElement","WeakMap","Date","now","random","set","writable","A","b","sort","uid_","takeRecords","nodes_","observer","removeTransientObservers","callback_","subtree","enqueue","records_","C","addedNodes","removedNodes","previousSibling","nextSibling","attributeName","attributeNamespace","oldValue","x","w","f","transientObservedNodes","JsMutationObserver","test","navigator","userAgent","v","y","String","postMessage","observe","ShadowDOMPolyfill","wrapIfNeeded","childList","attributes","characterData","attributeOldValue","attributeFilter","characterDataOldValue","SyntaxError","removeListeners","addListeners","disconnect","addListeners_","removeListeners_","addTransientObserver","handleEvent","attrName","relatedNode","namespaceURI","attrChange","MutationEvent","ADDITION","prevValue","MutationObserver","_isPolyfilled","self","performance","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","clearTimeout","initEvent","configurable","Boolean","WebComponents","CustomElements","flags","addModule","initializeModules","hasNative","isIE","useNative","register","HTMLImports","firstElementChild","firstChild","nodeType","Node","ELEMENT_NODE","nextElementSibling","shadowRoot","olderShadowRoot","wrap","import","IMPORT_LINK_TYPE","forDocumentTree","forSubtree","upgrade","__upgraded__","__attached","attachedCallback","detachedCallback","dom","URL","_URL","localName","split","shift","pop","group","DOCUMENT_FRAGMENT_NODE","E","groupEnd","__observer","baseURI","hasPolyfillMutations","hasThrottledAttached","S","createShadowRoot","watchShadow","__watched","log","upgradeDocumentTree","upgradeDocument","upgradeSubtree","upgradeAll","attached","is","createdCallback","__proto__","HTMLElement","getOwnPropertyNames","getOwnPropertyDescriptor","getPrototypeOf","native","HTMLTemplateElement","decorate","getRegisteredDefinition","tag","extends","upgradeWithDefinition","implementPrototype","_polyfilled","removeAttribute","toLowerCase","attributeChangedCallback","concat","ctor","createElementNS","__name","lifecycle","ancestry","ready","registry","instanceof","reservedTagList","readyTime","elapsed","unwrap","unwrapIfNeeded","__importsParsingHook","eager","attachEvent","Trix","VERSION","ZERO_WIDTH_SPACE","NON_BREAKING_SPACE","OBJECT_REPLACEMENT_CHARACTER","browser","composesExistingText","forcesObjectResizing","supportsInputEvents","InputEvent","config","BasicObject","proxyMethod","toMethod","toProperty","optional","__super__","id","fromJSONString","fromJSON","hasSameConstructorAs","isEqualTo","inspect","contentsForInspection","toJSONString","stringify","toUTF16String","UTF16String","box","getCacheKey","toString","extend","defer","normalizeSpaces","RegExp","normalizeNewlines","breakableWhitespacePattern","squishBreakableWhitespace","source","summarizeStringChange","added","removed","utf16String","offset","codepoints","fromCodepoints","charAt","copyObject","objectsAreEqual","keys","arraysAreEqual","arrayStartsWith","spliceArray","summarizeArrayChange","getAllAttributeNames","getTextAttributeNames","getBlockAttributeNames","getBlockConfig","blockAttributes","getTextConfig","textAttributes","getListAttributeNames","listAttribute","documentElement","onElement","matchingSelector","withCallback","inPhase","times","destroy","findClosestElementFromNode","handleEventOnce","triggerEvent","elementMatchesSelector","untilNode","closest","findInnerElement","innerElementIsActive","activeElement","elementContainsNode","findNodeFromContainerAndOffset","TEXT_NODE","childNodes","item","findElementFromContainerAndOffset","findChildIndexOfNode","removeNode","walkTree","onlyNodesOfType","usingFilter","expandEntityReferences","NodeFilter","SHOW_ELEMENT","SHOW_TEXT","SHOW_COMMENT","SHOW_ALL","createTreeWalker","tagName","makeElement","editable","contenteditable","dataset","className","classList","textContent","getBlockTagNames","blockTagNames","nodeIsBlockContainer","nodeIsBlockStartComment","nodeProbablyIsBlockContainer","nodeIsBlockStart","strict","nodeIsCommentNode","COMMENT_NODE","nodeIsCursorTarget","nodeIsTextNode","trixCursorTarget","nodeIsAttachmentElement","AttachmentView","attachmentSelector","nodeIsEmptyTextNode","normalizeRange","isArray","rangeIsCollapsed","rangesAreEqual","defaultCSS","insertBefore","initialize","connect","initialized","connectedCallback","disconnectedCallback","Reflect","construct","setPrototypeOf","defineProperties","define","getDOMSelection","getSelection","rangeCount","getDOMRange","getRangeAt","setDOMRange","removeAllRanges","addRange","selectionChangeObserver","update","startContainer","endContainer","dataTransferIsPlainText","dataTransferIsWritable","keyEventIsKeyboardCommand","platform","RTL_PATTERN","getDirection","dir","dirName","trim","Hash","fromCommonAttributesOfObjects","getKeys","getKeysCommonToHash","merge","remove","isEmpty","array","toObject","toJSON","ObjectGroup","objects","depth","asTree","groupObjects","canBeGrouped","canBeGroupedWith","getObjects","getDepth","ObjectMap","find","ElementStore","reset","trixStoreKey","Operation","isPerforming","performing","hasPerformed","performed","hasSucceeded","succeeded","hasFailed","getPromise","perform","release","cancel","ucs2String","ucs2Length","fromUCS2String","offsetToUCS2Offset","max","offsetFromUCS2Offset","from","codePointAt","fromCodePoint","charCodeAt","fromCharCode","lang","attachFiles","bold","bullets","bytes","captionPlaceholder","code","heading1","indent","italic","numbers","outdent","quote","redo","strike","undo","unlink","urlPlaceholder","GB","KB","MB","PB","TB","css","attachment","attachmentCaption","attachmentCaptionEditor","attachmentMetadata","attachmentMetadataContainer","attachmentName","attachmentProgress","attachmentSize","attachmentToolbar","attachmentGallery","nestable","terminal","breakOnReturn","plaintext","bulletList","bullet","numberList","number","exclusive","fileSize","prefix","precision","formatter","byte","pow","toFixed","inheritable","getComputedStyle","fontWeight","fontStyle","groupTagName","frozen","backgroundColor","serializers","Document","fromHTML","toSerializableDocument","DocumentView","render","cloneNode","deserializers","serializeToContentType","deserializeFromContentType","toolbar","getDefaultHTML","undoInterval","attachments","preview","presentation","caption","size","file","keyNames","level2Enabled","getLevel","pickFiles","multiple","hidden","fileInputId","files","getElementById","ObjectView","childViews","rootView","getNodes","nodes","createNodes","invalidate","parentView","invalidateViewForObject","findViewForObject","findOrCreateCachedChildView","getCachedViewForObject","recordChildView","createChildView","cacheViewForObject","viewClass","ObjectGroupView","getAllChildViews","findElement","findElementForObject","getViewCache","isViewCachingEnabled","viewCache","shouldCacheViews","enableViewCaching","disableViewCaching","garbageCollectCachedViews","objectGroup","getChildViews","createContainerElement","Controller","didMutate","stop","mutations","findSignificantMutations","elementDidMutate","getMutationSummary","mutationIsSignificant","nodeIsMutable","nodesModifiedByMutation","nodeIsSignificant","getTextMutationSummary","getTextChangesFromCharacterData","additions","deletions","getTextChangesFromChildList","textAdded","textDeleted","getMutationsByType","FileVerificationOperation","FileReader","onerror","onload","abort","readAsArrayBuffer","InputController","mutationObserver","events","handlerFor","editorWillSyncDocumentView","editorDidSyncDocumentView","requestRender","inputControllerDidRequestRender","requestReparse","inputControllerDidRequestReparse","handleInput","inputControllerWillAttachFiles","responder","insertFiles","eventName","inputControllerWillHandleInput","inputControllerDidHandleInput","createLinkHTML","outerHTML","Level0InputController","resetInputSummary","setInputSummary","inputSummary","isComposing","inputControllerDidAllowUnhandledInput","mutationIsExpected","preferDocument","didDelete","getSelectedRange","positionIsBlockBreak","compositionInput","getEndData","keydown","didInput","keyCode","keyName","inputControllerDidReceiveKeyboardCommand","keypress","altKey","inputControllerWillPerformTyping","insertString","selectionIsExpanded","textInput","setSelectedRange","dragenter","dragstart","serializeSelectionToDataTransfer","dataTransfer","draggedRange","inputControllerDidStartDrag","dragover","canAcceptDataTransfer","clientX","clientY","draggingPoint","inputControllerDidReceiveDragOverPoint","dragend","inputControllerDidCancelDrag","drop","setLocationRangeFromPointRange","inputControllerWillMoveText","moveTextFromRange","insertDocument","cut","clipboardData","inputControllerWillCutText","deleteInDirection","copy","paste","R","k","D","L","testClipboardData","clipboard","getPastedHTMLUsingHiddenElement","inputControllerWillPaste","insertHTML","inputControllerDidPaste","string","types","items","getAsFile","insertFile","compositionstart","getCompositionInput","compositionupdate","compositionend","end","beforeinput","backspace","insertLineBreak","tab","canIncreaseNestingLevel","increaseNestingLevel","left","selectionIsInCursorTarget","moveCursorInDirection","right","control","updatePosition","canDecreaseNestingLevel","decreaseNestingLevel","expandSelectionInDirection","alt","isEnded","getSelectedDocument","Files","position","pageXOffset","top","pageYOffset","opacity","focus","which","charCode","inputController","isSignificant","insertPlaceholder","range","selectPlaceholder","forgetPlaceholder","canApplyToDocument","Level2InputController","scheduledRender","composing","reparse","scheduleRender","afterRender","shiftKey","withEvent","inputTypes","inputType","selectionContainsAttachments","dragging","point","ArrowLeft","shouldManageMovingCursorInDirection","ArrowRight","Backspace","shouldManageDeletingInDirection","Tab","deleteByComposition","recordUndoEntry","deleteByCut","deleteByDrag","withTargetDOMRange","deleteByDragRange","deleteCompositionText","deleteContent","deleteContentBackward","deleteContentForward","deleteEntireSoftLine","deleteHardLineBackward","deleteHardLineForward","deleteSoftLineBackward","deleteSoftLineForward","deleteWordBackward","deleteWordForward","formatBackColor","activateAttributeIfSupported","formatBold","toggleAttributeIfSupported","formatFontColor","formatFontName","formatIndent","formatItalic","formatJustifyCenter","formatJustifyFull","formatJustifyLeft","formatJustifyRight","formatOutdent","formatRemove","getCurrentAttributes","removeCurrentAttribute","formatSetBlockTextDirection","formatSetInlineTextDirection","formatStrikeThrough","formatSubscript","formatSuperscript","formatUnderline","historyRedo","inputControllerWillPerformRedo","historyUndo","inputControllerWillPerformUndo","insertCompositionText","insertFromComposition","insertFromDrop","insertFromPaste","insertFromYank","insertLink","insertOrderedList","insertParagraph","insertReplacementText","insertText","insertTranspose","insertUnorderedList","inputControllerWillPerformFormatting","toggleCurrentAttribute","setCurrentAttribute","getTargetDOMRange","minLength","getTargetRanges","createRange","setStart","startOffset","setEnd","endOffset","AttachmentEditorController","attachmentPiece","container","didBlurCaption","didChangeCaption","didInputCaption","didKeyDownCaption","didClickActionButton","didClickToolbar","install","undos","makeElementMutable","addToolbar","isPreviewable","installCaptionEditor","uninstall","savePendingCaption","didUninstallAttachmentEditor","pendingCaption","attachmentEditorDidRequestUpdatingAttributesForAttachment","attachmentEditorDidRequestRemovingAttributeForAttachment","trixMutable","title","trixAction","getFilename","getFormattedFilesize","placeholder","getCaption","tabIndex","height","scrollHeight","editCaption","attachmentEditorDidRequestRemovalOfAttachment","attachmentEditorDidRequestDeselectingAttachment","uploadProgressDelegate","piece","createContentNodes","getClassName","getHref","tabindex","hasContent","getContent","createCaptionElement","isPending","progressElement","getUploadProgress","getCaptionConfig","createTextNode","getType","getExtension","trixAttachment","trixContentType","getContentType","trixId","trixAttributes","trixSerialize","findProgressElement","attachmentDidChangeUploadProgress","PreviewableAttachmentView","previewDelegate","image","src","refresh","updateAttributesForImage","getURL","getPreviewURL","getWidth","getHeight","width","attachmentDidChangeAttributes","PieceView","getAttributes","textConfig","context","createAttachmentNodes","createStringNodes","preserveSpaces","styleProperty","isLast","isFirst","followsWhitespace","TextView","getPieces","hasAttribute","BlockView","block","createComment","getLastAttribute","shouldAddExtraNewlineElement","isRTL","getBlockBreakPosition","elementStore","setDocument","sync","shadowElement","getBlocks","isSynced","createDocumentFragmentForSync","lastChild","didSync","createDocumentFragment","replaceChild","CompositionController","composition","didClickAttachment","didBlur","didFocus","documentView","focused","compositionControllerDidFocus","blurPromise","compositionControllerDidBlur","findAttachmentForElement","compositionControllerDidSelectAttachment","getSerializableElement","isEditingAttachment","revision","canSyncDocumentView","compositionControllerWillSyncDocumentView","compositionControllerDidSyncDocumentView","compositionControllerDidRender","rerenderViewForObject","refreshViewCache","attachmentEditor","installAttachmentEditorForAttachment","uninstallAttachmentEditor","getAttachmentPieceForAttachment","compositionControllerWillUpdateAttachment","updateAttributesForAttachment","removeAttributeForAttachment","compositionControllerDidRequestRemovalOfAttachment","compositionControllerDidRequestDeselectingAttachment","getAttachmentById","parseInt","ToolbarController","didKeyDownDialogInput","didClickDialogButton","didClickAttributeButton","actions","resetDialogInputs","toolbarDidClickButton","getDialog","toggleDialog","toolbarDidInvokeAction","toolbarDidToggleAttribute","refreshAttributeButtons","hideDialog","updateActions","refreshActionButtons","eachActionButton","updateAttributes","eachAttributeButton","dialogIsVisible","applyKeyboardCommand","showDialog","toolbarWillShowDialog","select","toolbarDidShowDialog","willValidate","checkValidity","toolbarDidUpdateAttribute","toolbarDidRemoveAttribute","toolbarDidHideDialog","ImagePreloadOperation","Image","naturalWidth","naturalHeight","Attachment","releaseFile","didChangeAttributes","previewablePattern","attachmentForFile","attributesForFile","setFile","filename","filesize","contentType","setAttributes","preloadURL","getFilesize","getFile","preloadFile","releasePreloadedFile","uploadProgress","setUploadProgress","previewURL","preloadingURL","setPreviewURL","attachmentDidChangePreviewURL","preload","fileObjectURL","createObjectURL","revokeObjectURL","Piece","registerType","copyWithAttributes","getValue","copyWithAdditionalAttributes","copyWithoutAttribute","getAttributesHash","getCommonAttributes","pieceList","getPieceAtIndex","eachPiece","hasSameStringValueAsPiece","hasSameAttributesAsPiece","isBlockBreak","isSerializable","getLength","canBeConsolidatedWith","AttachmentPiece","ensureAttachmentExclusivelyHasAttribute","removeProhibitedAttributes","permittedAttributes","toConsole","StringPiece","consolidateWith","splitAtOffset","SplittableList","eachObject","insertObjectAtIndex","insertSplittableListAtIndex","insertSplittableListAtPosition","splitObjectAtPosition","editObjectAtIndex","replaceObjectAtIndex","removeObjectAtIndex","getObjectAtIndex","getSplittableListInRange","splitObjectsAtRange","selectSplittableList","removeObjectsInRange","transformObjectsInRange","getObjectAtPosition","findIndexAndOffsetAtPosition","index","consolidate","consolidateFromIndexToIndex","findPositionAtIndexAndOffset","getEndPosition","endPosition","Text","textForAttachmentWithAttributes","textForStringWithAttributes","copyWithPieceList","copyUsingObjectMap","appendText","insertTextAtPosition","removeTextAtRange","replaceTextAtRange","moveTextFromRangeToPosition","getTextAtRange","addAttributeAtRange","addAttributesAtRange","removeAttributeAtRange","setAttributesAtRange","getAttributesAtPosition","getCommonAttributesAtRange","getExpandedRangeForAttributeAtOffset","getStringAtRange","getStringAtPosition","startsWithString","endsWithString","getAttachmentPieces","getAttachments","getAttachmentAndPositionById","getRangeOfAttachment","getPieceAtPosition","toSerializableText","Block","copyWithText","copyWithoutText","copyWithoutAttributes","addAttribute","removeLastAttribute","getAttributeLevel","getAttributeAtLevel","hasAttributes","getLastNestableAttribute","getNestableAttributes","getNestingLevel","lastIndexOf","getListItemAttributes","isListItem","isTerminalBlock","breaksOnReturn","findLineBreakInDirectionFromPosition","getTextWithoutBlockBreak","blockBreak","HTMLSanitizer","allowedAttributes","forbiddenProtocols","forbiddenElements","sanitize","sanitizeElements","normalizeListElementNesting","getHTML","getBody","nextNode","currentNode","elementIsRemovable","sanitizeElement","previousElementSibling","elementIsForbidden","elementIsntSerializable","implementation","createHTMLDocument","HTMLParser","referenceElement","blocks","blockElements","processedElements","getDocument","createHiddenContainer","containerElement","processNode","translateBlockElementMarginsToNewlines","removeHiddenContainer","FILTER_REJECT","FILTER_ACCEPT","isInsignificantTextNode","appendBlockForTextNode","processTextNode","appendBlockForElement","processElement","currentBlockElement","isBlockElement","appendStringWithAttributes","getBlockAttributes","currentBlock","appendBlockForAttributesWithElement","findParentBlockElement","appendEmptyBlock","getTextAttributes","appendAttachmentWithAttributes","isExtraBR","appendPiece","appendStringToTextAtIndex","prependStringToTextAtIndex","unshift","findBlockElementAncestors","reverse","whiteSpace","getMarginOfDefaultBlockElement","getMarginOfBlockElementAtIndex","bottom","marginTop","marginBottom","blockList","fromString","getBlockAtIndex","consolidateBlocks","copyUsingObjectsFromDocument","copyWithBaseBlockAttributes","replaceBlock","insertDocumentAtRange","locationFromPosition","getBlockAtPosition","mergeDocumentAtRange","getBaseBlockAttributes","getBlockCount","insertTextAtRange","locationRangeFromRange","getDocumentAtRange","eachBlockAtRange","eachBlock","getTextAtIndex","insertBlockBreakAtRange","applyBlockAttributeAtRange","expandRangeToLineBreaksAndSplitBlocks","removeLastListAttributeAtRange","exceptAttributeName","convertLineBreaksToBlockBreaksInRange","removeBlockAttributesAtRange","removeLastTerminalAttributeAtRange","consolidateBlocksAtRange","positionFromLocation","getTextAtPosition","getCharacterAtPosition","getEditCount","editCount","getCommonAttributesAtPosition","getRangeOfCommonAttributeAtPosition","min","getLocationRangeOfAttachment","findRangesForBlockAttribute","findRangesForTextAttribute","withValue","locationRangeFromPosition","rangeFromLocationRange","getTexts","LineBreakInsertion","startPosition","startLocation","endLocation","previousCharacter","nextCharacter","shouldInsertBlockBreak","shouldBreakFormattedBlock","shouldDecreaseListLevel","shouldPrependListItem","shouldRemoveLastBlockAttribute","Composition","currentAttributes","refreshAttachments","compositionDidChangeDocument","getSnapshot","selectedRange","loadSnapshot","compositionWillLoadSnapshot","setSelection","compositionDidLoadSnapshot","notifyDelegateOfInsertionAtRange","insertBlock","getCurrentTextAttributes","insertBlockBreak","decreaseListLevel","removeLastBlockAttribute","breakFormattedBlock","replaceHTML","getLocationRange","compositionShouldAcceptFile","insertAttachments","insertAttachment","canDecreaseBlockAttributeLevel","getBlock","decreaseBlockAttributeLevel","getExpandedRangeInDirection","getAttachmentAtRange","editAttachment","removeAttachment","stopEditingAttachment","placeholderPosition","getPosition","hasCurrentAttribute","canSetCurrentAttribute","canSetCurrentBlockAttribute","canSetCurrentTextAttribute","setBlockAttribute","setTextAttribute","notifyDelegateOfCurrentAttributesChange","removeBlockAttribute","updateCurrentAttributes","removeTextAttribute","getPreviousBlock","ignoreLock","freezeSelection","thawSelection","hasFrozenSelection","compositionDidRequestChangingSelectionToLocationRange","getSelectionManager","setLocationRange","targetLocationRange","withTargetLocationRange","withTargetRange","createLocationRangeFromDOMRange","translateUTF16PositionFromOffset","editingAttachment","expandSelectionForEditing","expandSelectionAroundCommonAttribute","getSelectedAttachments","positionIsCursorTarget","locationIsCursorTarget","compositionDidRemoveAttachment","compositionDidAddAttachment","compositionDidEditAttachment","compositionDidChangeAttachmentPreviewURL","compositionDidStartEditingAttachment","compositionDidStopEditingAttachment","compositionDidChangeCurrentAttributes","compositionDidPerformInsertionAtRange","UndoManager","undoEntries","redoEntries","consolidatable","createEntry","description","snapshot","canUndo","canRedo","attachmentGalleryFilter","applyBlockAttribute","findRangesOfBlocks","findRangesOfPieces","moveSelectedRangeForward","Editor","selectionManager","undoManager","filters","loadDocument","loadHTML","loadJSON","getClientRectAtPosition","getClientRectAtLocationRange","activateAttribute","attributeIsActive","canActivateAttribute","deactivateAttribute","ManagedAttachment","attachmentManager","requestRemovalOfAttachment","AttachmentManager","managedAttachments","manageAttachment","attachmentIsManaged","attachmentManagerDidRequestRemovalOfAttachment","unmanageAttachment","LocationMapper","findLocationFromContainerAndOffset","findAttachmentElementParentForNode","findContainerAndOffsetFromLocation","findNodeAndOffsetFromLocation","getSignificantNodesForIndex","PointMapper","createDOMRangeFromPoint","caretPositionFromPoint","offsetNode","caretRangeFromPoint","createTextRange","moveToPoint","getClientRectsForDOMRange","getClientRects","SelectionChangeObserver","run","selectionManagers","started","registerSelectionManager","unregisterSelectionManager","notifySelectionManagersOfSelectionChange","selectionDidChange","domRange","SelectionManager","didMouseDown","locationMapper","pointMapper","lockCount","currentLocationRange","lockedLocationRange","createDOMRangeFromLocationRange","updateCurrentLocationRange","getLocationAtPoint","lock","unlock","clearSelection","selectionIsCollapsed","collapsed","domRangeWithinElement","pauseTemporarily","paused","locationRangeDidChange","EditorController","editorElement","compositionController","toolbarController","toolbarElement","editor","notifyEditorElement","handlingInput","updateCurrentActions","pasting","pastedRange","attachmentLocationRange","loadingSnapshot","isFocused","requestedLocationRange","compositionRevisionWhenLocationRangeRequested","renderedCompositionRevision","runEditorFilters","isFocusedInvisibly","requestedRender","recordTypingUndoEntry","recordFormattingUndoEntry","locationRangeBeforeDrag","invokeAction","selectionFrozen","dialogName","canInvokeAction","actionIsExternal","actionName","getCurrentActions","currentActions","updateInputElement","setInputElementValue","documentChangedSinceLastRender","notify","getUndoContext","getLocationContext","getTimeContext","getTime","ownerDocument","queryCommandSupported","execCommand","labels","contains","inputElement","editorController","defaultValue","registerResetListener","registerClickListener","unregisterResetListener","unregisterClickListener","resetListener","resetBubbled","clickListener","clickBubbled","activestorage","sparkMd5","factory","undefined$1","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","tail","tmp","lo","hi","state","substring","md51_array","subarray","Uint8Array","rhex","j","hex","toUtf8","str","unescape","utf8Str2ArrayBuffer","returnUInt8Array","buff","ArrayBuffer","arr","arrayBuffer2Utf8Str","concatenateArrayBuffers","first","second","byteLength","buffer","hexToBinaryString","substr","SparkMD5","clamp","val","to","num","targetArray","sourceArray","begin","appendBinary","contents","_buff","_length","_hash","raw","ret","_finish","getState","hash","setState","hashBinary","fileSlice","File","mozSlice","webkitSlice","FileChecksum","static","chunkSize","chunkCount","ceil","chunkIndex","md5Buffer","fileReader","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","btoa","getMetaValue","findElements","root","eventInit","undefined","BlobRecord","checksum","content_type","byte_size","responseType","requestDidLoad","requestDidError","_this$xhr","blob","direct_upload","directUploadData","BlobUpload","_blob$directUploadDat","headers","_this$xhr2","DirectUpload","upload","methodName","_len","messages","_key","DirectUploadController","directUpload","dispatch","hiddenInput","insertAdjacentElement","dispatchError","signed_id","uploadRequestDidProgress","progress","loaded","total","alert","directUploadWillCreateBlobWithXHR","directUploadWillStoreFileWithXHR","inputSelector","DirectUploadsController","controllers","createDirectUploadControllers","startNextController","controller","processingAttribute","submitButtonsByForm","didClick","didSubmitForm","didSubmitRemoteElement","handleFormSubmissionEvent","disable","enable","submitForm","delete","autostart","ActiveStorage","AttachmentUpload","directUploadUrl","directUploadDidComplete","sgid","attachable_sgid","createBlobUrl","signedId","blobUrlTemplate","Timeout","clearFn","_id","_clearFn","scope","setInterval","clearInterval","timeout","close","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","global","clearImmediate","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","process","handle","nextTick","runIfPresent","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","task","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","len","marker","runClearTimeout","Item","noop","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","uid","isNullOrUndef","isObject","isNumberFinite","Number","isFinite","finiteOrDefault","valueOrDefault","toDimension","dimension","endsWith","parseFloat","fn","thisArg","each","loopable","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","clone$1","klen","isValidKey","_merger","tval","sval","sources","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","resolver","parts","part","_splitKey","_getKeyResolver","_capitalize","defined","isFunction","setsEqual","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","roundedRange","round","almostEquals","niceRange","fraction","isNumber","isNaN","epsilon","abs","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","sqrt","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","table","cmp","mid","_lookupByKey","last","_rlookupByKey","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","_arrayUnique","requestAnimFrame","throttled","updateFn","updateArgs","ticking","_len2","rest","_key2","_toLeftRightCenter","align","_alignStartEnd","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","count","_sorted","iScale","_parsed","axis","_iScale$getUserBounds","getUserBounds","minDefined","maxDefined","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","assign","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","lim","p2b","n2b","b2n","n2p","map$1","B","F","h1","h2","eq","hexString","isShort","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","hueParse","exec","p1","p2","hwb2rgb","hsv2rgb","Z","Y","X","W","V","U","T","Q","P","O","N","M","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","nameParse","unpacked","tkeys","ok","nk","unpack","transparent","RGB_RE","modHSL","ratio","clone","proto","fromObject","functionParse","rgbParse","Color","_rgb","_valid","valid","rgbString","hslString","mix","color","weight","c1","c2","w2","w1","interpolate","rgb1","rgb2","alpha","clearer","greyscale","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","index_esm","isPatternOrGradient","getHoverColor","overrides","getScope$1","node","defaults","_descriptors","animation","borderColor","datasets","devicePixelRatio","chart","getDevicePixelRatio","font","family","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","override","route","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","_scriptable","startsWith","_indexable","_fallback","_measureText","gc","longest","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","area","margin","clipArea","clip","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","opts","lines","strokeWidth","strokeColor","line","setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","decorateText","translation","fillStyle","textAlign","textBaseline","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","_readValueToProps","props","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","toFontString","info","cacheable","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","_resolveWithPrefixes","getKeysFromAllScopes","includes","ownKeys","storage","_storage","_attachContext","proxy","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","descriptors","isScriptable","needsSubResolver","createSubResolver","_resolveScriptable","isIndexable","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_proxy$_scriptable","_proxy$_indexable","_proxy$_allKeys","_allKeys","readKey","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_this$_parsing$key","_parsing","parsed","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","current","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","delta","pointBefore","iPixel","vPixel","capControlPoint","pt","_updateBezierControlPoints","loop","controlPoints","spanGaps","cubicInterpolationMode","slopeDelta","splineCurveMonotone","prev","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","positions","getPositionedStyle","styles","suffix","pos","getRelativePosition","borderBox","boxSizing","paddings","borders","_getCanvasPosition","touches","offsetX","offsetY","useOffsetPos","getBoundingClientRect","getCanvasPosition","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","maxHeight","containerSize","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","readUsedSize","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","Map","formatNumber","locale","cacheKey","Intl","NumberFormat","getNumberFormat","format","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","_ref","_boundSegment","segment","bounds","startBound","endBound","_propertyFn2","_getSegment","_propertyFn","getSegment","inside","subStart","shouldStart","shouldStop","_boundSegments","segments","sub","splitByStyles","segmentOptions","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","p0","p0DataIndex","p1DataIndex","styleChanged","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","enumerableOnly","getOwnPropertySymbols","symbols","sym","_objectSpread","_defineProperty","getOwnPropertyDescriptors","_slicedToArray","_arrayWithHoles","_i","iterator","_s","_e","_arr","_n","_d","err","_iterableToArrayLimit","minLen","_arrayLikeToArray","_unsupportedIterableToArray","_nonIterableRest","arr2","animator","_request","_charts","_running","_lastDate","_notify","anims","date","callbacks","numSteps","duration","initial","currentStep","_refresh","_update","remaining","running","draw","_active","_total","tick","_getAnims","charts","listen","cb","reduce","acc","cur","_duration","interpolators","boolean","factor","c0","cfg","currentValue","_fn","_easing","easing","_start","delay","_loop","_target","_prop","_from","_to","_promises","remain","wait","promises","res","rej","resolved","colors","properties","resize","show","animations","visible","hide","_properties","configure","animatedProps","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","_ctx","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","linkScales","_stacked","addElements","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","base","datasetElementType","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","getLabels","singleScale","_this$_parsing","_this$_parsing$xAxisK","xAxisKey","_this$_parsing$yAxisK","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","createStack","NEGATIVE_INFINITY","_getUserBounds","_scale$getUserBounds","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","_clip","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","names","resolveNamedOptions","freeze","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","_ref2","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","_sync","_args2","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","getAllScaleValues","curr","updateMinAndPrev","ticks","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","_borderProps","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","_ref3","inflateAmount","_this$_parsing2","_this$_parsing2$xAxis","_this$_parsing2$yAxis","iAxisKey","vAxisKey","super","bars","getBasePixel","isHorizontal","ruler","_getRuler","_this$_getSharedOptio","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","grouped","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","_this$_cachedMeta","_this$options","baseValue","minBarLength","actualBase","floating","getDataVisibility","barSign","startPixel","getPixelForDecimal","endPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","_index_","grid","_value_","beginAtZero","_this$_cachedMeta2","_this$_getSharedOptio2","tooltip","innerRadius","outerRadius","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","_this$_getRotationExt","_getRatioAndOffset","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_this$_getSharedOptio3","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","_meta$data","_dataset","_getStartAndCountOfVi","_decimated","animated","_this$_cachedMeta3","_this$_getSharedOptio4","_this$options2","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","updateControlPoints","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","_fullLoop","pointPosition","getPointPositionForValue","tooltipPosition","useFinalPosition","_this$getProps","getProps","hasValue","final","defaultRoutes","formatters","numeric","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","autoSkip","tickOpts","ticksLimit","maxTicksLimit","tickLength","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","majorIndices","major","enabled","getMajorIndices","numMajorIndices","newTicks","skipMajors","evenMajorSpacing","diff","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","grace","drawBorder","drawOnChartArea","drawTicks","tickWidth","tickColor","padding","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","minor","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_reversePixels","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","init","suggestedMin","suggestedMax","_this$getUserBounds","metas","getPadding","getTicks","xLabels","yLabels","beforeLayout","beforeUpdate","_this$options3","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","change","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","_this$options4","titleOpts","gridOpts","titleHeight","_this$_getLabelSizes","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","_this$options5","_this$options5$ticks","isRotated","labelsBelowTicks","offsetLeft","offsetRight","_this$options6","isFullSize","fullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","getValueForPixel","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","step","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","_computeLabelItems","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","backdrop","tickTextAlign","labelPadding","_this$options7","_this$options8","_this$options8$ticks","_computeLabelArea","drawBackground","fillRect","findIndex","drawGrid","drawLine","setLineDash","lineDashOffset","lastLineWidth","drawLabels","drawTitle","_this$options9","_titleArgs","titleX","titleY","titleArgs","_layers","tz","z","gz","getSortedVisibleDatasetMetas","axisID","_maxDigits","fontSize","isForType","isPrototypeOf","parentScope","isIChartComponent","itemDefaults","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","_typedRegistries","_each","addControllers","_len3","_key3","_len4","_key4","addPlugins","_len5","_key5","addScales","_len6","_key6","getController","_get","getElement","getPlugin","getScale","removeControllers","_len7","_key7","removeElements","_len8","_key8","removePlugins","_len9","_key9","removeScales","_len10","_key10","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","_meta$data2","_getStartAndCountOfVi2","_this$_cachedMeta4","_this$options10","BarController","BubbleController","DoughnutController","LineController","PolarAreaController","RadarController","ScatterController","DateAdapter","chartOptions","formats","timestamp","amount","unit","startOf","weekday","endOf","members","adapters","_date","binarySearch","metaset","lookupMethod","getRange","evaluateInteractionItems","_metasets$i","_binarySearch","getIntersectItems","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestItems","_element$getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","layout","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","_updateDims","setBoxDims","placeBoxes","userPadding","autoPadding","addBox","removeBox","layoutItem","minPadding","layoutBoxes","_box","_box$options","_box$options$stackWei","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","updatePos","handleMaxPadding","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","BasicPlatform","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","nodeListContains","nodeList","createAttachObserver","entries","trigger","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","unlistenDevicePixelRatioChanges","createProxyAndListen","_getRelativePosition","fromNativeEvent","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","isConnected","_init","hook","_createDescriptors","descriptor","plugin","_oldCache","_notifyStateChanges","localIds","allPlugins","_ref4","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","_ref5","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","_config","initConfig","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","_getResolver","getResolver","subPrefixes","_descriptors2","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","animationOptions","onComplete","onAnimationProgress","onProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","_doResize","debounce","resizeDelay","_initialize","_this$options11","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_defaults$datasets$ty","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","_ref6","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","_this$_resizeBeforeDr","layers","_drawDatasets","_drawDataset","useClip","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","_ref7","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_this$_active","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","invalidatePlugins","clipArc","pixelMargin","angleMargin","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","avNogSpacingRadius","angleOffset","_parseBorderRadius$","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","outerStartX","outerStartY","outerEndX","outerEndY","inner","lineJoin","fullCircles","drawFullCircleBorders","chartX","chartY","_getAngleFromPoint2","_this$getProps2","rAdjust","betweenAngles","withinRadius","_this$getProps3","_this$options12","halfAngle","halfRadius","radiusOffset","drawArc","setStyle","lineCap","pathVars","_params$start","paramsStart","_params$end","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","_pathVars","lineMethod","stepped","getLineMethod","_ref8","_ref8$move","fastPathSegment","_pathVars2","_ref9","_ref9$move","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","path","_path","strokePathWithCache","segmentMethod","strokePathDirect","_points","_segments","_pointsUpdated","_findStartAndEnd","findStartAndEnd","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","_segments$i","interpolated","inRange$1","hitRadius","mouseX","mouseY","_this$getProps4","inXRange","inYRange","_this$getProps5","hoverRadius","getBarBounds","bar","_bar$getProps","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","outer","skipX","skipY","addNormalRectPath","inflateRect","refRect","_this$options13","_boundingRects","addRectPath","_this$getProps6","ArcElement","LineElement","PointElement","BarElement","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","_getStartAndCountOfVi3","getStartAndCountOfVisiblePointsSimplified","threshold","decimated","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","_data$a","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","_ref10","_ref10$x","_ref10$y","linePoints","_ref11","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","_findPoint","findPoint","pointValue","firstValue","lastValue","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_source$scale","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","_ref12","_ref12$above","above","_ref12$below","clipVertical","doFill","clipY","lineLoop","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","_ref13","_src$style","_src$style2$backgroun","notShape","clipBounds","interpolatedLineTo","targetLoop","_scale$chart$chartAre","_ref14","interpolatedPoint","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","_labelOpts$boxHeight","boxHeight","_labelOpts$boxWidth","boxWidth","usePointStyle","pointStyleWidth","itemHeight","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_getBoxSize","_fitRows","_fitCols","hitboxes","totalHeight","row","heightLimit","totalWidth","currentColWidth","currentColHeight","col","adjustHitBoxes","_this$options14","rtlHelper","hitbox","_draw","defaultColor","fontColor","halfFontSize","cursor","_getBoxSize2","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","onLeave","isListened","hoveredItem","sameItem","plugin_legend","_element","afterEvent","ci","_chart$legend$options","_padding","textSize","_drawArgs","fontOpts","_this$_drawArgs","plugin_title","titleBlock","createTitle","plugin_subtitle","positioners","average","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","_controller$getLabelA","getTooltipSize","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","_chart$chartArea","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","_toTRBLCorners","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","getTitle","beforeTitle","afterTitle","getBeforeBody","bodyItems","scoped","beforeLabel","afterLabel","getAfterBody","getFooter","beforeFooter","afterFooter","_createItems","itemSort","labelColor","labelPointStyle","labelTextColor","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","_toTRBLCorners2","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","bodyColor","drawFooter","footerAlign","footerColor","tooltipSize","_toTRBLCorners3","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","_ref15","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","labelCount","Decimation","Filler","Legend","SubTitle","Title","Tooltip","findOrAddLabel","addedLabels","addIfString","_startValue","_valueRange","_addedLabels","_ref16","_this$getUserBounds2","_this$getMinMax","generateTicks$1","generationOptions","dataRange","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","relativeLabelSize","_ref17","_endValue","handleTickRangeOptions","_this$getUserBounds3","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","getTickLimit","stepSize","computeTickLimit","_this$getMinMax2","isMajor","tickVal","_zero","_this$getMinMax3","_this$getUserBounds4","exp","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","updateLimits","setCenterPoint","_pointLabelItems","extra","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","buildPointLabelItems","hLimits","vLimits","pathRadiusLine","_this$getMinMax4","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","_this$_pointLabelItem","_this$options15","_scale$_pointLabelIte","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","gridLineOpts","drawRadiusLine","animate","INTERVALS","millisecond","common","steps","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","_scale$_parseOpts","_parseOpts","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","addTick","time","timestamps","_lookup2","ticksFromTimestamps","majorUnit","setMajorTicks","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_this$getUserBounds5","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","_lookupByKey2","_table$lo","_table$hi","_lookupByKey3","_table$lo2","_table$hi2","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables","CategoryScale","LinearScale","LogarithmicScale","RadialLinearScale","TimeScale","Chart","CHARTS","currentChart","toggleChart","oldChart","chartData","buildRigChart","reloadCard","fetch","newContent","card","getElementsByClassName","statisticType","newData","updateChart","AstronomerPage","SessionPage","require"],"mappings":"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","file":"js/application-74e5fd3ebd164220a11e.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n","/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/assets/javascripts\nReleased under the MIT license\n */;\n(function () {\n  var context = this;\n  (function () {\n    (function () {\n      this.Rails = {\n        linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n        buttonClickSelector: {\n          selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n          exclude: 'form button'\n        },\n        inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n        formSubmitSelector: 'form:not([data-turbo=true])',\n        formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n        formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n        formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n        fileInputSelector: 'input[name][type=file]:not([disabled])',\n        linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n        buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n      };\n    }).call(this);\n  }).call(context);\n  var Rails = context.Rails;\n  (function () {\n    (function () {\n      var nonce;\n      nonce = null;\n      Rails.loadCSPNonce = function () {\n        var ref;\n        return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n      };\n      Rails.cspNonce = function () {\n        return nonce != null ? nonce : Rails.loadCSPNonce();\n      };\n    }).call(this);\n    (function () {\n      var expando, m;\n      m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n      Rails.matches = function (element, selector) {\n        if (selector.exclude != null) {\n          return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n        } else {\n          return m.call(element, selector);\n        }\n      };\n      expando = '_ujsData';\n      Rails.getData = function (element, key) {\n        var ref;\n        return (ref = element[expando]) != null ? ref[key] : void 0;\n      };\n      Rails.setData = function (element, key, value) {\n        if (element[expando] == null) {\n          element[expando] = {};\n        }\n        return element[expando][key] = value;\n      };\n      Rails.isContentEditable = function (element) {\n        var isEditable;\n        isEditable = false;\n        while (true) {\n          if (element.isContentEditable) {\n            isEditable = true;\n            break;\n          }\n          element = element.parentElement;\n          if (!element) {\n            break;\n          }\n        }\n        return isEditable;\n      };\n      Rails.$ = function (selector) {\n        return Array.prototype.slice.call(document.querySelectorAll(selector));\n      };\n    }).call(this);\n    (function () {\n      var $, csrfParam, csrfToken;\n      $ = Rails.$;\n      csrfToken = Rails.csrfToken = function () {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-token]');\n        return meta && meta.content;\n      };\n      csrfParam = Rails.csrfParam = function () {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-param]');\n        return meta && meta.content;\n      };\n      Rails.CSRFProtection = function (xhr) {\n        var token;\n        token = csrfToken();\n        if (token != null) {\n          return xhr.setRequestHeader('X-CSRF-Token', token);\n        }\n      };\n      Rails.refreshCSRFTokens = function () {\n        var param, token;\n        token = csrfToken();\n        param = csrfParam();\n        if (token != null && param != null) {\n          return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n            return input.value = token;\n          });\n        }\n      };\n    }).call(this);\n    (function () {\n      var CustomEvent, fire, matches, preventDefault;\n      matches = Rails.matches;\n      CustomEvent = window.CustomEvent;\n      if (typeof CustomEvent !== 'function') {\n        CustomEvent = function (event, params) {\n          var evt;\n          evt = document.createEvent('CustomEvent');\n          evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n          return evt;\n        };\n        CustomEvent.prototype = window.Event.prototype;\n        preventDefault = CustomEvent.prototype.preventDefault;\n        CustomEvent.prototype.preventDefault = function () {\n          var result;\n          result = preventDefault.call(this);\n          if (this.cancelable && !this.defaultPrevented) {\n            Object.defineProperty(this, 'defaultPrevented', {\n              get: function () {\n                return true;\n              }\n            });\n          }\n          return result;\n        };\n      }\n      fire = Rails.fire = function (obj, name, data) {\n        var event;\n        event = new CustomEvent(name, {\n          bubbles: true,\n          cancelable: true,\n          detail: data\n        });\n        obj.dispatchEvent(event);\n        return !event.defaultPrevented;\n      };\n      Rails.stopEverything = function (e) {\n        fire(e.target, 'ujs:everythingStopped');\n        e.preventDefault();\n        e.stopPropagation();\n        return e.stopImmediatePropagation();\n      };\n      Rails.delegate = function (element, selector, eventType, handler) {\n        return element.addEventListener(eventType, function (e) {\n          var target;\n          target = e.target;\n          while (!(!(target instanceof Element) || matches(target, selector))) {\n            target = target.parentNode;\n          }\n          if (target instanceof Element && handler.call(target, e) === false) {\n            e.preventDefault();\n            return e.stopPropagation();\n          }\n        });\n      };\n    }).call(this);\n    (function () {\n      var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n      cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n      AcceptHeaders = {\n        '*': '*/*',\n        text: 'text/plain',\n        html: 'text/html',\n        xml: 'application/xml, text/xml',\n        json: 'application/json, text/javascript',\n        script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n      };\n      Rails.ajax = function (options) {\n        var xhr;\n        options = prepareOptions(options);\n        xhr = createXHR(options, function () {\n          var ref, response;\n          response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n          if (Math.floor(xhr.status / 100) === 2) {\n            if (typeof options.success === \"function\") {\n              options.success(response, xhr.statusText, xhr);\n            }\n          } else {\n            if (typeof options.error === \"function\") {\n              options.error(response, xhr.statusText, xhr);\n            }\n          }\n          return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n        });\n        if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n          return false;\n        }\n        if (xhr.readyState === XMLHttpRequest.OPENED) {\n          return xhr.send(options.data);\n        }\n      };\n      prepareOptions = function (options) {\n        options.url = options.url || location.href;\n        options.type = options.type.toUpperCase();\n        if (options.type === 'GET' && options.data) {\n          if (options.url.indexOf('?') < 0) {\n            options.url += '?' + options.data;\n          } else {\n            options.url += '&' + options.data;\n          }\n        }\n        if (AcceptHeaders[options.dataType] == null) {\n          options.dataType = '*';\n        }\n        options.accept = AcceptHeaders[options.dataType];\n        if (options.dataType !== '*') {\n          options.accept += ', */*; q=0.01';\n        }\n        return options;\n      };\n      createXHR = function (options, done) {\n        var xhr;\n        xhr = new XMLHttpRequest();\n        xhr.open(options.type, options.url, true);\n        xhr.setRequestHeader('Accept', options.accept);\n        if (typeof options.data === 'string') {\n          xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n        }\n        if (!options.crossDomain) {\n          xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n          CSRFProtection(xhr);\n        }\n        xhr.withCredentials = !!options.withCredentials;\n        xhr.onreadystatechange = function () {\n          if (xhr.readyState === XMLHttpRequest.DONE) {\n            return done(xhr);\n          }\n        };\n        return xhr;\n      };\n      processResponse = function (response, type) {\n        var parser, script;\n        if (typeof response === 'string' && typeof type === 'string') {\n          if (type.match(/\\bjson\\b/)) {\n            try {\n              response = JSON.parse(response);\n            } catch (error) {}\n          } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n            script = document.createElement('script');\n            script.setAttribute('nonce', cspNonce());\n            script.text = response;\n            document.head.appendChild(script).parentNode.removeChild(script);\n          } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n            parser = new DOMParser();\n            type = type.replace(/;.+/, '');\n            try {\n              response = parser.parseFromString(response, type);\n            } catch (error) {}\n          }\n        }\n        return response;\n      };\n      Rails.href = function (element) {\n        return element.href;\n      };\n      Rails.isCrossDomain = function (url) {\n        var e, originAnchor, urlAnchor;\n        originAnchor = document.createElement('a');\n        originAnchor.href = location.href;\n        urlAnchor = document.createElement('a');\n        try {\n          urlAnchor.href = url;\n          return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n        } catch (error) {\n          e = error;\n          return true;\n        }\n      };\n    }).call(this);\n    (function () {\n      var matches, toArray;\n      matches = Rails.matches;\n      toArray = function (e) {\n        return Array.prototype.slice.call(e);\n      };\n      Rails.serializeElement = function (element, additionalParam) {\n        var inputs, params;\n        inputs = [element];\n        if (matches(element, 'form')) {\n          inputs = toArray(element.elements);\n        }\n        params = [];\n        inputs.forEach(function (input) {\n          if (!input.name || input.disabled) {\n            return;\n          }\n          if (matches(input, 'fieldset[disabled] *')) {\n            return;\n          }\n          if (matches(input, 'select')) {\n            return toArray(input.options).forEach(function (option) {\n              if (option.selected) {\n                return params.push({\n                  name: input.name,\n                  value: option.value\n                });\n              }\n            });\n          } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n            return params.push({\n              name: input.name,\n              value: input.value\n            });\n          }\n        });\n        if (additionalParam) {\n          params.push(additionalParam);\n        }\n        return params.map(function (param) {\n          if (param.name != null) {\n            return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n          } else {\n            return param;\n          }\n        }).join('&');\n      };\n      Rails.formElements = function (form, selector) {\n        if (matches(form, 'form')) {\n          return toArray(form.elements).filter(function (el) {\n            return matches(el, selector);\n          });\n        } else {\n          return toArray(form.querySelectorAll(selector));\n        }\n      };\n    }).call(this);\n    (function () {\n      var allowAction, fire, stopEverything;\n      fire = Rails.fire, stopEverything = Rails.stopEverything;\n      Rails.handleConfirm = function (e) {\n        if (!allowAction(this)) {\n          return stopEverything(e);\n        }\n      };\n      Rails.confirm = function (message, element) {\n        return confirm(message);\n      };\n      allowAction = function (element) {\n        var answer, callback, message;\n        message = element.getAttribute('data-confirm');\n        if (!message) {\n          return true;\n        }\n        answer = false;\n        if (fire(element, 'confirm')) {\n          try {\n            answer = Rails.confirm(message, element);\n          } catch (error) {}\n          callback = fire(element, 'confirm:complete', [answer]);\n        }\n        return answer && callback;\n      };\n    }).call(this);\n    (function () {\n      var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isContentEditable, isXhrRedirect, matches, setData, stopEverything;\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements, isContentEditable = Rails.isContentEditable;\n      Rails.handleDisabledElement = function (e) {\n        var element;\n        element = this;\n        if (element.disabled) {\n          return stopEverything(e);\n        }\n      };\n      Rails.enableElement = function (e) {\n        var element;\n        if (e instanceof Event) {\n          if (isXhrRedirect(e)) {\n            return;\n          }\n          element = e.target;\n        } else {\n          element = e;\n        }\n        if (isContentEditable(element)) {\n          return;\n        }\n        if (matches(element, Rails.linkDisableSelector)) {\n          return enableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n          return enableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return enableFormElements(element);\n        }\n      };\n      Rails.disableElement = function (e) {\n        var element;\n        element = e instanceof Event ? e.target : e;\n        if (isContentEditable(element)) {\n          return;\n        }\n        if (matches(element, Rails.linkDisableSelector)) {\n          return disableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n          return disableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return disableFormElements(element);\n        }\n      };\n      disableLinkElement = function (element) {\n        var replacement;\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n        replacement = element.getAttribute('data-disable-with');\n        if (replacement != null) {\n          setData(element, 'ujs:enable-with', element.innerHTML);\n          element.innerHTML = replacement;\n        }\n        element.addEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', true);\n      };\n      enableLinkElement = function (element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n        if (originalText != null) {\n          element.innerHTML = originalText;\n          setData(element, 'ujs:enable-with', null);\n        }\n        element.removeEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', null);\n      };\n      disableFormElements = function (form) {\n        return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n      };\n      disableFormElement = function (element) {\n        var replacement;\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n        replacement = element.getAttribute('data-disable-with');\n        if (replacement != null) {\n          if (matches(element, 'button')) {\n            setData(element, 'ujs:enable-with', element.innerHTML);\n            element.innerHTML = replacement;\n          } else {\n            setData(element, 'ujs:enable-with', element.value);\n            element.value = replacement;\n          }\n        }\n        element.disabled = true;\n        return setData(element, 'ujs:disabled', true);\n      };\n      enableFormElements = function (form) {\n        return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n      };\n      enableFormElement = function (element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n        if (originalText != null) {\n          if (matches(element, 'button')) {\n            element.innerHTML = originalText;\n          } else {\n            element.value = originalText;\n          }\n          setData(element, 'ujs:enable-with', null);\n        }\n        element.disabled = false;\n        return setData(element, 'ujs:disabled', null);\n      };\n      isXhrRedirect = function (event) {\n        var ref, xhr;\n        xhr = (ref = event.detail) != null ? ref[0] : void 0;\n        return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n      };\n    }).call(this);\n    (function () {\n      var isContentEditable, stopEverything;\n      stopEverything = Rails.stopEverything;\n      isContentEditable = Rails.isContentEditable;\n      Rails.handleMethod = function (e) {\n        var csrfParam, csrfToken, form, formContent, href, link, method;\n        link = this;\n        method = link.getAttribute('data-method');\n        if (!method) {\n          return;\n        }\n        if (isContentEditable(this)) {\n          return;\n        }\n        href = Rails.href(link);\n        csrfToken = Rails.csrfToken();\n        csrfParam = Rails.csrfParam();\n        form = document.createElement('form');\n        formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n        if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n          formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n        }\n        formContent += '<input type=\"submit\" />';\n        form.method = 'post';\n        form.action = href;\n        form.target = link.target;\n        form.innerHTML = formContent;\n        form.style.display = 'none';\n        document.body.appendChild(form);\n        form.querySelector('[type=\"submit\"]').click();\n        return stopEverything(e);\n      };\n    }).call(this);\n    (function () {\n      var ajax,\n        fire,\n        getData,\n        isContentEditable,\n        isCrossDomain,\n        isRemote,\n        matches,\n        serializeElement,\n        setData,\n        stopEverything,\n        slice = [].slice;\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement, isContentEditable = Rails.isContentEditable;\n      isRemote = function (element) {\n        var value;\n        value = element.getAttribute('data-remote');\n        return value != null && value !== 'false';\n      };\n      Rails.handleRemote = function (e) {\n        var button, data, dataType, element, method, url, withCredentials;\n        element = this;\n        if (!isRemote(element)) {\n          return true;\n        }\n        if (!fire(element, 'ajax:before')) {\n          fire(element, 'ajax:stopped');\n          return false;\n        }\n        if (isContentEditable(element)) {\n          fire(element, 'ajax:stopped');\n          return false;\n        }\n        withCredentials = element.getAttribute('data-with-credentials');\n        dataType = element.getAttribute('data-type') || 'script';\n        if (matches(element, Rails.formSubmitSelector)) {\n          button = getData(element, 'ujs:submit-button');\n          method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n          url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n          if (method.toUpperCase() === 'GET') {\n            url = url.replace(/\\?.*$/, '');\n          }\n          if (element.enctype === 'multipart/form-data') {\n            data = new FormData(element);\n            if (button != null) {\n              data.append(button.name, button.value);\n            }\n          } else {\n            data = serializeElement(element, button);\n          }\n          setData(element, 'ujs:submit-button', null);\n          setData(element, 'ujs:submit-button-formmethod', null);\n          setData(element, 'ujs:submit-button-formaction', null);\n        } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n          method = element.getAttribute('data-method');\n          url = element.getAttribute('data-url');\n          data = serializeElement(element, element.getAttribute('data-params'));\n        } else {\n          method = element.getAttribute('data-method');\n          url = Rails.href(element);\n          data = element.getAttribute('data-params');\n        }\n        ajax({\n          type: method || 'GET',\n          url: url,\n          data: data,\n          dataType: dataType,\n          beforeSend: function (xhr, options) {\n            if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n              return fire(element, 'ajax:send', [xhr]);\n            } else {\n              fire(element, 'ajax:stopped');\n              return false;\n            }\n          },\n          success: function () {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:success', args);\n          },\n          error: function () {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:error', args);\n          },\n          complete: function () {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:complete', args);\n          },\n          crossDomain: isCrossDomain(url),\n          withCredentials: withCredentials != null && withCredentials !== 'false'\n        });\n        return stopEverything(e);\n      };\n      Rails.formSubmitButtonClick = function (e) {\n        var button, form;\n        button = this;\n        form = button.form;\n        if (!form) {\n          return;\n        }\n        if (button.name) {\n          setData(form, 'ujs:submit-button', {\n            name: button.name,\n            value: button.value\n          });\n        }\n        setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n        setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n        return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n      };\n      Rails.preventInsignificantClick = function (e) {\n        var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n        link = this;\n        method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n        data = link.getAttribute('data-params');\n        metaClick = e.metaKey || e.ctrlKey;\n        insignificantMetaClick = metaClick && method === 'GET' && !data;\n        nonPrimaryMouseClick = e.button != null && e.button !== 0;\n        if (nonPrimaryMouseClick || insignificantMetaClick) {\n          return e.stopImmediatePropagation();\n        }\n      };\n    }).call(this);\n    (function () {\n      var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n      fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n      if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n        if (jQuery.rails) {\n          throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n        }\n        jQuery.rails = Rails;\n        jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n          if (!options.crossDomain) {\n            return CSRFProtection(xhr);\n          }\n        });\n      }\n      Rails.start = function () {\n        if (window._rails_loaded) {\n          throw new Error('rails-ujs has already been loaded!');\n        }\n        window.addEventListener('pageshow', function () {\n          $(Rails.formEnableSelector).forEach(function (el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n          return $(Rails.linkDisableSelector).forEach(function (el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n        });\n        delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.linkClickSelector, 'click', disableElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n        delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n        delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n        delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n        delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n        delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n          return setTimeout(function () {\n            return disableElement(e);\n          }, 13);\n        });\n        delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n        delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n        document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n        document.addEventListener('DOMContentLoaded', loadCSPNonce);\n        return window._rails_loaded = true;\n      };\n      if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n        Rails.start();\n      }\n    }).call(this);\n  }).call(this);\n  if (typeof module === \"object\" && module.exports) {\n    module.exports = Rails;\n  } else if (typeof define === \"function\" && define.amd) {\n    define(Rails);\n  }\n}).call(this);","var g;\n\n// This works in non-strict mode\ng = function () {\n  return this;\n}();\ntry {\n  // This works if eval is allowed (see CSP)\n  g = g || new Function(\"return this\")();\n} catch (e) {\n  // This works if the window reference is available\n  if (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;","/*\nTrix 1.3.1\nCopyright © 2020 Basecamp, LLC\nhttp://trix-editor.org/\n */\n(function () {}).call(this), function () {\n  var t;\n  null == window.Set && (window.Set = t = function () {\n    function t() {\n      this.clear();\n    }\n    return t.prototype.clear = function () {\n      return this.values = [];\n    }, t.prototype.has = function (t) {\n      return -1 !== this.values.indexOf(t);\n    }, t.prototype.add = function (t) {\n      return this.has(t) || this.values.push(t), this;\n    }, t.prototype[\"delete\"] = function (t) {\n      var e;\n      return -1 === (e = this.values.indexOf(t)) ? !1 : (this.values.splice(e, 1), !0);\n    }, t.prototype.forEach = function () {\n      var t;\n      return (t = this.values).forEach.apply(t, arguments);\n    }, t;\n  }());\n}.call(this), function (t) {\n  function e() {}\n  function n(t, e) {\n    return function () {\n      t.apply(e, arguments);\n    };\n  }\n  function i(t) {\n    if (\"object\" != typeof this) throw new TypeError(\"Promises must be constructed via new\");\n    if (\"function\" != typeof t) throw new TypeError(\"not a function\");\n    this._state = 0, this._handled = !1, this._value = void 0, this._deferreds = [], c(t, this);\n  }\n  function o(t, e) {\n    for (; 3 === t._state;) t = t._value;\n    return 0 === t._state ? void t._deferreds.push(e) : (t._handled = !0, void h(function () {\n      var n = 1 === t._state ? e.onFulfilled : e.onRejected;\n      if (null === n) return void (1 === t._state ? r : s)(e.promise, t._value);\n      var i;\n      try {\n        i = n(t._value);\n      } catch (o) {\n        return void s(e.promise, o);\n      }\n      r(e.promise, i);\n    }));\n  }\n  function r(t, e) {\n    try {\n      if (e === t) throw new TypeError(\"A promise cannot be resolved with itself.\");\n      if (e && (\"object\" == typeof e || \"function\" == typeof e)) {\n        var o = e.then;\n        if (e instanceof i) return t._state = 3, t._value = e, void a(t);\n        if (\"function\" == typeof o) return void c(n(o, e), t);\n      }\n      t._state = 1, t._value = e, a(t);\n    } catch (r) {\n      s(t, r);\n    }\n  }\n  function s(t, e) {\n    t._state = 2, t._value = e, a(t);\n  }\n  function a(t) {\n    2 === t._state && 0 === t._deferreds.length && setTimeout(function () {\n      t._handled || p(t._value);\n    }, 1);\n    for (var e = 0, n = t._deferreds.length; n > e; e++) o(t, t._deferreds[e]);\n    t._deferreds = null;\n  }\n  function u(t, e, n) {\n    this.onFulfilled = \"function\" == typeof t ? t : null, this.onRejected = \"function\" == typeof e ? e : null, this.promise = n;\n  }\n  function c(t, e) {\n    var n = !1;\n    try {\n      t(function (t) {\n        n || (n = !0, r(e, t));\n      }, function (t) {\n        n || (n = !0, s(e, t));\n      });\n    } catch (i) {\n      if (n) return;\n      n = !0, s(e, i);\n    }\n  }\n  var l = setTimeout,\n    h = \"function\" == typeof setImmediate && setImmediate || function (t) {\n      l(t, 1);\n    },\n    p = function (t) {\n      \"undefined\" != typeof console && console && console.warn(\"Possible Unhandled Promise Rejection:\", t);\n    };\n  i.prototype[\"catch\"] = function (t) {\n    return this.then(null, t);\n  }, i.prototype.then = function (t, n) {\n    var r = new i(e);\n    return o(this, new u(t, n, r)), r;\n  }, i.all = function (t) {\n    var e = Array.prototype.slice.call(t);\n    return new i(function (t, n) {\n      function i(r, s) {\n        try {\n          if (s && (\"object\" == typeof s || \"function\" == typeof s)) {\n            var a = s.then;\n            if (\"function\" == typeof a) return void a.call(s, function (t) {\n              i(r, t);\n            }, n);\n          }\n          e[r] = s, 0 === --o && t(e);\n        } catch (u) {\n          n(u);\n        }\n      }\n      if (0 === e.length) return t([]);\n      for (var o = e.length, r = 0; r < e.length; r++) i(r, e[r]);\n    });\n  }, i.resolve = function (t) {\n    return t && \"object\" == typeof t && t.constructor === i ? t : new i(function (e) {\n      e(t);\n    });\n  }, i.reject = function (t) {\n    return new i(function (e, n) {\n      n(t);\n    });\n  }, i.race = function (t) {\n    return new i(function (e, n) {\n      for (var i = 0, o = t.length; o > i; i++) t[i].then(e, n);\n    });\n  }, i._setImmediateFn = function (t) {\n    h = t;\n  }, i._setUnhandledRejectionFn = function (t) {\n    p = t;\n  }, \"undefined\" != typeof module && module.exports ? module.exports = i : t.Promise || (t.Promise = i);\n}(this), function () {\n  var t = \"object\" == typeof window.customElements,\n    e = \"function\" == typeof document.registerElement,\n    n = t || e;\n  n || (\n  /**\n  * @license\n  * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n  * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n  * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n  * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n  * Code distributed by Google as part of the polymer project is also\n  * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n  */\n  \"undefined\" == typeof WeakMap && !function () {\n    var t = Object.defineProperty,\n      e = Date.now() % 1e9,\n      n = function () {\n        this.name = \"__st\" + (1e9 * Math.random() >>> 0) + (e++ + \"__\");\n      };\n    n.prototype = {\n      set: function (e, n) {\n        var i = e[this.name];\n        return i && i[0] === e ? i[1] = n : t(e, this.name, {\n          value: [e, n],\n          writable: !0\n        }), this;\n      },\n      get: function (t) {\n        var e;\n        return (e = t[this.name]) && e[0] === t ? e[1] : void 0;\n      },\n      \"delete\": function (t) {\n        var e = t[this.name];\n        return e && e[0] === t ? (e[0] = e[1] = void 0, !0) : !1;\n      },\n      has: function (t) {\n        var e = t[this.name];\n        return e ? e[0] === t : !1;\n      }\n    }, window.WeakMap = n;\n  }(), function (t) {\n    function e(t) {\n      A.push(t), b || (b = !0, g(i));\n    }\n    function n(t) {\n      return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(t) || t;\n    }\n    function i() {\n      b = !1;\n      var t = A;\n      A = [], t.sort(function (t, e) {\n        return t.uid_ - e.uid_;\n      });\n      var e = !1;\n      t.forEach(function (t) {\n        var n = t.takeRecords();\n        o(t), n.length && (t.callback_(n, t), e = !0);\n      }), e && i();\n    }\n    function o(t) {\n      t.nodes_.forEach(function (e) {\n        var n = m.get(e);\n        n && n.forEach(function (e) {\n          e.observer === t && e.removeTransientObservers();\n        });\n      });\n    }\n    function r(t, e) {\n      for (var n = t; n; n = n.parentNode) {\n        var i = m.get(n);\n        if (i) for (var o = 0; o < i.length; o++) {\n          var r = i[o],\n            s = r.options;\n          if (n === t || s.subtree) {\n            var a = e(s);\n            a && r.enqueue(a);\n          }\n        }\n      }\n    }\n    function s(t) {\n      this.callback_ = t, this.nodes_ = [], this.records_ = [], this.uid_ = ++C;\n    }\n    function a(t, e) {\n      this.type = t, this.target = e, this.addedNodes = [], this.removedNodes = [], this.previousSibling = null, this.nextSibling = null, this.attributeName = null, this.attributeNamespace = null, this.oldValue = null;\n    }\n    function u(t) {\n      var e = new a(t.type, t.target);\n      return e.addedNodes = t.addedNodes.slice(), e.removedNodes = t.removedNodes.slice(), e.previousSibling = t.previousSibling, e.nextSibling = t.nextSibling, e.attributeName = t.attributeName, e.attributeNamespace = t.attributeNamespace, e.oldValue = t.oldValue, e;\n    }\n    function c(t, e) {\n      return x = new a(t, e);\n    }\n    function l(t) {\n      return w ? w : (w = u(x), w.oldValue = t, w);\n    }\n    function h() {\n      x = w = void 0;\n    }\n    function p(t) {\n      return t === w || t === x;\n    }\n    function d(t, e) {\n      return t === e ? t : w && p(t) ? w : null;\n    }\n    function f(t, e, n) {\n      this.observer = t, this.target = e, this.options = n, this.transientObservedNodes = [];\n    }\n    if (!t.JsMutationObserver) {\n      var g,\n        m = new WeakMap();\n      if (/Trident|Edge/.test(navigator.userAgent)) g = setTimeout;else if (window.setImmediate) g = window.setImmediate;else {\n        var v = [],\n          y = String(Math.random());\n        window.addEventListener(\"message\", function (t) {\n          if (t.data === y) {\n            var e = v;\n            v = [], e.forEach(function (t) {\n              t();\n            });\n          }\n        }), g = function (t) {\n          v.push(t), window.postMessage(y, \"*\");\n        };\n      }\n      var b = !1,\n        A = [],\n        C = 0;\n      s.prototype = {\n        observe: function (t, e) {\n          if (t = n(t), !e.childList && !e.attributes && !e.characterData || e.attributeOldValue && !e.attributes || e.attributeFilter && e.attributeFilter.length && !e.attributes || e.characterDataOldValue && !e.characterData) throw new SyntaxError();\n          var i = m.get(t);\n          i || m.set(t, i = []);\n          for (var o, r = 0; r < i.length; r++) if (i[r].observer === this) {\n            o = i[r], o.removeListeners(), o.options = e;\n            break;\n          }\n          o || (o = new f(this, t, e), i.push(o), this.nodes_.push(t)), o.addListeners();\n        },\n        disconnect: function () {\n          this.nodes_.forEach(function (t) {\n            for (var e = m.get(t), n = 0; n < e.length; n++) {\n              var i = e[n];\n              if (i.observer === this) {\n                i.removeListeners(), e.splice(n, 1);\n                break;\n              }\n            }\n          }, this), this.records_ = [];\n        },\n        takeRecords: function () {\n          var t = this.records_;\n          return this.records_ = [], t;\n        }\n      };\n      var x, w;\n      f.prototype = {\n        enqueue: function (t) {\n          var n = this.observer.records_,\n            i = n.length;\n          if (n.length > 0) {\n            var o = n[i - 1],\n              r = d(o, t);\n            if (r) return void (n[i - 1] = r);\n          } else e(this.observer);\n          n[i] = t;\n        },\n        addListeners: function () {\n          this.addListeners_(this.target);\n        },\n        addListeners_: function (t) {\n          var e = this.options;\n          e.attributes && t.addEventListener(\"DOMAttrModified\", this, !0), e.characterData && t.addEventListener(\"DOMCharacterDataModified\", this, !0), e.childList && t.addEventListener(\"DOMNodeInserted\", this, !0), (e.childList || e.subtree) && t.addEventListener(\"DOMNodeRemoved\", this, !0);\n        },\n        removeListeners: function () {\n          this.removeListeners_(this.target);\n        },\n        removeListeners_: function (t) {\n          var e = this.options;\n          e.attributes && t.removeEventListener(\"DOMAttrModified\", this, !0), e.characterData && t.removeEventListener(\"DOMCharacterDataModified\", this, !0), e.childList && t.removeEventListener(\"DOMNodeInserted\", this, !0), (e.childList || e.subtree) && t.removeEventListener(\"DOMNodeRemoved\", this, !0);\n        },\n        addTransientObserver: function (t) {\n          if (t !== this.target) {\n            this.addListeners_(t), this.transientObservedNodes.push(t);\n            var e = m.get(t);\n            e || m.set(t, e = []), e.push(this);\n          }\n        },\n        removeTransientObservers: function () {\n          var t = this.transientObservedNodes;\n          this.transientObservedNodes = [], t.forEach(function (t) {\n            this.removeListeners_(t);\n            for (var e = m.get(t), n = 0; n < e.length; n++) if (e[n] === this) {\n              e.splice(n, 1);\n              break;\n            }\n          }, this);\n        },\n        handleEvent: function (t) {\n          switch (t.stopImmediatePropagation(), t.type) {\n            case \"DOMAttrModified\":\n              var e = t.attrName,\n                n = t.relatedNode.namespaceURI,\n                i = t.target,\n                o = new c(\"attributes\", i);\n              o.attributeName = e, o.attributeNamespace = n;\n              var s = t.attrChange === MutationEvent.ADDITION ? null : t.prevValue;\n              r(i, function (t) {\n                return !t.attributes || t.attributeFilter && t.attributeFilter.length && -1 === t.attributeFilter.indexOf(e) && -1 === t.attributeFilter.indexOf(n) ? void 0 : t.attributeOldValue ? l(s) : o;\n              });\n              break;\n            case \"DOMCharacterDataModified\":\n              var i = t.target,\n                o = c(\"characterData\", i),\n                s = t.prevValue;\n              r(i, function (t) {\n                return t.characterData ? t.characterDataOldValue ? l(s) : o : void 0;\n              });\n              break;\n            case \"DOMNodeRemoved\":\n              this.addTransientObserver(t.target);\n            case \"DOMNodeInserted\":\n              var a,\n                u,\n                p = t.target;\n              \"DOMNodeInserted\" === t.type ? (a = [p], u = []) : (a = [], u = [p]);\n              var d = p.previousSibling,\n                f = p.nextSibling,\n                o = c(\"childList\", t.target.parentNode);\n              o.addedNodes = a, o.removedNodes = u, o.previousSibling = d, o.nextSibling = f, r(t.relatedNode, function (t) {\n                return t.childList ? o : void 0;\n              });\n          }\n          h();\n        }\n      }, t.JsMutationObserver = s, t.MutationObserver || (t.MutationObserver = s, s._isPolyfilled = !0);\n    }\n  }(self), function () {\n    \"use strict\";\n\n    if (!window.performance || !window.performance.now) {\n      var t = Date.now();\n      window.performance = {\n        now: function () {\n          return Date.now() - t;\n        }\n      };\n    }\n    window.requestAnimationFrame || (window.requestAnimationFrame = function () {\n      var t = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n      return t ? function (e) {\n        return t(function () {\n          e(performance.now());\n        });\n      } : function (t) {\n        return window.setTimeout(t, 1e3 / 60);\n      };\n    }()), window.cancelAnimationFrame || (window.cancelAnimationFrame = function () {\n      return window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function (t) {\n        clearTimeout(t);\n      };\n    }());\n    var e = function () {\n      var t = document.createEvent(\"Event\");\n      return t.initEvent(\"foo\", !0, !0), t.preventDefault(), t.defaultPrevented;\n    }();\n    if (!e) {\n      var n = Event.prototype.preventDefault;\n      Event.prototype.preventDefault = function () {\n        this.cancelable && (n.call(this), Object.defineProperty(this, \"defaultPrevented\", {\n          get: function () {\n            return !0;\n          },\n          configurable: !0\n        }));\n      };\n    }\n    var i = /Trident/.test(navigator.userAgent);\n    if ((!window.CustomEvent || i && \"function\" != typeof window.CustomEvent) && (window.CustomEvent = function (t, e) {\n      e = e || {};\n      var n = document.createEvent(\"CustomEvent\");\n      return n.initCustomEvent(t, Boolean(e.bubbles), Boolean(e.cancelable), e.detail), n;\n    }, window.CustomEvent.prototype = window.Event.prototype), !window.Event || i && \"function\" != typeof window.Event) {\n      var o = window.Event;\n      window.Event = function (t, e) {\n        e = e || {};\n        var n = document.createEvent(\"Event\");\n        return n.initEvent(t, Boolean(e.bubbles), Boolean(e.cancelable)), n;\n      }, window.Event.prototype = o.prototype;\n    }\n  }(window.WebComponents), window.CustomElements = window.CustomElements || {\n    flags: {}\n  }, function (t) {\n    var e = t.flags,\n      n = [],\n      i = function (t) {\n        n.push(t);\n      },\n      o = function () {\n        n.forEach(function (e) {\n          e(t);\n        });\n      };\n    t.addModule = i, t.initializeModules = o, t.hasNative = Boolean(document.registerElement), t.isIE = /Trident/.test(navigator.userAgent), t.useNative = !e.register && t.hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || window.HTMLImports.useNative);\n  }(window.CustomElements), window.CustomElements.addModule(function (t) {\n    function e(t, e) {\n      n(t, function (t) {\n        return e(t) ? !0 : void i(t, e);\n      }), i(t, e);\n    }\n    function n(t, e, i) {\n      var o = t.firstElementChild;\n      if (!o) for (o = t.firstChild; o && o.nodeType !== Node.ELEMENT_NODE;) o = o.nextSibling;\n      for (; o;) e(o, i) !== !0 && n(o, e, i), o = o.nextElementSibling;\n      return null;\n    }\n    function i(t, n) {\n      for (var i = t.shadowRoot; i;) e(i, n), i = i.olderShadowRoot;\n    }\n    function o(t, e) {\n      r(t, e, []);\n    }\n    function r(t, e, n) {\n      if (t = window.wrap(t), !(n.indexOf(t) >= 0)) {\n        n.push(t);\n        for (var i, o = t.querySelectorAll(\"link[rel=\" + s + \"]\"), a = 0, u = o.length; u > a && (i = o[a]); a++) i.import && r(i.import, e, n);\n        e(t);\n      }\n    }\n    var s = window.HTMLImports ? window.HTMLImports.IMPORT_LINK_TYPE : \"none\";\n    t.forDocumentTree = o, t.forSubtree = e;\n  }), window.CustomElements.addModule(function (t) {\n    function e(t, e) {\n      return n(t, e) || i(t, e);\n    }\n    function n(e, n) {\n      return t.upgrade(e, n) ? !0 : void (n && s(e));\n    }\n    function i(t, e) {\n      b(t, function (t) {\n        return n(t, e) ? !0 : void 0;\n      });\n    }\n    function o(t) {\n      w.push(t), x || (x = !0, setTimeout(r));\n    }\n    function r() {\n      x = !1;\n      for (var t, e = w, n = 0, i = e.length; i > n && (t = e[n]); n++) t();\n      w = [];\n    }\n    function s(t) {\n      C ? o(function () {\n        a(t);\n      }) : a(t);\n    }\n    function a(t) {\n      t.__upgraded__ && !t.__attached && (t.__attached = !0, t.attachedCallback && t.attachedCallback());\n    }\n    function u(t) {\n      c(t), b(t, function (t) {\n        c(t);\n      });\n    }\n    function c(t) {\n      C ? o(function () {\n        l(t);\n      }) : l(t);\n    }\n    function l(t) {\n      t.__upgraded__ && t.__attached && (t.__attached = !1, t.detachedCallback && t.detachedCallback());\n    }\n    function h(t) {\n      for (var e = t, n = window.wrap(document); e;) {\n        if (e == n) return !0;\n        e = e.parentNode || e.nodeType === Node.DOCUMENT_FRAGMENT_NODE && e.host;\n      }\n    }\n    function p(t) {\n      if (t.shadowRoot && !t.shadowRoot.__watched) {\n        y.dom && console.log(\"watching shadow-root for: \", t.localName);\n        for (var e = t.shadowRoot; e;) g(e), e = e.olderShadowRoot;\n      }\n    }\n    function d(t, n) {\n      if (y.dom) {\n        var i = n[0];\n        if (i && \"childList\" === i.type && i.addedNodes && i.addedNodes) {\n          for (var o = i.addedNodes[0]; o && o !== document && !o.host;) o = o.parentNode;\n          var r = o && (o.URL || o._URL || o.host && o.host.localName) || \"\";\n          r = r.split(\"/?\").shift().split(\"/\").pop();\n        }\n        console.group(\"mutations (%d) [%s]\", n.length, r || \"\");\n      }\n      var s = h(t);\n      n.forEach(function (t) {\n        \"childList\" === t.type && (E(t.addedNodes, function (t) {\n          t.localName && e(t, s);\n        }), E(t.removedNodes, function (t) {\n          t.localName && u(t);\n        }));\n      }), y.dom && console.groupEnd();\n    }\n    function f(t) {\n      for (t = window.wrap(t), t || (t = window.wrap(document)); t.parentNode;) t = t.parentNode;\n      var e = t.__observer;\n      e && (d(t, e.takeRecords()), r());\n    }\n    function g(t) {\n      if (!t.__observer) {\n        var e = new MutationObserver(d.bind(this, t));\n        e.observe(t, {\n          childList: !0,\n          subtree: !0\n        }), t.__observer = e;\n      }\n    }\n    function m(t) {\n      t = window.wrap(t), y.dom && console.group(\"upgradeDocument: \", t.baseURI.split(\"/\").pop());\n      var n = t === window.wrap(document);\n      e(t, n), g(t), y.dom && console.groupEnd();\n    }\n    function v(t) {\n      A(t, m);\n    }\n    var y = t.flags,\n      b = t.forSubtree,\n      A = t.forDocumentTree,\n      C = window.MutationObserver._isPolyfilled && y[\"throttle-attached\"];\n    t.hasPolyfillMutations = C, t.hasThrottledAttached = C;\n    var x = !1,\n      w = [],\n      E = Array.prototype.forEach.call.bind(Array.prototype.forEach),\n      S = Element.prototype.createShadowRoot;\n    S && (Element.prototype.createShadowRoot = function () {\n      var t = S.call(this);\n      return window.CustomElements.watchShadow(this), t;\n    }), t.watchShadow = p, t.upgradeDocumentTree = v, t.upgradeDocument = m, t.upgradeSubtree = i, t.upgradeAll = e, t.attached = s, t.takeRecords = f;\n  }), window.CustomElements.addModule(function (t) {\n    function e(e, i) {\n      if (\"template\" === e.localName && window.HTMLTemplateElement && HTMLTemplateElement.decorate && HTMLTemplateElement.decorate(e), !e.__upgraded__ && e.nodeType === Node.ELEMENT_NODE) {\n        var o = e.getAttribute(\"is\"),\n          r = t.getRegisteredDefinition(e.localName) || t.getRegisteredDefinition(o);\n        if (r && (o && r.tag == e.localName || !o && !r.extends)) return n(e, r, i);\n      }\n    }\n    function n(e, n, o) {\n      return s.upgrade && console.group(\"upgrade:\", e.localName), n.is && e.setAttribute(\"is\", n.is), i(e, n), e.__upgraded__ = !0, r(e), o && t.attached(e), t.upgradeSubtree(e, o), s.upgrade && console.groupEnd(), e;\n    }\n    function i(t, e) {\n      Object.__proto__ ? t.__proto__ = e.prototype : (o(t, e.prototype, e.native), t.__proto__ = e.prototype);\n    }\n    function o(t, e, n) {\n      for (var i = {}, o = e; o !== n && o !== HTMLElement.prototype;) {\n        for (var r, s = Object.getOwnPropertyNames(o), a = 0; r = s[a]; a++) i[r] || (Object.defineProperty(t, r, Object.getOwnPropertyDescriptor(o, r)), i[r] = 1);\n        o = Object.getPrototypeOf(o);\n      }\n    }\n    function r(t) {\n      t.createdCallback && t.createdCallback();\n    }\n    var s = t.flags;\n    t.upgrade = e, t.upgradeWithDefinition = n, t.implementPrototype = i;\n  }), window.CustomElements.addModule(function (t) {\n    function e(e, i) {\n      var u = i || {};\n      if (!e) throw new Error(\"document.registerElement: first argument `name` must not be empty\");\n      if (e.indexOf(\"-\") < 0) throw new Error(\"document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '\" + String(e) + \"'.\");\n      if (o(e)) throw new Error(\"Failed to execute 'registerElement' on 'Document': Registration failed for type '\" + String(e) + \"'. The type name is invalid.\");\n      if (c(e)) throw new Error(\"DuplicateDefinitionError: a type with name '\" + String(e) + \"' is already registered\");\n      return u.prototype || (u.prototype = Object.create(HTMLElement.prototype)), u.__name = e.toLowerCase(), u.extends && (u.extends = u.extends.toLowerCase()), u.lifecycle = u.lifecycle || {}, u.ancestry = r(u.extends), s(u), a(u), n(u.prototype), l(u.__name, u), u.ctor = h(u), u.ctor.prototype = u.prototype, u.prototype.constructor = u.ctor, t.ready && m(document), u.ctor;\n    }\n    function n(t) {\n      if (!t.setAttribute._polyfilled) {\n        var e = t.setAttribute;\n        t.setAttribute = function (t, n) {\n          i.call(this, t, n, e);\n        };\n        var n = t.removeAttribute;\n        t.removeAttribute = function (t) {\n          i.call(this, t, null, n);\n        }, t.setAttribute._polyfilled = !0;\n      }\n    }\n    function i(t, e, n) {\n      t = t.toLowerCase();\n      var i = this.getAttribute(t);\n      n.apply(this, arguments);\n      var o = this.getAttribute(t);\n      this.attributeChangedCallback && o !== i && this.attributeChangedCallback(t, i, o);\n    }\n    function o(t) {\n      for (var e = 0; e < C.length; e++) if (t === C[e]) return !0;\n    }\n    function r(t) {\n      var e = c(t);\n      return e ? r(e.extends).concat([e]) : [];\n    }\n    function s(t) {\n      for (var e, n = t.extends, i = 0; e = t.ancestry[i]; i++) n = e.is && e.tag;\n      t.tag = n || t.__name, n && (t.is = t.__name);\n    }\n    function a(t) {\n      if (!Object.__proto__) {\n        var e = HTMLElement.prototype;\n        if (t.is) {\n          var n = document.createElement(t.tag);\n          e = Object.getPrototypeOf(n);\n        }\n        for (var i, o = t.prototype, r = !1; o;) o == e && (r = !0), i = Object.getPrototypeOf(o), i && (o.__proto__ = i), o = i;\n        r || console.warn(t.tag + \" prototype not found in prototype chain for \" + t.is), t.native = e;\n      }\n    }\n    function u(t) {\n      return y(E(t.tag), t);\n    }\n    function c(t) {\n      return t ? x[t.toLowerCase()] : void 0;\n    }\n    function l(t, e) {\n      x[t] = e;\n    }\n    function h(t) {\n      return function () {\n        return u(t);\n      };\n    }\n    function p(t, e, n) {\n      return t === w ? d(e, n) : S(t, e);\n    }\n    function d(t, e) {\n      t && (t = t.toLowerCase()), e && (e = e.toLowerCase());\n      var n = c(e || t);\n      if (n) {\n        if (t == n.tag && e == n.is) return new n.ctor();\n        if (!e && !n.is) return new n.ctor();\n      }\n      var i;\n      return e ? (i = d(t), i.setAttribute(\"is\", e), i) : (i = E(t), t.indexOf(\"-\") >= 0 && b(i, HTMLElement), i);\n    }\n    function f(t, e) {\n      var n = t[e];\n      t[e] = function () {\n        var t = n.apply(this, arguments);\n        return v(t), t;\n      };\n    }\n    var g,\n      m = (t.isIE, t.upgradeDocumentTree),\n      v = t.upgradeAll,\n      y = t.upgradeWithDefinition,\n      b = t.implementPrototype,\n      A = t.useNative,\n      C = [\"annotation-xml\", \"color-profile\", \"font-face\", \"font-face-src\", \"font-face-uri\", \"font-face-format\", \"font-face-name\", \"missing-glyph\"],\n      x = {},\n      w = \"http://www.w3.org/1999/xhtml\",\n      E = document.createElement.bind(document),\n      S = document.createElementNS.bind(document);\n    g = Object.__proto__ || A ? function (t, e) {\n      return t instanceof e;\n    } : function (t, e) {\n      if (t instanceof e) return !0;\n      for (var n = t; n;) {\n        if (n === e.prototype) return !0;\n        n = n.__proto__;\n      }\n      return !1;\n    }, f(Node.prototype, \"cloneNode\"), f(document, \"importNode\"), document.registerElement = e, document.createElement = d, document.createElementNS = p, t.registry = x, t.instanceof = g, t.reservedTagList = C, t.getRegisteredDefinition = c, document.register = document.registerElement;\n  }), function (t) {\n    function e() {\n      r(window.wrap(document)), window.CustomElements.ready = !0;\n      var t = window.requestAnimationFrame || function (t) {\n        setTimeout(t, 16);\n      };\n      t(function () {\n        setTimeout(function () {\n          window.CustomElements.readyTime = Date.now(), window.HTMLImports && (window.CustomElements.elapsed = window.CustomElements.readyTime - window.HTMLImports.readyTime), document.dispatchEvent(new CustomEvent(\"WebComponentsReady\", {\n            bubbles: !0\n          }));\n        });\n      });\n    }\n    var n = t.useNative,\n      i = t.initializeModules;\n    if (t.isIE, n) {\n      var o = function () {};\n      t.watchShadow = o, t.upgrade = o, t.upgradeAll = o, t.upgradeDocumentTree = o, t.upgradeSubtree = o, t.takeRecords = o, t.instanceof = function (t, e) {\n        return t instanceof e;\n      };\n    } else i();\n    var r = t.upgradeDocumentTree,\n      s = t.upgradeDocument;\n    if (window.wrap || (window.ShadowDOMPolyfill ? (window.wrap = window.ShadowDOMPolyfill.wrapIfNeeded, window.unwrap = window.ShadowDOMPolyfill.unwrapIfNeeded) : window.wrap = window.unwrap = function (t) {\n      return t;\n    }), window.HTMLImports && (window.HTMLImports.__importsParsingHook = function (t) {\n      t.import && s(wrap(t.import));\n    }), \"complete\" === document.readyState || t.flags.eager) e();else if (\"interactive\" !== document.readyState || window.attachEvent || window.HTMLImports && !window.HTMLImports.ready) {\n      var a = window.HTMLImports && !window.HTMLImports.ready ? \"HTMLImportsLoaded\" : \"DOMContentLoaded\";\n      window.addEventListener(a, e);\n    } else e();\n  }(window.CustomElements));\n}.call(this), function () {}.call(this), function () {\n  var t = this;\n  (function () {\n    (function () {\n      this.Trix = {\n        VERSION: \"1.3.1\",\n        ZERO_WIDTH_SPACE: \"\\ufeff\",\n        NON_BREAKING_SPACE: \"\\xa0\",\n        OBJECT_REPLACEMENT_CHARACTER: \"\\ufffc\",\n        browser: {\n          composesExistingText: /Android.*Chrome/.test(navigator.userAgent),\n          forcesObjectResizing: /Trident.*rv:11/.test(navigator.userAgent),\n          supportsInputEvents: function () {\n            var t, e, n, i;\n            if (\"undefined\" == typeof InputEvent) return !1;\n            for (i = [\"data\", \"getTargetRanges\", \"inputType\"], t = 0, e = i.length; e > t; t++) if (n = i[t], !(n in InputEvent.prototype)) return !1;\n            return !0;\n          }()\n        },\n        config: {}\n      };\n    }).call(this);\n  }).call(t);\n  var e = t.Trix;\n  (function () {\n    (function () {\n      e.BasicObject = function () {\n        function t() {}\n        var e, n, i;\n        return t.proxyMethod = function (t) {\n          var i, o, r, s, a;\n          return r = n(t), i = r.name, s = r.toMethod, a = r.toProperty, o = r.optional, this.prototype[i] = function () {\n            var t, n;\n            return t = null != s ? o ? \"function\" == typeof this[s] ? this[s]() : void 0 : this[s]() : null != a ? this[a] : void 0, o ? (n = null != t ? t[i] : void 0, null != n ? e.call(n, t, arguments) : void 0) : (n = t[i], e.call(n, t, arguments));\n          };\n        }, n = function (t) {\n          var e, n;\n          if (!(n = t.match(i))) throw new Error(\"can't parse @proxyMethod expression: \" + t);\n          return e = {\n            name: n[4]\n          }, null != n[2] ? e.toMethod = n[1] : e.toProperty = n[1], null != n[3] && (e.optional = !0), e;\n        }, e = Function.prototype.apply, i = /^(.+?)(\\(\\))?(\\?)?\\.(.+?)$/, t;\n      }();\n    }).call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.Object = function (n) {\n        function i() {\n          this.id = ++o;\n        }\n        var o;\n        return t(i, n), o = 0, i.fromJSONString = function (t) {\n          return this.fromJSON(JSON.parse(t));\n        }, i.prototype.hasSameConstructorAs = function (t) {\n          return this.constructor === (null != t ? t.constructor : void 0);\n        }, i.prototype.isEqualTo = function (t) {\n          return this === t;\n        }, i.prototype.inspect = function () {\n          var t, e, n;\n          return t = function () {\n            var t, i, o;\n            i = null != (t = this.contentsForInspection()) ? t : {}, o = [];\n            for (e in i) n = i[e], o.push(e + \"=\" + n);\n            return o;\n          }.call(this), \"#<\" + this.constructor.name + \":\" + this.id + (t.length ? \" \" + t.join(\", \") : \"\") + \">\";\n        }, i.prototype.contentsForInspection = function () {}, i.prototype.toJSONString = function () {\n          return JSON.stringify(this);\n        }, i.prototype.toUTF16String = function () {\n          return e.UTF16String.box(this);\n        }, i.prototype.getCacheKey = function () {\n          return this.id.toString();\n        }, i;\n      }(e.BasicObject);\n    }.call(this), function () {\n      e.extend = function (t) {\n        var e, n;\n        for (e in t) n = t[e], this[e] = n;\n        return this;\n      };\n    }.call(this), function () {\n      e.extend({\n        defer: function (t) {\n          return setTimeout(t, 1);\n        }\n      });\n    }.call(this), function () {\n      var t, n;\n      e.extend({\n        normalizeSpaces: function (t) {\n          return t.replace(RegExp(\"\" + e.ZERO_WIDTH_SPACE, \"g\"), \"\").replace(RegExp(\"\" + e.NON_BREAKING_SPACE, \"g\"), \" \");\n        },\n        normalizeNewlines: function (t) {\n          return t.replace(/\\r\\n/g, \"\\n\");\n        },\n        breakableWhitespacePattern: RegExp(\"[^\\\\S\" + e.NON_BREAKING_SPACE + \"]\"),\n        squishBreakableWhitespace: function (t) {\n          return t.replace(RegExp(\"\" + e.breakableWhitespacePattern.source, \"g\"), \" \").replace(/\\ {2,}/g, \" \");\n        },\n        summarizeStringChange: function (t, i) {\n          var o, r, s, a;\n          return t = e.UTF16String.box(t), i = e.UTF16String.box(i), i.length < t.length ? (r = n(t, i), a = r[0], o = r[1]) : (s = n(i, t), o = s[0], a = s[1]), {\n            added: o,\n            removed: a\n          };\n        }\n      }), n = function (n, i) {\n        var o, r, s, a, u;\n        return n.isEqualTo(i) ? [\"\", \"\"] : (r = t(n, i), a = r.utf16String.length, s = a ? (u = r.offset, r, o = n.codepoints.slice(0, u).concat(n.codepoints.slice(u + a)), t(i, e.UTF16String.fromCodepoints(o))) : t(i, n), [r.utf16String.toString(), s.utf16String.toString()]);\n      }, t = function (t, e) {\n        var n, i, o;\n        for (n = 0, i = t.length, o = e.length; i > n && t.charAt(n).isEqualTo(e.charAt(n));) n++;\n        for (; i > n + 1 && t.charAt(i - 1).isEqualTo(e.charAt(o - 1));) i--, o--;\n        return {\n          utf16String: t.slice(n, i),\n          offset: n\n        };\n      };\n    }.call(this), function () {\n      e.extend({\n        copyObject: function (t) {\n          var e, n, i;\n          null == t && (t = {}), n = {};\n          for (e in t) i = t[e], n[e] = i;\n          return n;\n        },\n        objectsAreEqual: function (t, e) {\n          var n, i;\n          if (null == t && (t = {}), null == e && (e = {}), Object.keys(t).length !== Object.keys(e).length) return !1;\n          for (n in t) if (i = t[n], i !== e[n]) return !1;\n          return !0;\n        }\n      });\n    }.call(this), function () {\n      var t = [].slice;\n      e.extend({\n        arraysAreEqual: function (t, e) {\n          var n, i, o, r;\n          if (null == t && (t = []), null == e && (e = []), t.length !== e.length) return !1;\n          for (i = n = 0, o = t.length; o > n; i = ++n) if (r = t[i], r !== e[i]) return !1;\n          return !0;\n        },\n        arrayStartsWith: function (t, n) {\n          return null == t && (t = []), null == n && (n = []), e.arraysAreEqual(t.slice(0, n.length), n);\n        },\n        spliceArray: function () {\n          var e, n, i;\n          return n = arguments[0], e = 2 <= arguments.length ? t.call(arguments, 1) : [], i = n.slice(0), i.splice.apply(i, e), i;\n        },\n        summarizeArrayChange: function (t, e) {\n          var n, i, o, r, s, a, u, c, l, h, p;\n          for (null == t && (t = []), null == e && (e = []), n = [], h = [], o = new Set(), r = 0, u = t.length; u > r; r++) p = t[r], o.add(p);\n          for (i = new Set(), s = 0, c = e.length; c > s; s++) p = e[s], i.add(p), o.has(p) || n.push(p);\n          for (a = 0, l = t.length; l > a; a++) p = t[a], i.has(p) || h.push(p);\n          return {\n            added: n,\n            removed: h\n          };\n        }\n      });\n    }.call(this), function () {\n      var t, n, i, o;\n      t = null, n = null, o = null, i = null, e.extend({\n        getAllAttributeNames: function () {\n          return null != t ? t : t = e.getTextAttributeNames().concat(e.getBlockAttributeNames());\n        },\n        getBlockConfig: function (t) {\n          return e.config.blockAttributes[t];\n        },\n        getBlockAttributeNames: function () {\n          return null != n ? n : n = Object.keys(e.config.blockAttributes);\n        },\n        getTextConfig: function (t) {\n          return e.config.textAttributes[t];\n        },\n        getTextAttributeNames: function () {\n          return null != o ? o : o = Object.keys(e.config.textAttributes);\n        },\n        getListAttributeNames: function () {\n          var t, n;\n          return null != i ? i : i = function () {\n            var i, o;\n            i = e.config.blockAttributes, o = [];\n            for (t in i) n = i[t].listAttribute, null != n && o.push(n);\n            return o;\n          }();\n        }\n      });\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r,\n        s = [].indexOf || function (t) {\n          for (var e = 0, n = this.length; n > e; e++) if (e in this && this[e] === t) return e;\n          return -1;\n        };\n      t = document.documentElement, n = null != (i = null != (o = null != (r = t.matchesSelector) ? r : t.webkitMatchesSelector) ? o : t.msMatchesSelector) ? i : t.mozMatchesSelector, e.extend({\n        handleEvent: function (n, i) {\n          var o, r, s, a, u, c, l, h, p, d, f, g;\n          return h = null != i ? i : {}, c = h.onElement, u = h.matchingSelector, g = h.withCallback, a = h.inPhase, l = h.preventDefault, d = h.times, r = null != c ? c : t, p = u, o = g, f = \"capturing\" === a, s = function (t) {\n            var n;\n            return null != d && 0 === --d && s.destroy(), n = e.findClosestElementFromNode(t.target, {\n              matchingSelector: p\n            }), null != n && (null != g && g.call(n, t, n), l) ? t.preventDefault() : void 0;\n          }, s.destroy = function () {\n            return r.removeEventListener(n, s, f);\n          }, r.addEventListener(n, s, f), s;\n        },\n        handleEventOnce: function (t, n) {\n          return null == n && (n = {}), n.times = 1, e.handleEvent(t, n);\n        },\n        triggerEvent: function (n, i) {\n          var o, r, s, a, u, c, l;\n          return l = null != i ? i : {}, c = l.onElement, r = l.bubbles, s = l.cancelable, o = l.attributes, a = null != c ? c : t, r = r !== !1, s = s !== !1, u = document.createEvent(\"Events\"), u.initEvent(n, r, s), null != o && e.extend.call(u, o), a.dispatchEvent(u);\n        },\n        elementMatchesSelector: function (t, e) {\n          return 1 === (null != t ? t.nodeType : void 0) ? n.call(t, e) : void 0;\n        },\n        findClosestElementFromNode: function (t, n) {\n          var i, o, r;\n          for (o = null != n ? n : {}, i = o.matchingSelector, r = o.untilNode; null != t && t.nodeType !== Node.ELEMENT_NODE;) t = t.parentNode;\n          if (null != t) {\n            if (null == i) return t;\n            if (t.closest && null == r) return t.closest(i);\n            for (; t && t !== r;) {\n              if (e.elementMatchesSelector(t, i)) return t;\n              t = t.parentNode;\n            }\n          }\n        },\n        findInnerElement: function (t) {\n          for (; null != t ? t.firstElementChild : void 0;) t = t.firstElementChild;\n          return t;\n        },\n        innerElementIsActive: function (t) {\n          return document.activeElement !== t && e.elementContainsNode(t, document.activeElement);\n        },\n        elementContainsNode: function (t, e) {\n          if (t && e) for (; e;) {\n            if (e === t) return !0;\n            e = e.parentNode;\n          }\n        },\n        findNodeFromContainerAndOffset: function (t, e) {\n          var n;\n          if (t) return t.nodeType === Node.TEXT_NODE ? t : 0 === e ? null != (n = t.firstChild) ? n : t : t.childNodes.item(e - 1);\n        },\n        findElementFromContainerAndOffset: function (t, n) {\n          var i;\n          return i = e.findNodeFromContainerAndOffset(t, n), e.findClosestElementFromNode(i);\n        },\n        findChildIndexOfNode: function (t) {\n          var e;\n          if (null != t ? t.parentNode : void 0) {\n            for (e = 0; t = t.previousSibling;) e++;\n            return e;\n          }\n        },\n        removeNode: function (t) {\n          var e;\n          return null != t && null != (e = t.parentNode) ? e.removeChild(t) : void 0;\n        },\n        walkTree: function (t, e) {\n          var n, i, o, r, s;\n          return o = null != e ? e : {}, i = o.onlyNodesOfType, r = o.usingFilter, n = o.expandEntityReferences, s = function () {\n            switch (i) {\n              case \"element\":\n                return NodeFilter.SHOW_ELEMENT;\n              case \"text\":\n                return NodeFilter.SHOW_TEXT;\n              case \"comment\":\n                return NodeFilter.SHOW_COMMENT;\n              default:\n                return NodeFilter.SHOW_ALL;\n            }\n          }(), document.createTreeWalker(t, s, null != r ? r : null, n === !0);\n        },\n        tagName: function (t) {\n          var e;\n          return null != t && null != (e = t.tagName) ? e.toLowerCase() : void 0;\n        },\n        makeElement: function (t, e) {\n          var n, i, o, r, s, a, u, c, l, h, p, d, f, g;\n          if (null == e && (e = {}), \"object\" == typeof t ? (e = t, t = e.tagName) : e = {\n            attributes: e\n          }, o = document.createElement(t), null != e.editable && (null == e.attributes && (e.attributes = {}), e.attributes.contenteditable = e.editable), e.attributes) {\n            l = e.attributes;\n            for (a in l) g = l[a], o.setAttribute(a, g);\n          }\n          if (e.style) {\n            h = e.style;\n            for (a in h) g = h[a], o.style[a] = g;\n          }\n          if (e.data) {\n            p = e.data;\n            for (a in p) g = p[a], o.dataset[a] = g;\n          }\n          if (e.className) for (d = e.className.split(\" \"), r = 0, u = d.length; u > r; r++) i = d[r], o.classList.add(i);\n          if (e.textContent && (o.textContent = e.textContent), e.childNodes) for (f = [].concat(e.childNodes), s = 0, c = f.length; c > s; s++) n = f[s], o.appendChild(n);\n          return o;\n        },\n        getBlockTagNames: function () {\n          var t, n;\n          return null != e.blockTagNames ? e.blockTagNames : e.blockTagNames = function () {\n            var i, o;\n            i = e.config.blockAttributes, o = [];\n            for (t in i) n = i[t].tagName, n && o.push(n);\n            return o;\n          }();\n        },\n        nodeIsBlockContainer: function (t) {\n          return e.nodeIsBlockStartComment(null != t ? t.firstChild : void 0);\n        },\n        nodeProbablyIsBlockContainer: function (t) {\n          var n, i;\n          return n = e.tagName(t), s.call(e.getBlockTagNames(), n) >= 0 && (i = e.tagName(t.firstChild), s.call(e.getBlockTagNames(), i) < 0);\n        },\n        nodeIsBlockStart: function (t, n) {\n          var i;\n          return i = (null != n ? n : {\n            strict: !0\n          }).strict, i ? e.nodeIsBlockStartComment(t) : e.nodeIsBlockStartComment(t) || !e.nodeIsBlockStartComment(t.firstChild) && e.nodeProbablyIsBlockContainer(t);\n        },\n        nodeIsBlockStartComment: function (t) {\n          return e.nodeIsCommentNode(t) && \"block\" === (null != t ? t.data : void 0);\n        },\n        nodeIsCommentNode: function (t) {\n          return (null != t ? t.nodeType : void 0) === Node.COMMENT_NODE;\n        },\n        nodeIsCursorTarget: function (t, n) {\n          var i;\n          return i = (null != n ? n : {}).name, t ? e.nodeIsTextNode(t) ? t.data === e.ZERO_WIDTH_SPACE ? i ? t.parentNode.dataset.trixCursorTarget === i : !0 : void 0 : e.nodeIsCursorTarget(t.firstChild) : void 0;\n        },\n        nodeIsAttachmentElement: function (t) {\n          return e.elementMatchesSelector(t, e.AttachmentView.attachmentSelector);\n        },\n        nodeIsEmptyTextNode: function (t) {\n          return e.nodeIsTextNode(t) && \"\" === (null != t ? t.data : void 0);\n        },\n        nodeIsTextNode: function (t) {\n          return (null != t ? t.nodeType : void 0) === Node.TEXT_NODE;\n        }\n      });\n    }.call(this), function () {\n      var t, n, i, o, r;\n      t = e.copyObject, o = e.objectsAreEqual, e.extend({\n        normalizeRange: i = function (t) {\n          var e;\n          if (null != t) return Array.isArray(t) || (t = [t, t]), [n(t[0]), n(null != (e = t[1]) ? e : t[0])];\n        },\n        rangeIsCollapsed: function (t) {\n          var e, n, o;\n          if (null != t) return n = i(t), o = n[0], e = n[1], r(o, e);\n        },\n        rangesAreEqual: function (t, e) {\n          var n, o, s, a, u, c;\n          if (null != t && null != e) return s = i(t), o = s[0], n = s[1], a = i(e), c = a[0], u = a[1], r(o, c) && r(n, u);\n        }\n      }), n = function (e) {\n        return \"number\" == typeof e ? e : t(e);\n      }, r = function (t, e) {\n        return \"number\" == typeof t ? t === e : o(t, e);\n      };\n    }.call(this), function () {\n      var t, n, i, o, r, s, a;\n      e.registerElement = function (t, e) {\n        var n, i;\n        return null == e && (e = {}), t = t.toLowerCase(), e = a(e), i = s(e), (n = i.defaultCSS) && (delete i.defaultCSS, o(n, t)), r(t, i);\n      }, o = function (t, e) {\n        var n;\n        return n = i(e), n.textContent = t.replace(/%t/g, e);\n      }, i = function (e) {\n        var n, i;\n        return n = document.createElement(\"style\"), n.setAttribute(\"type\", \"text/css\"), n.setAttribute(\"data-tag-name\", e.toLowerCase()), (i = t()) && n.setAttribute(\"nonce\", i), document.head.insertBefore(n, document.head.firstChild), n;\n      }, t = function () {\n        var t;\n        return (t = n(\"trix-csp-nonce\") || n(\"csp-nonce\")) ? t.getAttribute(\"content\") : void 0;\n      }, n = function (t) {\n        return document.head.querySelector(\"meta[name=\" + t + \"]\");\n      }, s = function (t) {\n        var e, n, i;\n        n = {};\n        for (e in t) i = t[e], n[e] = \"function\" == typeof i ? {\n          value: i\n        } : i;\n        return n;\n      }, a = function () {\n        var t;\n        return t = function (t) {\n          var e, n, i, o, r;\n          for (e = {}, r = [\"initialize\", \"connect\", \"disconnect\"], n = 0, o = r.length; o > n; n++) i = r[n], e[i] = t[i], delete t[i];\n          return e;\n        }, window.customElements ? function (e) {\n          var n, i, o, r, s;\n          return s = t(e), o = s.initialize, n = s.connect, i = s.disconnect, o && (r = n, n = function () {\n            return this.initialized || (this.initialized = !0, o.call(this)), null != r ? r.call(this) : void 0;\n          }), n && (e.connectedCallback = n), i && (e.disconnectedCallback = i), e;\n        } : function (e) {\n          var n, i, o, r;\n          return r = t(e), o = r.initialize, n = r.connect, i = r.disconnect, o && (e.createdCallback = o), n && (e.attachedCallback = n), i && (e.detachedCallback = i), e;\n        };\n      }(), r = function () {\n        return window.customElements ? function (t, e) {\n          var n;\n          return n = function () {\n            return \"object\" == typeof Reflect ? Reflect.construct(HTMLElement, [], n) : HTMLElement.apply(this);\n          }, Object.setPrototypeOf(n.prototype, HTMLElement.prototype), Object.setPrototypeOf(n, HTMLElement), Object.defineProperties(n.prototype, e), window.customElements.define(t, n), n;\n        } : function (t, e) {\n          var n, i;\n          return i = Object.create(HTMLElement.prototype, e), n = document.registerElement(t, {\n            prototype: i\n          }), Object.defineProperty(i, \"constructor\", {\n            value: n\n          }), n;\n        };\n      }();\n    }.call(this), function () {\n      var t, n;\n      e.extend({\n        getDOMSelection: function () {\n          var t;\n          return t = window.getSelection(), t.rangeCount > 0 ? t : void 0;\n        },\n        getDOMRange: function () {\n          var n, i;\n          return (n = null != (i = e.getDOMSelection()) ? i.getRangeAt(0) : void 0) && !t(n) ? n : void 0;\n        },\n        setDOMRange: function (t) {\n          var n;\n          return n = window.getSelection(), n.removeAllRanges(), n.addRange(t), e.selectionChangeObserver.update();\n        }\n      }), t = function (t) {\n        return n(t.startContainer) || n(t.endContainer);\n      }, n = function (t) {\n        return !Object.getPrototypeOf(t);\n      };\n    }.call(this), function () {\n      var t;\n      t = {\n        \"application/x-trix-feature-detection\": \"test\"\n      }, e.extend({\n        dataTransferIsPlainText: function (t) {\n          var e, n, i;\n          return i = t.getData(\"text/plain\"), n = t.getData(\"text/html\"), i && n ? (e = new DOMParser().parseFromString(n, \"text/html\").body, e.textContent === i ? !e.querySelector(\"*\") : void 0) : null != i ? i.length : void 0;\n        },\n        dataTransferIsWritable: function (e) {\n          var n, i;\n          if (null != (null != e ? e.setData : void 0)) {\n            for (n in t) if (i = t[n], !function () {\n              try {\n                return e.setData(n, i), e.getData(n) === i;\n              } catch (t) {}\n            }()) return;\n            return !0;\n          }\n        },\n        keyEventIsKeyboardCommand: function () {\n          return /Mac|^iP/.test(navigator.platform) ? function (t) {\n            return t.metaKey;\n          } : function (t) {\n            return t.ctrlKey;\n          };\n        }()\n      });\n    }.call(this), function () {\n      e.extend({\n        RTL_PATTERN: /[\\u05BE\\u05C0\\u05C3\\u05D0-\\u05EA\\u05F0-\\u05F4\\u061B\\u061F\\u0621-\\u063A\\u0640-\\u064A\\u066D\\u0671-\\u06B7\\u06BA-\\u06BE\\u06C0-\\u06CE\\u06D0-\\u06D5\\u06E5\\u06E6\\u200F\\u202B\\u202E\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE72\\uFE74\\uFE76-\\uFEFC]/,\n        getDirection: function () {\n          var t, n, i, o;\n          return n = e.makeElement(\"input\", {\n            dir: \"auto\",\n            name: \"x\",\n            dirName: \"x.dir\"\n          }), t = e.makeElement(\"form\"), t.appendChild(n), i = function () {\n            try {\n              return new FormData(t).has(n.dirName);\n            } catch (e) {}\n          }(), o = function () {\n            try {\n              return n.matches(\":dir(ltr),:dir(rtl)\");\n            } catch (t) {}\n          }(), i ? function (e) {\n            return n.value = e, new FormData(t).get(n.dirName);\n          } : o ? function (t) {\n            return n.value = t, n.matches(\":dir(rtl)\") ? \"rtl\" : \"ltr\";\n          } : function (t) {\n            var n;\n            return n = t.trim().charAt(0), e.RTL_PATTERN.test(n) ? \"rtl\" : \"ltr\";\n          };\n        }()\n      });\n    }.call(this), function () {}.call(this), function () {\n      var t,\n        n = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var o in e) i.call(e, o) && (t[o] = e[o]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        i = {}.hasOwnProperty;\n      t = e.arraysAreEqual, e.Hash = function (i) {\n        function o(t) {\n          null == t && (t = {}), this.values = s(t), o.__super__.constructor.apply(this, arguments);\n        }\n        var r, s, a, u, c;\n        return n(o, i), o.fromCommonAttributesOfObjects = function (t) {\n          var e, n, i, o, s, a;\n          if (null == t && (t = []), !t.length) return new this();\n          for (e = r(t[0]), i = e.getKeys(), a = t.slice(1), n = 0, o = a.length; o > n; n++) s = a[n], i = e.getKeysCommonToHash(r(s)), e = e.slice(i);\n          return e;\n        }, o.box = function (t) {\n          return r(t);\n        }, o.prototype.add = function (t, e) {\n          return this.merge(u(t, e));\n        }, o.prototype.remove = function (t) {\n          return new e.Hash(s(this.values, t));\n        }, o.prototype.get = function (t) {\n          return this.values[t];\n        }, o.prototype.has = function (t) {\n          return t in this.values;\n        }, o.prototype.merge = function (t) {\n          return new e.Hash(a(this.values, c(t)));\n        }, o.prototype.slice = function (t) {\n          var n, i, o, r;\n          for (r = {}, n = 0, o = t.length; o > n; n++) i = t[n], this.has(i) && (r[i] = this.values[i]);\n          return new e.Hash(r);\n        }, o.prototype.getKeys = function () {\n          return Object.keys(this.values);\n        }, o.prototype.getKeysCommonToHash = function (t) {\n          var e, n, i, o, s;\n          for (t = r(t), o = this.getKeys(), s = [], e = 0, i = o.length; i > e; e++) n = o[e], this.values[n] === t.values[n] && s.push(n);\n          return s;\n        }, o.prototype.isEqualTo = function (e) {\n          return t(this.toArray(), r(e).toArray());\n        }, o.prototype.isEmpty = function () {\n          return 0 === this.getKeys().length;\n        }, o.prototype.toArray = function () {\n          var t, e, n;\n          return (null != this.array ? this.array : this.array = function () {\n            var i;\n            e = [], i = this.values;\n            for (t in i) n = i[t], e.push(t, n);\n            return e;\n          }.call(this)).slice(0);\n        }, o.prototype.toObject = function () {\n          return s(this.values);\n        }, o.prototype.toJSON = function () {\n          return this.toObject();\n        }, o.prototype.contentsForInspection = function () {\n          return {\n            values: JSON.stringify(this.values)\n          };\n        }, u = function (t, e) {\n          var n;\n          return n = {}, n[t] = e, n;\n        }, a = function (t, e) {\n          var n, i, o;\n          i = s(t);\n          for (n in e) o = e[n], i[n] = o;\n          return i;\n        }, s = function (t, e) {\n          var n, i, o, r, s;\n          for (r = {}, s = Object.keys(t).sort(), n = 0, o = s.length; o > n; n++) i = s[n], i !== e && (r[i] = t[i]);\n          return r;\n        }, r = function (t) {\n          return t instanceof e.Hash ? t : new e.Hash(t);\n        }, c = function (t) {\n          return t instanceof e.Hash ? t.values : t;\n        }, o;\n      }(e.Object);\n    }.call(this), function () {\n      e.ObjectGroup = function () {\n        function t(t, e) {\n          var n, i;\n          this.objects = null != t ? t : [], i = e.depth, n = e.asTree, n && (this.depth = i, this.objects = this.constructor.groupObjects(this.objects, {\n            asTree: n,\n            depth: this.depth + 1\n          }));\n        }\n        return t.groupObjects = function (t, e) {\n          var n, i, o, r, s, a, u, c, l;\n          for (null == t && (t = []), l = null != e ? e : {}, o = l.depth, n = l.asTree, n && null == o && (o = 0), c = [], s = 0, a = t.length; a > s; s++) {\n            if (u = t[s], r) {\n              if ((\"function\" == typeof u.canBeGrouped ? u.canBeGrouped(o) : void 0) && (\"function\" == typeof (i = r[r.length - 1]).canBeGroupedWith ? i.canBeGroupedWith(u, o) : void 0)) {\n                r.push(u);\n                continue;\n              }\n              c.push(new this(r, {\n                depth: o,\n                asTree: n\n              })), r = null;\n            }\n            (\"function\" == typeof u.canBeGrouped ? u.canBeGrouped(o) : void 0) ? r = [u] : c.push(u);\n          }\n          return r && c.push(new this(r, {\n            depth: o,\n            asTree: n\n          })), c;\n        }, t.prototype.getObjects = function () {\n          return this.objects;\n        }, t.prototype.getDepth = function () {\n          return this.depth;\n        }, t.prototype.getCacheKey = function () {\n          var t, e, n, i, o;\n          for (e = [\"objectGroup\"], o = this.getObjects(), t = 0, n = o.length; n > t; t++) i = o[t], e.push(i.getCacheKey());\n          return e.join(\"/\");\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.ObjectMap = function (e) {\n        function n(t) {\n          var e, n, i, o, r;\n          for (null == t && (t = []), this.objects = {}, i = 0, o = t.length; o > i; i++) r = t[i], n = JSON.stringify(r), null == (e = this.objects)[n] && (e[n] = r);\n        }\n        return t(n, e), n.prototype.find = function (t) {\n          var e;\n          return e = JSON.stringify(t), this.objects[e];\n        }, n;\n      }(e.BasicObject);\n    }.call(this), function () {\n      e.ElementStore = function () {\n        function t(t) {\n          this.reset(t);\n        }\n        var e;\n        return t.prototype.add = function (t) {\n          var n;\n          return n = e(t), this.elements[n] = t;\n        }, t.prototype.remove = function (t) {\n          var n, i;\n          return n = e(t), (i = this.elements[n]) ? (delete this.elements[n], i) : void 0;\n        }, t.prototype.reset = function (t) {\n          var e, n, i;\n          for (null == t && (t = []), this.elements = {}, n = 0, i = t.length; i > n; n++) e = t[n], this.add(e);\n          return t;\n        }, e = function (t) {\n          return t.dataset.trixStoreKey;\n        }, t;\n      }();\n    }.call(this), function () {}.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.Operation = function (e) {\n        function n() {\n          return n.__super__.constructor.apply(this, arguments);\n        }\n        return t(n, e), n.prototype.isPerforming = function () {\n          return this.performing === !0;\n        }, n.prototype.hasPerformed = function () {\n          return this.performed === !0;\n        }, n.prototype.hasSucceeded = function () {\n          return this.performed && this.succeeded;\n        }, n.prototype.hasFailed = function () {\n          return this.performed && !this.succeeded;\n        }, n.prototype.getPromise = function () {\n          return null != this.promise ? this.promise : this.promise = new Promise(function (t) {\n            return function (e, n) {\n              return t.performing = !0, t.perform(function (i, o) {\n                return t.succeeded = i, t.performing = !1, t.performed = !0, t.succeeded ? e(o) : n(o);\n              });\n            };\n          }(this));\n        }, n.prototype.perform = function (t) {\n          return t(!1);\n        }, n.prototype.release = function () {\n          var t;\n          return null != (t = this.promise) && \"function\" == typeof t.cancel && t.cancel(), this.promise = null, this.performing = null, this.performed = null, this.succeeded = null;\n        }, n.proxyMethod(\"getPromise().then\"), n.proxyMethod(\"getPromise().catch\"), n;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r,\n        s = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) a.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        a = {}.hasOwnProperty;\n      e.UTF16String = function (t) {\n        function e(t, e) {\n          this.ucs2String = t, this.codepoints = e, this.length = this.codepoints.length, this.ucs2Length = this.ucs2String.length;\n        }\n        return s(e, t), e.box = function (t) {\n          return null == t && (t = \"\"), t instanceof this ? t : this.fromUCS2String(null != t ? t.toString() : void 0);\n        }, e.fromUCS2String = function (t) {\n          return new this(t, o(t));\n        }, e.fromCodepoints = function (t) {\n          return new this(r(t), t);\n        }, e.prototype.offsetToUCS2Offset = function (t) {\n          return r(this.codepoints.slice(0, Math.max(0, t))).length;\n        }, e.prototype.offsetFromUCS2Offset = function (t) {\n          return o(this.ucs2String.slice(0, Math.max(0, t))).length;\n        }, e.prototype.slice = function () {\n          var t;\n          return this.constructor.fromCodepoints((t = this.codepoints).slice.apply(t, arguments));\n        }, e.prototype.charAt = function (t) {\n          return this.slice(t, t + 1);\n        }, e.prototype.isEqualTo = function (t) {\n          return this.constructor.box(t).ucs2String === this.ucs2String;\n        }, e.prototype.toJSON = function () {\n          return this.ucs2String;\n        }, e.prototype.getCacheKey = function () {\n          return this.ucs2String;\n        }, e.prototype.toString = function () {\n          return this.ucs2String;\n        }, e;\n      }(e.BasicObject), t = 1 === (\"function\" == typeof Array.from ? Array.from(\"\\ud83d\\udc7c\").length : void 0), n = null != (\"function\" == typeof \" \".codePointAt ? \" \".codePointAt(0) : void 0), i = \" \\ud83d\\udc7c\" === (\"function\" == typeof String.fromCodePoint ? String.fromCodePoint(32, 128124) : void 0), o = t && n ? function (t) {\n        return Array.from(t).map(function (t) {\n          return t.codePointAt(0);\n        });\n      } : function (t) {\n        var e, n, i, o, r;\n        for (o = [], e = 0, i = t.length; i > e;) r = t.charCodeAt(e++), r >= 55296 && 56319 >= r && i > e && (n = t.charCodeAt(e++), 56320 === (64512 & n) ? r = ((1023 & r) << 10) + (1023 & n) + 65536 : e--), o.push(r);\n        return o;\n      }, r = i ? function (t) {\n        return String.fromCodePoint.apply(String, t);\n      } : function (t) {\n        var e, n, i;\n        return e = function () {\n          var e, o, r;\n          for (r = [], e = 0, o = t.length; o > e; e++) i = t[e], n = \"\", i > 65535 && (i -= 65536, n += String.fromCharCode(i >>> 10 & 1023 | 55296), i = 56320 | 1023 & i), r.push(n + String.fromCharCode(i));\n          return r;\n        }(), e.join(\"\");\n      };\n    }.call(this), function () {}.call(this), function () {}.call(this), function () {\n      e.config.lang = {\n        attachFiles: \"Attach Files\",\n        bold: \"Bold\",\n        bullets: \"Bullets\",\n        \"byte\": \"Byte\",\n        bytes: \"Bytes\",\n        captionPlaceholder: \"Add a caption\\u2026\",\n        code: \"Code\",\n        heading1: \"Heading\",\n        indent: \"Increase Level\",\n        italic: \"Italic\",\n        link: \"Link\",\n        numbers: \"Numbers\",\n        outdent: \"Decrease Level\",\n        quote: \"Quote\",\n        redo: \"Redo\",\n        remove: \"Remove\",\n        strike: \"Strikethrough\",\n        undo: \"Undo\",\n        unlink: \"Unlink\",\n        url: \"URL\",\n        urlPlaceholder: \"Enter a URL\\u2026\",\n        GB: \"GB\",\n        KB: \"KB\",\n        MB: \"MB\",\n        PB: \"PB\",\n        TB: \"TB\"\n      };\n    }.call(this), function () {\n      e.config.css = {\n        attachment: \"attachment\",\n        attachmentCaption: \"attachment__caption\",\n        attachmentCaptionEditor: \"attachment__caption-editor\",\n        attachmentMetadata: \"attachment__metadata\",\n        attachmentMetadataContainer: \"attachment__metadata-container\",\n        attachmentName: \"attachment__name\",\n        attachmentProgress: \"attachment__progress\",\n        attachmentSize: \"attachment__size\",\n        attachmentToolbar: \"attachment__toolbar\",\n        attachmentGallery: \"attachment-gallery\"\n      };\n    }.call(this), function () {\n      var t;\n      e.config.blockAttributes = t = {\n        \"default\": {\n          tagName: \"div\",\n          parse: !1\n        },\n        quote: {\n          tagName: \"blockquote\",\n          nestable: !0\n        },\n        heading1: {\n          tagName: \"h1\",\n          terminal: !0,\n          breakOnReturn: !0,\n          group: !1\n        },\n        code: {\n          tagName: \"pre\",\n          terminal: !0,\n          text: {\n            plaintext: !0\n          }\n        },\n        bulletList: {\n          tagName: \"ul\",\n          parse: !1\n        },\n        bullet: {\n          tagName: \"li\",\n          listAttribute: \"bulletList\",\n          group: !1,\n          nestable: !0,\n          test: function (n) {\n            return e.tagName(n.parentNode) === t[this.listAttribute].tagName;\n          }\n        },\n        numberList: {\n          tagName: \"ol\",\n          parse: !1\n        },\n        number: {\n          tagName: \"li\",\n          listAttribute: \"numberList\",\n          group: !1,\n          nestable: !0,\n          test: function (n) {\n            return e.tagName(n.parentNode) === t[this.listAttribute].tagName;\n          }\n        },\n        attachmentGallery: {\n          tagName: \"div\",\n          exclusive: !0,\n          terminal: !0,\n          parse: !1,\n          group: !1\n        }\n      };\n    }.call(this), function () {\n      var t, n;\n      t = e.config.lang, n = [t.bytes, t.KB, t.MB, t.GB, t.TB, t.PB], e.config.fileSize = {\n        prefix: \"IEC\",\n        precision: 2,\n        formatter: function (e) {\n          var i, o, r, s, a;\n          switch (e) {\n            case 0:\n              return \"0 \" + t.bytes;\n            case 1:\n              return \"1 \" + t.byte;\n            default:\n              return i = function () {\n                switch (this.prefix) {\n                  case \"SI\":\n                    return 1e3;\n                  case \"IEC\":\n                    return 1024;\n                }\n              }.call(this), o = Math.floor(Math.log(e) / Math.log(i)), r = e / Math.pow(i, o), s = r.toFixed(this.precision), a = s.replace(/0*$/, \"\").replace(/\\.$/, \"\"), a + \" \" + n[o];\n          }\n        }\n      };\n    }.call(this), function () {\n      e.config.textAttributes = {\n        bold: {\n          tagName: \"strong\",\n          inheritable: !0,\n          parser: function (t) {\n            var e;\n            return e = window.getComputedStyle(t), \"bold\" === e.fontWeight || e.fontWeight >= 600;\n          }\n        },\n        italic: {\n          tagName: \"em\",\n          inheritable: !0,\n          parser: function (t) {\n            var e;\n            return e = window.getComputedStyle(t), \"italic\" === e.fontStyle;\n          }\n        },\n        href: {\n          groupTagName: \"a\",\n          parser: function (t) {\n            var n, i, o;\n            return n = e.AttachmentView.attachmentSelector, o = \"a:not(\" + n + \")\", (i = e.findClosestElementFromNode(t, {\n              matchingSelector: o\n            })) ? i.getAttribute(\"href\") : void 0;\n          }\n        },\n        strike: {\n          tagName: \"del\",\n          inheritable: !0\n        },\n        frozen: {\n          style: {\n            backgroundColor: \"highlight\"\n          }\n        }\n      };\n    }.call(this), function () {\n      var t, n, i, o, r;\n      r = \"[data-trix-serialize=false]\", o = [\"contenteditable\", \"data-trix-id\", \"data-trix-store-key\", \"data-trix-mutable\", \"data-trix-placeholder\", \"tabindex\"], n = \"data-trix-serialized-attributes\", i = \"[\" + n + \"]\", t = new RegExp(\"<!--block-->\", \"g\"), e.extend({\n        serializers: {\n          \"application/json\": function (t) {\n            var n;\n            if (t instanceof e.Document) n = t;else {\n              if (!(t instanceof HTMLElement)) throw new Error(\"unserializable object\");\n              n = e.Document.fromHTML(t.innerHTML);\n            }\n            return n.toSerializableDocument().toJSONString();\n          },\n          \"text/html\": function (s) {\n            var a, u, c, l, h, p, d, f, g, m, v, y, b, A, C, x, w;\n            if (s instanceof e.Document) l = e.DocumentView.render(s);else {\n              if (!(s instanceof HTMLElement)) throw new Error(\"unserializable object\");\n              l = s.cloneNode(!0);\n            }\n            for (A = l.querySelectorAll(r), h = 0, g = A.length; g > h; h++) c = A[h], e.removeNode(c);\n            for (p = 0, m = o.length; m > p; p++) for (a = o[p], C = l.querySelectorAll(\"[\" + a + \"]\"), d = 0, v = C.length; v > d; d++) c = C[d], c.removeAttribute(a);\n            for (x = l.querySelectorAll(i), f = 0, y = x.length; y > f; f++) {\n              c = x[f];\n              try {\n                u = JSON.parse(c.getAttribute(n)), c.removeAttribute(n);\n                for (b in u) w = u[b], c.setAttribute(b, w);\n              } catch (E) {}\n            }\n            return l.innerHTML.replace(t, \"\");\n          }\n        },\n        deserializers: {\n          \"application/json\": function (t) {\n            return e.Document.fromJSONString(t);\n          },\n          \"text/html\": function (t) {\n            return e.Document.fromHTML(t);\n          }\n        },\n        serializeToContentType: function (t, n) {\n          var i;\n          if (i = e.serializers[n]) return i(t);\n          throw new Error(\"unknown content type: \" + n);\n        },\n        deserializeFromContentType: function (t, n) {\n          var i;\n          if (i = e.deserializers[n]) return i(t);\n          throw new Error(\"unknown content type: \" + n);\n        }\n      });\n    }.call(this), function () {\n      var t;\n      t = e.config.lang, e.config.toolbar = {\n        getDefaultHTML: function () {\n          return '<div class=\"trix-button-row\">\\n  <span class=\"trix-button-group trix-button-group--text-tools\" data-trix-button-group=\"text-tools\">\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bold\" data-trix-attribute=\"bold\" data-trix-key=\"b\" title=\"' + t.bold + '\" tabindex=\"-1\">' + t.bold + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-italic\" data-trix-attribute=\"italic\" data-trix-key=\"i\" title=\"' + t.italic + '\" tabindex=\"-1\">' + t.italic + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-strike\" data-trix-attribute=\"strike\" title=\"' + t.strike + '\" tabindex=\"-1\">' + t.strike + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-link\" data-trix-attribute=\"href\" data-trix-action=\"link\" data-trix-key=\"k\" title=\"' + t.link + '\" tabindex=\"-1\">' + t.link + '</button>\\n  </span>\\n\\n  <span class=\"trix-button-group trix-button-group--block-tools\" data-trix-button-group=\"block-tools\">\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-heading-1\" data-trix-attribute=\"heading1\" title=\"' + t.heading1 + '\" tabindex=\"-1\">' + t.heading1 + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-quote\" data-trix-attribute=\"quote\" title=\"' + t.quote + '\" tabindex=\"-1\">' + t.quote + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-code\" data-trix-attribute=\"code\" title=\"' + t.code + '\" tabindex=\"-1\">' + t.code + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bullet-list\" data-trix-attribute=\"bullet\" title=\"' + t.bullets + '\" tabindex=\"-1\">' + t.bullets + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-number-list\" data-trix-attribute=\"number\" title=\"' + t.numbers + '\" tabindex=\"-1\">' + t.numbers + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-decrease-nesting-level\" data-trix-action=\"decreaseNestingLevel\" title=\"' + t.outdent + '\" tabindex=\"-1\">' + t.outdent + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-increase-nesting-level\" data-trix-action=\"increaseNestingLevel\" title=\"' + t.indent + '\" tabindex=\"-1\">' + t.indent + '</button>\\n  </span>\\n\\n  <span class=\"trix-button-group trix-button-group--file-tools\" data-trix-button-group=\"file-tools\">\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-attach\" data-trix-action=\"attachFiles\" title=\"' + t.attachFiles + '\" tabindex=\"-1\">' + t.attachFiles + '</button>\\n  </span>\\n\\n  <span class=\"trix-button-group-spacer\"></span>\\n\\n  <span class=\"trix-button-group trix-button-group--history-tools\" data-trix-button-group=\"history-tools\">\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-undo\" data-trix-action=\"undo\" data-trix-key=\"z\" title=\"' + t.undo + '\" tabindex=\"-1\">' + t.undo + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-redo\" data-trix-action=\"redo\" data-trix-key=\"shift+z\" title=\"' + t.redo + '\" tabindex=\"-1\">' + t.redo + '</button>\\n  </span>\\n</div>\\n\\n<div class=\"trix-dialogs\" data-trix-dialogs>\\n  <div class=\"trix-dialog trix-dialog--link\" data-trix-dialog=\"href\" data-trix-dialog-attribute=\"href\">\\n    <div class=\"trix-dialog__link-fields\">\\n      <input type=\"url\" name=\"href\" class=\"trix-input trix-input--dialog\" placeholder=\"' + t.urlPlaceholder + '\" aria-label=\"' + t.url + '\" required data-trix-input>\\n      <div class=\"trix-button-group\">\\n        <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"' + t.link + '\" data-trix-method=\"setAttribute\">\\n        <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"' + t.unlink + '\" data-trix-method=\"removeAttribute\">\\n      </div>\\n    </div>\\n  </div>\\n</div>';\n        }\n      };\n    }.call(this), function () {\n      e.config.undoInterval = 5e3;\n    }.call(this), function () {\n      e.config.attachments = {\n        preview: {\n          presentation: \"gallery\",\n          caption: {\n            name: !0,\n            size: !0\n          }\n        },\n        file: {\n          caption: {\n            size: !0\n          }\n        }\n      };\n    }.call(this), function () {\n      e.config.keyNames = {\n        8: \"backspace\",\n        9: \"tab\",\n        13: \"return\",\n        27: \"escape\",\n        37: \"left\",\n        39: \"right\",\n        46: \"delete\",\n        68: \"d\",\n        72: \"h\",\n        79: \"o\"\n      };\n    }.call(this), function () {\n      e.config.input = {\n        level2Enabled: !0,\n        getLevel: function () {\n          return this.level2Enabled && e.browser.supportsInputEvents ? 2 : 0;\n        },\n        pickFiles: function (t) {\n          var n;\n          return n = e.makeElement(\"input\", {\n            type: \"file\",\n            multiple: !0,\n            hidden: !0,\n            id: this.fileInputId\n          }), n.addEventListener(\"change\", function () {\n            return t(n.files), e.removeNode(n);\n          }), e.removeNode(document.getElementById(this.fileInputId)), document.body.appendChild(n), n.click();\n        },\n        fileInputId: \"trix-file-input-\" + Date.now().toString(16)\n      };\n    }.call(this), function () {}.call(this), function () {\n      e.registerElement(\"trix-toolbar\", {\n        defaultCSS: \"%t {\\n  display: block;\\n}\\n\\n%t {\\n  white-space: nowrap;\\n}\\n\\n%t [data-trix-dialog] {\\n  display: none;\\n}\\n\\n%t [data-trix-dialog][data-trix-active] {\\n  display: block;\\n}\\n\\n%t [data-trix-dialog] [data-trix-validate]:invalid {\\n  background-color: #ffdddd;\\n}\",\n        initialize: function () {\n          return \"\" === this.innerHTML ? this.innerHTML = e.config.toolbar.getDefaultHTML() : void 0;\n        }\n      });\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty,\n        i = [].indexOf || function (t) {\n          for (var e = 0, n = this.length; n > e; e++) if (e in this && this[e] === t) return e;\n          return -1;\n        };\n      e.ObjectView = function (n) {\n        function o(t, e) {\n          this.object = t, this.options = null != e ? e : {}, this.childViews = [], this.rootView = this;\n        }\n        return t(o, n), o.prototype.getNodes = function () {\n          var t, e, n, i, o;\n          for (null == this.nodes && (this.nodes = this.createNodes()), i = this.nodes, o = [], t = 0, e = i.length; e > t; t++) n = i[t], o.push(n.cloneNode(!0));\n          return o;\n        }, o.prototype.invalidate = function () {\n          var t;\n          return this.nodes = null, this.childViews = [], null != (t = this.parentView) ? t.invalidate() : void 0;\n        }, o.prototype.invalidateViewForObject = function (t) {\n          var e;\n          return null != (e = this.findViewForObject(t)) ? e.invalidate() : void 0;\n        }, o.prototype.findOrCreateCachedChildView = function (t, e) {\n          var n;\n          return (n = this.getCachedViewForObject(e)) ? this.recordChildView(n) : (n = this.createChildView.apply(this, arguments), this.cacheViewForObject(n, e)), n;\n        }, o.prototype.createChildView = function (t, n, i) {\n          var o;\n          return null == i && (i = {}), n instanceof e.ObjectGroup && (i.viewClass = t, t = e.ObjectGroupView), o = new t(n, i), this.recordChildView(o);\n        }, o.prototype.recordChildView = function (t) {\n          return t.parentView = this, t.rootView = this.rootView, this.childViews.push(t), t;\n        }, o.prototype.getAllChildViews = function () {\n          var t, e, n, i, o;\n          for (o = [], i = this.childViews, e = 0, n = i.length; n > e; e++) t = i[e], o.push(t), o = o.concat(t.getAllChildViews());\n          return o;\n        }, o.prototype.findElement = function () {\n          return this.findElementForObject(this.object);\n        }, o.prototype.findElementForObject = function (t) {\n          var e;\n          return (e = null != t ? t.id : void 0) ? this.rootView.element.querySelector(\"[data-trix-id='\" + e + \"']\") : void 0;\n        }, o.prototype.findViewForObject = function (t) {\n          var e, n, i, o;\n          for (i = this.getAllChildViews(), e = 0, n = i.length; n > e; e++) if (o = i[e], o.object === t) return o;\n        }, o.prototype.getViewCache = function () {\n          return this.rootView !== this ? this.rootView.getViewCache() : this.isViewCachingEnabled() ? null != this.viewCache ? this.viewCache : this.viewCache = {} : void 0;\n        }, o.prototype.isViewCachingEnabled = function () {\n          return this.shouldCacheViews !== !1;\n        }, o.prototype.enableViewCaching = function () {\n          return this.shouldCacheViews = !0;\n        }, o.prototype.disableViewCaching = function () {\n          return this.shouldCacheViews = !1;\n        }, o.prototype.getCachedViewForObject = function (t) {\n          var e;\n          return null != (e = this.getViewCache()) ? e[t.getCacheKey()] : void 0;\n        }, o.prototype.cacheViewForObject = function (t, e) {\n          var n;\n          return null != (n = this.getViewCache()) ? n[e.getCacheKey()] = t : void 0;\n        }, o.prototype.garbageCollectCachedViews = function () {\n          var t, e, n, o, r, s;\n          if (t = this.getViewCache()) {\n            s = this.getAllChildViews().concat(this), n = function () {\n              var t, e, n;\n              for (n = [], t = 0, e = s.length; e > t; t++) r = s[t], n.push(r.object.getCacheKey());\n              return n;\n            }(), o = [];\n            for (e in t) i.call(n, e) < 0 && o.push(delete t[e]);\n            return o;\n          }\n        }, o;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.ObjectGroupView = function (e) {\n        function n() {\n          n.__super__.constructor.apply(this, arguments), this.objectGroup = this.object, this.viewClass = this.options.viewClass, delete this.options.viewClass;\n        }\n        return t(n, e), n.prototype.getChildViews = function () {\n          var t, e, n, i;\n          if (!this.childViews.length) for (i = this.objectGroup.getObjects(), t = 0, e = i.length; e > t; t++) n = i[t], this.findOrCreateCachedChildView(this.viewClass, n, this.options);\n          return this.childViews;\n        }, n.prototype.createNodes = function () {\n          var t, e, n, i, o, r, s, a, u;\n          for (t = this.createContainerElement(), s = this.getChildViews(), e = 0, i = s.length; i > e; e++) for (u = s[e], a = u.getNodes(), n = 0, o = a.length; o > n; n++) r = a[n], t.appendChild(r);\n          return [t];\n        }, n.prototype.createContainerElement = function (t) {\n          return null == t && (t = this.objectGroup.getDepth()), this.getChildViews()[0].createContainerElement(t);\n        }, n;\n      }(e.ObjectView);\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.Controller = function (e) {\n        function n() {\n          return n.__super__.constructor.apply(this, arguments);\n        }\n        return t(n, e), n;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r,\n        s,\n        a = function (t, e) {\n          return function () {\n            return t.apply(e, arguments);\n          };\n        },\n        u = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) c.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        c = {}.hasOwnProperty,\n        l = [].indexOf || function (t) {\n          for (var e = 0, n = this.length; n > e; e++) if (e in this && this[e] === t) return e;\n          return -1;\n        };\n      t = e.findClosestElementFromNode, i = e.nodeIsEmptyTextNode, n = e.nodeIsBlockStartComment, o = e.normalizeSpaces, r = e.summarizeStringChange, s = e.tagName, e.MutationObserver = function (e) {\n        function c(t) {\n          this.element = t, this.didMutate = a(this.didMutate, this), this.observer = new window.MutationObserver(this.didMutate), this.start();\n        }\n        var h, p, d, f;\n        return u(c, e), p = \"data-trix-mutable\", d = \"[\" + p + \"]\", f = {\n          attributes: !0,\n          childList: !0,\n          characterData: !0,\n          characterDataOldValue: !0,\n          subtree: !0\n        }, c.prototype.start = function () {\n          return this.reset(), this.observer.observe(this.element, f);\n        }, c.prototype.stop = function () {\n          return this.observer.disconnect();\n        }, c.prototype.didMutate = function (t) {\n          var e, n;\n          return (e = this.mutations).push.apply(e, this.findSignificantMutations(t)), this.mutations.length ? (null != (n = this.delegate) && \"function\" == typeof n.elementDidMutate && n.elementDidMutate(this.getMutationSummary()), this.reset()) : void 0;\n        }, c.prototype.reset = function () {\n          return this.mutations = [];\n        }, c.prototype.findSignificantMutations = function (t) {\n          var e, n, i, o;\n          for (o = [], e = 0, n = t.length; n > e; e++) i = t[e], this.mutationIsSignificant(i) && o.push(i);\n          return o;\n        }, c.prototype.mutationIsSignificant = function (t) {\n          var e, n, i, o;\n          if (this.nodeIsMutable(t.target)) return !1;\n          for (o = this.nodesModifiedByMutation(t), e = 0, n = o.length; n > e; e++) if (i = o[e], this.nodeIsSignificant(i)) return !0;\n          return !1;\n        }, c.prototype.nodeIsSignificant = function (t) {\n          return t !== this.element && !this.nodeIsMutable(t) && !i(t);\n        }, c.prototype.nodeIsMutable = function (e) {\n          return t(e, {\n            matchingSelector: d\n          });\n        }, c.prototype.nodesModifiedByMutation = function (t) {\n          var e;\n          switch (e = [], t.type) {\n            case \"attributes\":\n              t.attributeName !== p && e.push(t.target);\n              break;\n            case \"characterData\":\n              e.push(t.target.parentNode), e.push(t.target);\n              break;\n            case \"childList\":\n              e.push.apply(e, t.addedNodes), e.push.apply(e, t.removedNodes);\n          }\n          return e;\n        }, c.prototype.getMutationSummary = function () {\n          return this.getTextMutationSummary();\n        }, c.prototype.getTextMutationSummary = function () {\n          var t, e, n, i, o, r, s, a, u, c, h;\n          for (a = this.getTextChangesFromCharacterData(), n = a.additions, o = a.deletions, h = this.getTextChangesFromChildList(), u = h.additions, r = 0, s = u.length; s > r; r++) e = u[r], l.call(n, e) < 0 && n.push(e);\n          return o.push.apply(o, h.deletions), c = {}, (t = n.join(\"\")) && (c.textAdded = t), (i = o.join(\"\")) && (c.textDeleted = i), c;\n        }, c.prototype.getMutationsByType = function (t) {\n          var e, n, i, o, r;\n          for (o = this.mutations, r = [], e = 0, n = o.length; n > e; e++) i = o[e], i.type === t && r.push(i);\n          return r;\n        }, c.prototype.getTextChangesFromChildList = function () {\n          var t, e, i, r, s, a, u, c, l, p, d;\n          for (t = [], u = [], a = this.getMutationsByType(\"childList\"), e = 0, r = a.length; r > e; e++) s = a[e], t.push.apply(t, s.addedNodes), u.push.apply(u, s.removedNodes);\n          return c = 0 === t.length && 1 === u.length && n(u[0]), c ? (p = [], d = [\"\\n\"]) : (p = h(t), d = h(u)), {\n            additions: function () {\n              var t, e, n;\n              for (n = [], i = t = 0, e = p.length; e > t; i = ++t) l = p[i], l !== d[i] && n.push(o(l));\n              return n;\n            }(),\n            deletions: function () {\n              var t, e, n;\n              for (n = [], i = t = 0, e = d.length; e > t; i = ++t) l = d[i], l !== p[i] && n.push(o(l));\n              return n;\n            }()\n          };\n        }, c.prototype.getTextChangesFromCharacterData = function () {\n          var t, e, n, i, s, a, u, c;\n          return e = this.getMutationsByType(\"characterData\"), e.length && (c = e[0], n = e[e.length - 1], s = o(c.oldValue), i = o(n.target.data), a = r(s, i), t = a.added, u = a.removed), {\n            additions: t ? [t] : [],\n            deletions: u ? [u] : []\n          };\n        }, h = function (t) {\n          var e, n, i, o;\n          for (null == t && (t = []), o = [], e = 0, n = t.length; n > e; e++) switch (i = t[e], i.nodeType) {\n            case Node.TEXT_NODE:\n              o.push(i.data);\n              break;\n            case Node.ELEMENT_NODE:\n              \"br\" === s(i) ? o.push(\"\\n\") : o.push.apply(o, h(i.childNodes));\n          }\n          return o;\n        }, c;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.FileVerificationOperation = function (e) {\n        function n(t) {\n          this.file = t;\n        }\n        return t(n, e), n.prototype.perform = function (t) {\n          var e;\n          return e = new FileReader(), e.onerror = function () {\n            return t(!1);\n          }, e.onload = function (n) {\n            return function () {\n              e.onerror = null;\n              try {\n                e.abort();\n              } catch (i) {}\n              return t(!0, n.file);\n            };\n          }(this), e.readAsArrayBuffer(this.file);\n        }, n;\n      }(e.Operation);\n    }.call(this), function () {\n      var t,\n        n,\n        i = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) o.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        o = {}.hasOwnProperty;\n      t = e.handleEvent, n = e.innerElementIsActive, e.InputController = function (o) {\n        function r(n) {\n          var i;\n          this.element = n, this.mutationObserver = new e.MutationObserver(this.element), this.mutationObserver.delegate = this;\n          for (i in this.events) t(i, {\n            onElement: this.element,\n            withCallback: this.handlerFor(i)\n          });\n        }\n        return i(r, o), r.prototype.events = {}, r.prototype.elementDidMutate = function () {}, r.prototype.editorWillSyncDocumentView = function () {\n          return this.mutationObserver.stop();\n        }, r.prototype.editorDidSyncDocumentView = function () {\n          return this.mutationObserver.start();\n        }, r.prototype.requestRender = function () {\n          var t;\n          return null != (t = this.delegate) && \"function\" == typeof t.inputControllerDidRequestRender ? t.inputControllerDidRequestRender() : void 0;\n        }, r.prototype.requestReparse = function () {\n          var t;\n          return null != (t = this.delegate) && \"function\" == typeof t.inputControllerDidRequestReparse && t.inputControllerDidRequestReparse(), this.requestRender();\n        }, r.prototype.attachFiles = function (t) {\n          var n, i;\n          return i = function () {\n            var i, o, r;\n            for (r = [], i = 0, o = t.length; o > i; i++) n = t[i], r.push(new e.FileVerificationOperation(n));\n            return r;\n          }(), Promise.all(i).then(function (t) {\n            return function (e) {\n              return t.handleInput(function () {\n                var t, n;\n                return null != (t = this.delegate) && t.inputControllerWillAttachFiles(), null != (n = this.responder) && n.insertFiles(e), this.requestRender();\n              });\n            };\n          }(this));\n        }, r.prototype.handlerFor = function (t) {\n          return function (e) {\n            return function (i) {\n              return i.defaultPrevented ? void 0 : e.handleInput(function () {\n                return n(this.element) ? void 0 : (this.eventName = t, this.events[t].call(this, i));\n              });\n            };\n          }(this);\n        }, r.prototype.handleInput = function (t) {\n          var e, n;\n          try {\n            return null != (e = this.delegate) && e.inputControllerWillHandleInput(), t.call(this);\n          } finally {\n            null != (n = this.delegate) && n.inputControllerDidHandleInput();\n          }\n        }, r.prototype.createLinkHTML = function (t, e) {\n          var n;\n          return n = document.createElement(\"a\"), n.href = t, n.textContent = null != e ? e : t, n.outerHTML;\n        }, r;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r,\n        s,\n        a,\n        u,\n        c,\n        l,\n        h,\n        p,\n        d,\n        f = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) g.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        g = {}.hasOwnProperty,\n        m = [].indexOf || function (t) {\n          for (var e = 0, n = this.length; n > e; e++) if (e in this && this[e] === t) return e;\n          return -1;\n        };\n      c = e.makeElement, l = e.objectsAreEqual, d = e.tagName, n = e.browser, a = e.keyEventIsKeyboardCommand, o = e.dataTransferIsWritable, i = e.dataTransferIsPlainText, u = e.config.keyNames, e.Level0InputController = function (n) {\n        function s() {\n          s.__super__.constructor.apply(this, arguments), this.resetInputSummary();\n        }\n        var d;\n        return f(s, n), d = 0, s.prototype.setInputSummary = function (t) {\n          var e, n;\n          null == t && (t = {}), this.inputSummary.eventName = this.eventName;\n          for (e in t) n = t[e], this.inputSummary[e] = n;\n          return this.inputSummary;\n        }, s.prototype.resetInputSummary = function () {\n          return this.inputSummary = {};\n        }, s.prototype.reset = function () {\n          return this.resetInputSummary(), e.selectionChangeObserver.reset();\n        }, s.prototype.elementDidMutate = function (t) {\n          var e;\n          return this.isComposing() ? null != (e = this.delegate) && \"function\" == typeof e.inputControllerDidAllowUnhandledInput ? e.inputControllerDidAllowUnhandledInput() : void 0 : this.handleInput(function () {\n            return this.mutationIsSignificant(t) && (this.mutationIsExpected(t) ? this.requestRender() : this.requestReparse()), this.reset();\n          });\n        }, s.prototype.mutationIsExpected = function (t) {\n          var e, n, i, o, r, s, a, u, c, l;\n          return a = t.textAdded, u = t.textDeleted, this.inputSummary.preferDocument ? !0 : (e = null != a ? a === this.inputSummary.textAdded : !this.inputSummary.textAdded, n = null != u ? this.inputSummary.didDelete : !this.inputSummary.didDelete, c = (\"\\n\" === a || \" \\n\" === a) && !e, l = \"\\n\" === u && !n, s = c && !l || l && !c, s && (o = this.getSelectedRange()) && (i = c ? a.replace(/\\n$/, \"\").length || -1 : (null != a ? a.length : void 0) || 1, null != (r = this.responder) ? r.positionIsBlockBreak(o[1] + i) : void 0) ? !0 : e && n);\n        }, s.prototype.mutationIsSignificant = function (t) {\n          var e, n, i;\n          return i = Object.keys(t).length > 0, e = \"\" === (null != (n = this.compositionInput) ? n.getEndData() : void 0), i || !e;\n        }, s.prototype.events = {\n          keydown: function (t) {\n            var n, i, o, r, s, c, l, h, p;\n            if (this.isComposing() || this.resetInputSummary(), this.inputSummary.didInput = !0, r = u[t.keyCode]) {\n              for (i = this.keys, h = [\"ctrl\", \"alt\", \"shift\", \"meta\"], o = 0, c = h.length; c > o; o++) l = h[o], t[l + \"Key\"] && (\"ctrl\" === l && (l = \"control\"), i = null != i ? i[l] : void 0);\n              null != (null != i ? i[r] : void 0) && (this.setInputSummary({\n                keyName: r\n              }), e.selectionChangeObserver.reset(), i[r].call(this, t));\n            }\n            return a(t) && (n = String.fromCharCode(t.keyCode).toLowerCase()) && (s = function () {\n              var e, n, i, o;\n              for (i = [\"alt\", \"shift\"], o = [], e = 0, n = i.length; n > e; e++) l = i[e], t[l + \"Key\"] && o.push(l);\n              return o;\n            }(), s.push(n), null != (p = this.delegate) ? p.inputControllerDidReceiveKeyboardCommand(s) : void 0) ? t.preventDefault() : void 0;\n          },\n          keypress: function (t) {\n            var e, n, i;\n            if (null == this.inputSummary.eventName && !t.metaKey && (!t.ctrlKey || t.altKey)) return (i = p(t)) ? (null != (e = this.delegate) && e.inputControllerWillPerformTyping(), null != (n = this.responder) && n.insertString(i), this.setInputSummary({\n              textAdded: i,\n              didDelete: this.selectionIsExpanded()\n            })) : void 0;\n          },\n          textInput: function (t) {\n            var e, n, i, o;\n            return e = t.data, o = this.inputSummary.textAdded, o && o !== e && o.toUpperCase() === e ? (n = this.getSelectedRange(), this.setSelectedRange([n[0], n[1] + o.length]), null != (i = this.responder) && i.insertString(e), this.setInputSummary({\n              textAdded: e\n            }), this.setSelectedRange(n)) : void 0;\n          },\n          dragenter: function (t) {\n            return t.preventDefault();\n          },\n          dragstart: function (t) {\n            var e, n;\n            return n = t.target, this.serializeSelectionToDataTransfer(t.dataTransfer), this.draggedRange = this.getSelectedRange(), null != (e = this.delegate) && \"function\" == typeof e.inputControllerDidStartDrag ? e.inputControllerDidStartDrag() : void 0;\n          },\n          dragover: function (t) {\n            var e, n;\n            return !this.draggedRange && !this.canAcceptDataTransfer(t.dataTransfer) || (t.preventDefault(), e = {\n              x: t.clientX,\n              y: t.clientY\n            }, l(e, this.draggingPoint)) ? void 0 : (this.draggingPoint = e, null != (n = this.delegate) && \"function\" == typeof n.inputControllerDidReceiveDragOverPoint ? n.inputControllerDidReceiveDragOverPoint(this.draggingPoint) : void 0);\n          },\n          dragend: function () {\n            var t;\n            return null != (t = this.delegate) && \"function\" == typeof t.inputControllerDidCancelDrag && t.inputControllerDidCancelDrag(), this.draggedRange = null, this.draggingPoint = null;\n          },\n          drop: function (t) {\n            var n, i, o, r, s, a, u, c, l;\n            return t.preventDefault(), o = null != (s = t.dataTransfer) ? s.files : void 0, r = {\n              x: t.clientX,\n              y: t.clientY\n            }, null != (a = this.responder) && a.setLocationRangeFromPointRange(r), (null != o ? o.length : void 0) ? this.attachFiles(o) : this.draggedRange ? (null != (u = this.delegate) && u.inputControllerWillMoveText(), null != (c = this.responder) && c.moveTextFromRange(this.draggedRange), this.draggedRange = null, this.requestRender()) : (i = t.dataTransfer.getData(\"application/x-trix-document\")) && (n = e.Document.fromJSONString(i), null != (l = this.responder) && l.insertDocument(n), this.requestRender()), this.draggedRange = null, this.draggingPoint = null;\n          },\n          cut: function (t) {\n            var e, n;\n            return (null != (e = this.responder) ? e.selectionIsExpanded() : void 0) && (this.serializeSelectionToDataTransfer(t.clipboardData) && t.preventDefault(), null != (n = this.delegate) && n.inputControllerWillCutText(), this.deleteInDirection(\"backward\"), t.defaultPrevented) ? this.requestRender() : void 0;\n          },\n          copy: function (t) {\n            var e;\n            return (null != (e = this.responder) ? e.selectionIsExpanded() : void 0) && this.serializeSelectionToDataTransfer(t.clipboardData) ? t.preventDefault() : void 0;\n          },\n          paste: function (t) {\n            var n, o, s, a, u, c, l, p, f, g, v, y, b, A, C, x, w, E, S, R, k, D, L;\n            return n = null != (p = t.clipboardData) ? p : t.testClipboardData, l = {\n              clipboard: n\n            }, null == n || h(t) ? void this.getPastedHTMLUsingHiddenElement(function (t) {\n              return function (e) {\n                var n, i, o;\n                return l.type = \"text/html\", l.html = e, null != (n = t.delegate) && n.inputControllerWillPaste(l), null != (i = t.responder) && i.insertHTML(l.html), t.requestRender(), null != (o = t.delegate) ? o.inputControllerDidPaste(l) : void 0;\n              };\n            }(this)) : ((a = n.getData(\"URL\")) ? (l.type = \"text/html\", L = (c = n.getData(\"public.url-name\")) ? e.squishBreakableWhitespace(c).trim() : a, l.html = this.createLinkHTML(a, L), null != (f = this.delegate) && f.inputControllerWillPaste(l), this.setInputSummary({\n              textAdded: L,\n              didDelete: this.selectionIsExpanded()\n            }), null != (C = this.responder) && C.insertHTML(l.html), this.requestRender(), null != (x = this.delegate) && x.inputControllerDidPaste(l)) : i(n) ? (l.type = \"text/plain\", l.string = n.getData(\"text/plain\"), null != (w = this.delegate) && w.inputControllerWillPaste(l), this.setInputSummary({\n              textAdded: l.string,\n              didDelete: this.selectionIsExpanded()\n            }), null != (E = this.responder) && E.insertString(l.string), this.requestRender(), null != (S = this.delegate) && S.inputControllerDidPaste(l)) : (u = n.getData(\"text/html\")) ? (l.type = \"text/html\", l.html = u, null != (R = this.delegate) && R.inputControllerWillPaste(l), null != (k = this.responder) && k.insertHTML(l.html), this.requestRender(), null != (D = this.delegate) && D.inputControllerDidPaste(l)) : m.call(n.types, \"Files\") >= 0 && (s = null != (g = n.items) && null != (v = g[0]) && \"function\" == typeof v.getAsFile ? v.getAsFile() : void 0) && (!s.name && (o = r(s)) && (s.name = \"pasted-file-\" + ++d + \".\" + o), l.type = \"File\", l.file = s, null != (y = this.delegate) && y.inputControllerWillAttachFiles(), null != (b = this.responder) && b.insertFile(l.file), this.requestRender(), null != (A = this.delegate) && A.inputControllerDidPaste(l)), t.preventDefault());\n          },\n          compositionstart: function (t) {\n            return this.getCompositionInput().start(t.data);\n          },\n          compositionupdate: function (t) {\n            return this.getCompositionInput().update(t.data);\n          },\n          compositionend: function (t) {\n            return this.getCompositionInput().end(t.data);\n          },\n          beforeinput: function () {\n            return this.inputSummary.didInput = !0;\n          },\n          input: function (t) {\n            return this.inputSummary.didInput = !0, t.stopPropagation();\n          }\n        }, s.prototype.keys = {\n          backspace: function (t) {\n            var e;\n            return null != (e = this.delegate) && e.inputControllerWillPerformTyping(), this.deleteInDirection(\"backward\", t);\n          },\n          \"delete\": function (t) {\n            var e;\n            return null != (e = this.delegate) && e.inputControllerWillPerformTyping(), this.deleteInDirection(\"forward\", t);\n          },\n          \"return\": function () {\n            var t, e;\n            return this.setInputSummary({\n              preferDocument: !0\n            }), null != (t = this.delegate) && t.inputControllerWillPerformTyping(), null != (e = this.responder) ? e.insertLineBreak() : void 0;\n          },\n          tab: function (t) {\n            var e, n;\n            return (null != (e = this.responder) ? e.canIncreaseNestingLevel() : void 0) ? (null != (n = this.responder) && n.increaseNestingLevel(), this.requestRender(), t.preventDefault()) : void 0;\n          },\n          left: function (t) {\n            var e;\n            return this.selectionIsInCursorTarget() ? (t.preventDefault(), null != (e = this.responder) ? e.moveCursorInDirection(\"backward\") : void 0) : void 0;\n          },\n          right: function (t) {\n            var e;\n            return this.selectionIsInCursorTarget() ? (t.preventDefault(), null != (e = this.responder) ? e.moveCursorInDirection(\"forward\") : void 0) : void 0;\n          },\n          control: {\n            d: function (t) {\n              var e;\n              return null != (e = this.delegate) && e.inputControllerWillPerformTyping(), this.deleteInDirection(\"forward\", t);\n            },\n            h: function (t) {\n              var e;\n              return null != (e = this.delegate) && e.inputControllerWillPerformTyping(), this.deleteInDirection(\"backward\", t);\n            },\n            o: function (t) {\n              var e, n;\n              return t.preventDefault(), null != (e = this.delegate) && e.inputControllerWillPerformTyping(), null != (n = this.responder) && n.insertString(\"\\n\", {\n                updatePosition: !1\n              }), this.requestRender();\n            }\n          },\n          shift: {\n            \"return\": function (t) {\n              var e, n;\n              return null != (e = this.delegate) && e.inputControllerWillPerformTyping(), null != (n = this.responder) && n.insertString(\"\\n\"), this.requestRender(), t.preventDefault();\n            },\n            tab: function (t) {\n              var e, n;\n              return (null != (e = this.responder) ? e.canDecreaseNestingLevel() : void 0) ? (null != (n = this.responder) && n.decreaseNestingLevel(), this.requestRender(), t.preventDefault()) : void 0;\n            },\n            left: function (t) {\n              return this.selectionIsInCursorTarget() ? (t.preventDefault(), this.expandSelectionInDirection(\"backward\")) : void 0;\n            },\n            right: function (t) {\n              return this.selectionIsInCursorTarget() ? (t.preventDefault(), this.expandSelectionInDirection(\"forward\")) : void 0;\n            }\n          },\n          alt: {\n            backspace: function () {\n              var t;\n              return this.setInputSummary({\n                preferDocument: !1\n              }), null != (t = this.delegate) ? t.inputControllerWillPerformTyping() : void 0;\n            }\n          },\n          meta: {\n            backspace: function () {\n              var t;\n              return this.setInputSummary({\n                preferDocument: !1\n              }), null != (t = this.delegate) ? t.inputControllerWillPerformTyping() : void 0;\n            }\n          }\n        }, s.prototype.getCompositionInput = function () {\n          return this.isComposing() ? this.compositionInput : this.compositionInput = new t(this);\n        }, s.prototype.isComposing = function () {\n          return null != this.compositionInput && !this.compositionInput.isEnded();\n        }, s.prototype.deleteInDirection = function (t, e) {\n          var n;\n          return (null != (n = this.responder) ? n.deleteInDirection(t) : void 0) !== !1 ? this.setInputSummary({\n            didDelete: !0\n          }) : e ? (e.preventDefault(), this.requestRender()) : void 0;\n        }, s.prototype.serializeSelectionToDataTransfer = function (t) {\n          var n, i;\n          if (o(t)) return n = null != (i = this.responder) ? i.getSelectedDocument().toSerializableDocument() : void 0, t.setData(\"application/x-trix-document\", JSON.stringify(n)), t.setData(\"text/html\", e.DocumentView.render(n).innerHTML), t.setData(\"text/plain\", n.toString().replace(/\\n$/, \"\")), !0;\n        }, s.prototype.canAcceptDataTransfer = function (t) {\n          var e, n, i, o, r, s;\n          for (s = {}, o = null != (i = null != t ? t.types : void 0) ? i : [], e = 0, n = o.length; n > e; e++) r = o[e], s[r] = !0;\n          return s.Files || s[\"application/x-trix-document\"] || s[\"text/html\"] || s[\"text/plain\"];\n        }, s.prototype.getPastedHTMLUsingHiddenElement = function (t) {\n          var n, i, o;\n          return i = this.getSelectedRange(), o = {\n            position: \"absolute\",\n            left: window.pageXOffset + \"px\",\n            top: window.pageYOffset + \"px\",\n            opacity: 0\n          }, n = c({\n            style: o,\n            tagName: \"div\",\n            editable: !0\n          }), document.body.appendChild(n), n.focus(), requestAnimationFrame(function (o) {\n            return function () {\n              var r;\n              return r = n.innerHTML, e.removeNode(n), o.setSelectedRange(i), t(r);\n            };\n          }(this));\n        }, s.proxyMethod(\"responder?.getSelectedRange\"), s.proxyMethod(\"responder?.setSelectedRange\"), s.proxyMethod(\"responder?.expandSelectionInDirection\"), s.proxyMethod(\"responder?.selectionIsInCursorTarget\"), s.proxyMethod(\"responder?.selectionIsExpanded\"), s;\n      }(e.InputController), r = function (t) {\n        var e, n;\n        return null != (e = t.type) && null != (n = e.match(/\\/(\\w+)$/)) ? n[1] : void 0;\n      }, s = null != (\"function\" == typeof \" \".codePointAt ? \" \".codePointAt(0) : void 0), p = function (t) {\n        var n;\n        return t.key && s && t.key.codePointAt(0) === t.keyCode ? t.key : (null === t.which ? n = t.keyCode : 0 !== t.which && 0 !== t.charCode && (n = t.charCode), null != n && \"escape\" !== u[n] ? e.UTF16String.fromCodepoints([n]).toString() : void 0);\n      }, h = function (t) {\n        var e, n, i, o, r, s, a, u, c, l;\n        if (u = t.clipboardData) {\n          if (m.call(u.types, \"text/html\") >= 0) {\n            for (c = u.types, i = 0, s = c.length; s > i; i++) if (l = c[i], e = /^CorePasteboardFlavorType/.test(l), n = /^dyn\\./.test(l) && u.getData(l), a = e || n) return !0;\n            return !1;\n          }\n          return o = m.call(u.types, \"com.apple.webarchive\") >= 0, r = m.call(u.types, \"com.apple.flat-rtfd\") >= 0, o || r;\n        }\n      }, t = function (t) {\n        function e(t) {\n          var e;\n          this.inputController = t, e = this.inputController, this.responder = e.responder, this.delegate = e.delegate, this.inputSummary = e.inputSummary, this.data = {};\n        }\n        return f(e, t), e.prototype.start = function (t) {\n          var e, n;\n          return this.data.start = t, this.isSignificant() ? (\"keypress\" === this.inputSummary.eventName && this.inputSummary.textAdded && null != (e = this.responder) && e.deleteInDirection(\"left\"), this.selectionIsExpanded() || (this.insertPlaceholder(), this.requestRender()), this.range = null != (n = this.responder) ? n.getSelectedRange() : void 0) : void 0;\n        }, e.prototype.update = function (t) {\n          var e;\n          return this.data.update = t, this.isSignificant() && (e = this.selectPlaceholder()) ? (this.forgetPlaceholder(), this.range = e) : void 0;\n        }, e.prototype.end = function (t) {\n          var e, n, i, o;\n          return this.data.end = t, this.isSignificant() ? (this.forgetPlaceholder(), this.canApplyToDocument() ? (this.setInputSummary({\n            preferDocument: !0,\n            didInput: !1\n          }), null != (e = this.delegate) && e.inputControllerWillPerformTyping(), null != (n = this.responder) && n.setSelectedRange(this.range), null != (i = this.responder) && i.insertString(this.data.end), null != (o = this.responder) ? o.setSelectedRange(this.range[0] + this.data.end.length) : void 0) : null != this.data.start || null != this.data.update ? (this.requestReparse(), this.inputController.reset()) : void 0) : this.inputController.reset();\n        }, e.prototype.getEndData = function () {\n          return this.data.end;\n        }, e.prototype.isEnded = function () {\n          return null != this.getEndData();\n        }, e.prototype.isSignificant = function () {\n          return n.composesExistingText ? this.inputSummary.didInput : !0;\n        }, e.prototype.canApplyToDocument = function () {\n          var t, e;\n          return 0 === (null != (t = this.data.start) ? t.length : void 0) && (null != (e = this.data.end) ? e.length : void 0) > 0 && null != this.range;\n        }, e.proxyMethod(\"inputController.setInputSummary\"), e.proxyMethod(\"inputController.requestRender\"), e.proxyMethod(\"inputController.requestReparse\"), e.proxyMethod(\"responder?.selectionIsExpanded\"), e.proxyMethod(\"responder?.insertPlaceholder\"), e.proxyMethod(\"responder?.selectPlaceholder\"), e.proxyMethod(\"responder?.forgetPlaceholder\"), e;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o = function (t, e) {\n          return function () {\n            return t.apply(e, arguments);\n          };\n        },\n        r = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) s.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        s = {}.hasOwnProperty,\n        a = [].indexOf || function (t) {\n          for (var e = 0, n = this.length; n > e; e++) if (e in this && this[e] === t) return e;\n          return -1;\n        };\n      t = e.dataTransferIsPlainText, n = e.keyEventIsKeyboardCommand, i = e.objectsAreEqual, e.Level2InputController = function (s) {\n        function u() {\n          return this.render = o(this.render, this), u.__super__.constructor.apply(this, arguments);\n        }\n        var c, l, h, p, d, f;\n        return r(u, s), u.prototype.elementDidMutate = function () {\n          var t;\n          return this.scheduledRender ? this.composing && null != (t = this.delegate) && \"function\" == typeof t.inputControllerDidAllowUnhandledInput ? t.inputControllerDidAllowUnhandledInput() : void 0 : this.reparse();\n        }, u.prototype.scheduleRender = function () {\n          return null != this.scheduledRender ? this.scheduledRender : this.scheduledRender = requestAnimationFrame(this.render);\n        }, u.prototype.render = function () {\n          var t;\n          return cancelAnimationFrame(this.scheduledRender), this.scheduledRender = null, this.composing || null != (t = this.delegate) && t.render(), \"function\" == typeof this.afterRender && this.afterRender(), this.afterRender = null;\n        }, u.prototype.reparse = function () {\n          var t;\n          return null != (t = this.delegate) ? t.reparse() : void 0;\n        }, u.prototype.events = {\n          keydown: function (t) {\n            var e, i, o, r;\n            if (n(t)) {\n              if (e = l(t), null != (r = this.delegate) ? r.inputControllerDidReceiveKeyboardCommand(e) : void 0) return t.preventDefault();\n            } else if (o = t.key, t.altKey && (o += \"+Alt\"), t.shiftKey && (o += \"+Shift\"), i = this.keys[o]) return this.withEvent(t, i);\n          },\n          paste: function (t) {\n            var e, n, i, o, r, s, a, u, c;\n            return h(t) ? (t.preventDefault(), this.attachFiles(t.clipboardData.files)) : p(t) ? (t.preventDefault(), n = {\n              type: \"text/plain\",\n              string: t.clipboardData.getData(\"text/plain\")\n            }, null != (i = this.delegate) && i.inputControllerWillPaste(n), null != (o = this.responder) && o.insertString(n.string), this.render(), null != (r = this.delegate) ? r.inputControllerDidPaste(n) : void 0) : (e = null != (s = t.clipboardData) ? s.getData(\"URL\") : void 0) ? (t.preventDefault(), n = {\n              type: \"text/html\",\n              html: this.createLinkHTML(e)\n            }, null != (a = this.delegate) && a.inputControllerWillPaste(n), null != (u = this.responder) && u.insertHTML(n.html), this.render(), null != (c = this.delegate) ? c.inputControllerDidPaste(n) : void 0) : void 0;\n          },\n          beforeinput: function (t) {\n            var e;\n            return (e = this.inputTypes[t.inputType]) ? (this.withEvent(t, e), this.scheduleRender()) : void 0;\n          },\n          input: function () {\n            return e.selectionChangeObserver.reset();\n          },\n          dragstart: function (t) {\n            var e, n;\n            return (null != (e = this.responder) ? e.selectionContainsAttachments() : void 0) ? (t.dataTransfer.setData(\"application/x-trix-dragging\", !0), this.dragging = {\n              range: null != (n = this.responder) ? n.getSelectedRange() : void 0,\n              point: d(t)\n            }) : void 0;\n          },\n          dragenter: function (t) {\n            return c(t) ? t.preventDefault() : void 0;\n          },\n          dragover: function (t) {\n            var e, n;\n            if (this.dragging) {\n              if (t.preventDefault(), e = d(t), !i(e, this.dragging.point)) return this.dragging.point = e, null != (n = this.responder) ? n.setLocationRangeFromPointRange(e) : void 0;\n            } else if (c(t)) return t.preventDefault();\n          },\n          drop: function (t) {\n            var e, n, i, o;\n            return this.dragging ? (t.preventDefault(), null != (n = this.delegate) && n.inputControllerWillMoveText(), null != (i = this.responder) && i.moveTextFromRange(this.dragging.range), this.dragging = null, this.scheduleRender()) : c(t) ? (t.preventDefault(), e = d(t), null != (o = this.responder) && o.setLocationRangeFromPointRange(e), this.attachFiles(t.dataTransfer.files)) : void 0;\n          },\n          dragend: function () {\n            var t;\n            return this.dragging ? (null != (t = this.responder) && t.setSelectedRange(this.dragging.range), this.dragging = null) : void 0;\n          },\n          compositionend: function () {\n            return this.composing ? (this.composing = !1, this.scheduleRender()) : void 0;\n          }\n        }, u.prototype.keys = {\n          ArrowLeft: function () {\n            var t, e;\n            return (null != (t = this.responder) ? t.shouldManageMovingCursorInDirection(\"backward\") : void 0) ? (this.event.preventDefault(), null != (e = this.responder) ? e.moveCursorInDirection(\"backward\") : void 0) : void 0;\n          },\n          ArrowRight: function () {\n            var t, e;\n            return (null != (t = this.responder) ? t.shouldManageMovingCursorInDirection(\"forward\") : void 0) ? (this.event.preventDefault(), null != (e = this.responder) ? e.moveCursorInDirection(\"forward\") : void 0) : void 0;\n          },\n          Backspace: function () {\n            var t, e, n;\n            return (null != (t = this.responder) ? t.shouldManageDeletingInDirection(\"backward\") : void 0) ? (this.event.preventDefault(), null != (e = this.delegate) && e.inputControllerWillPerformTyping(), null != (n = this.responder) && n.deleteInDirection(\"backward\"), this.render()) : void 0;\n          },\n          Tab: function () {\n            var t, e;\n            return (null != (t = this.responder) ? t.canIncreaseNestingLevel() : void 0) ? (this.event.preventDefault(), null != (e = this.responder) && e.increaseNestingLevel(), this.render()) : void 0;\n          },\n          \"Tab+Shift\": function () {\n            var t, e;\n            return (null != (t = this.responder) ? t.canDecreaseNestingLevel() : void 0) ? (this.event.preventDefault(), null != (e = this.responder) && e.decreaseNestingLevel(), this.render()) : void 0;\n          }\n        }, u.prototype.inputTypes = {\n          deleteByComposition: function () {\n            return this.deleteInDirection(\"backward\", {\n              recordUndoEntry: !1\n            });\n          },\n          deleteByCut: function () {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteByDrag: function () {\n            return this.event.preventDefault(), this.withTargetDOMRange(function () {\n              var t;\n              return this.deleteByDragRange = null != (t = this.responder) ? t.getSelectedRange() : void 0;\n            });\n          },\n          deleteCompositionText: function () {\n            return this.deleteInDirection(\"backward\", {\n              recordUndoEntry: !1\n            });\n          },\n          deleteContent: function () {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteContentBackward: function () {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteContentForward: function () {\n            return this.deleteInDirection(\"forward\");\n          },\n          deleteEntireSoftLine: function () {\n            return this.deleteInDirection(\"forward\");\n          },\n          deleteHardLineBackward: function () {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteHardLineForward: function () {\n            return this.deleteInDirection(\"forward\");\n          },\n          deleteSoftLineBackward: function () {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteSoftLineForward: function () {\n            return this.deleteInDirection(\"forward\");\n          },\n          deleteWordBackward: function () {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteWordForward: function () {\n            return this.deleteInDirection(\"forward\");\n          },\n          formatBackColor: function () {\n            return this.activateAttributeIfSupported(\"backgroundColor\", this.event.data);\n          },\n          formatBold: function () {\n            return this.toggleAttributeIfSupported(\"bold\");\n          },\n          formatFontColor: function () {\n            return this.activateAttributeIfSupported(\"color\", this.event.data);\n          },\n          formatFontName: function () {\n            return this.activateAttributeIfSupported(\"font\", this.event.data);\n          },\n          formatIndent: function () {\n            var t;\n            return (null != (t = this.responder) ? t.canIncreaseNestingLevel() : void 0) ? this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.increaseNestingLevel() : void 0;\n            }) : void 0;\n          },\n          formatItalic: function () {\n            return this.toggleAttributeIfSupported(\"italic\");\n          },\n          formatJustifyCenter: function () {\n            return this.toggleAttributeIfSupported(\"justifyCenter\");\n          },\n          formatJustifyFull: function () {\n            return this.toggleAttributeIfSupported(\"justifyFull\");\n          },\n          formatJustifyLeft: function () {\n            return this.toggleAttributeIfSupported(\"justifyLeft\");\n          },\n          formatJustifyRight: function () {\n            return this.toggleAttributeIfSupported(\"justifyRight\");\n          },\n          formatOutdent: function () {\n            var t;\n            return (null != (t = this.responder) ? t.canDecreaseNestingLevel() : void 0) ? this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.decreaseNestingLevel() : void 0;\n            }) : void 0;\n          },\n          formatRemove: function () {\n            return this.withTargetDOMRange(function () {\n              var t, e, n, i;\n              i = [];\n              for (t in null != (e = this.responder) ? e.getCurrentAttributes() : void 0) i.push(null != (n = this.responder) ? n.removeCurrentAttribute(t) : void 0);\n              return i;\n            });\n          },\n          formatSetBlockTextDirection: function () {\n            return this.activateAttributeIfSupported(\"blockDir\", this.event.data);\n          },\n          formatSetInlineTextDirection: function () {\n            return this.activateAttributeIfSupported(\"textDir\", this.event.data);\n          },\n          formatStrikeThrough: function () {\n            return this.toggleAttributeIfSupported(\"strike\");\n          },\n          formatSubscript: function () {\n            return this.toggleAttributeIfSupported(\"sub\");\n          },\n          formatSuperscript: function () {\n            return this.toggleAttributeIfSupported(\"sup\");\n          },\n          formatUnderline: function () {\n            return this.toggleAttributeIfSupported(\"underline\");\n          },\n          historyRedo: function () {\n            var t;\n            return null != (t = this.delegate) ? t.inputControllerWillPerformRedo() : void 0;\n          },\n          historyUndo: function () {\n            var t;\n            return null != (t = this.delegate) ? t.inputControllerWillPerformUndo() : void 0;\n          },\n          insertCompositionText: function () {\n            return this.composing = !0, this.insertString(this.event.data);\n          },\n          insertFromComposition: function () {\n            return this.composing = !1, this.insertString(this.event.data);\n          },\n          insertFromDrop: function () {\n            var t, e;\n            return (t = this.deleteByDragRange) ? (this.deleteByDragRange = null, null != (e = this.delegate) && e.inputControllerWillMoveText(), this.withTargetDOMRange(function () {\n              var e;\n              return null != (e = this.responder) ? e.moveTextFromRange(t) : void 0;\n            })) : void 0;\n          },\n          insertFromPaste: function () {\n            var n, i, o, r, s, a, u, c, l, h, p;\n            return n = this.event.dataTransfer, s = {\n              dataTransfer: n\n            }, (i = n.getData(\"URL\")) ? (this.event.preventDefault(), s.type = \"text/html\", p = (r = n.getData(\"public.url-name\")) ? e.squishBreakableWhitespace(r).trim() : i, s.html = this.createLinkHTML(i, p), null != (a = this.delegate) && a.inputControllerWillPaste(s), this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.insertHTML(s.html) : void 0;\n            }), this.afterRender = function (t) {\n              return function () {\n                var e;\n                return null != (e = t.delegate) ? e.inputControllerDidPaste(s) : void 0;\n              };\n            }(this)) : t(n) ? (s.type = \"text/plain\", s.string = n.getData(\"text/plain\"), null != (u = this.delegate) && u.inputControllerWillPaste(s), this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.insertString(s.string) : void 0;\n            }), this.afterRender = function (t) {\n              return function () {\n                var e;\n                return null != (e = t.delegate) ? e.inputControllerDidPaste(s) : void 0;\n              };\n            }(this)) : (o = n.getData(\"text/html\")) ? (this.event.preventDefault(), s.type = \"text/html\", s.html = o, null != (c = this.delegate) && c.inputControllerWillPaste(s), this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.insertHTML(s.html) : void 0;\n            }), this.afterRender = function (t) {\n              return function () {\n                var e;\n                return null != (e = t.delegate) ? e.inputControllerDidPaste(s) : void 0;\n              };\n            }(this)) : (null != (l = n.files) ? l.length : void 0) ? (s.type = \"File\", s.file = n.files[0], null != (h = this.delegate) && h.inputControllerWillPaste(s), this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.insertFile(s.file) : void 0;\n            }), this.afterRender = function (t) {\n              return function () {\n                var e;\n                return null != (e = t.delegate) ? e.inputControllerDidPaste(s) : void 0;\n              };\n            }(this)) : void 0;\n          },\n          insertFromYank: function () {\n            return this.insertString(this.event.data);\n          },\n          insertLineBreak: function () {\n            return this.insertString(\"\\n\");\n          },\n          insertLink: function () {\n            return this.activateAttributeIfSupported(\"href\", this.event.data);\n          },\n          insertOrderedList: function () {\n            return this.toggleAttributeIfSupported(\"number\");\n          },\n          insertParagraph: function () {\n            var t;\n            return null != (t = this.delegate) && t.inputControllerWillPerformTyping(), this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.insertLineBreak() : void 0;\n            });\n          },\n          insertReplacementText: function () {\n            return this.insertString(this.event.dataTransfer.getData(\"text/plain\"), {\n              updatePosition: !1\n            });\n          },\n          insertText: function () {\n            var t, e;\n            return this.insertString(null != (t = this.event.data) ? t : null != (e = this.event.dataTransfer) ? e.getData(\"text/plain\") : void 0);\n          },\n          insertTranspose: function () {\n            return this.insertString(this.event.data);\n          },\n          insertUnorderedList: function () {\n            return this.toggleAttributeIfSupported(\"bullet\");\n          }\n        }, u.prototype.insertString = function (t, e) {\n          var n;\n          return null == t && (t = \"\"), null != (n = this.delegate) && n.inputControllerWillPerformTyping(), this.withTargetDOMRange(function () {\n            var n;\n            return null != (n = this.responder) ? n.insertString(t, e) : void 0;\n          });\n        }, u.prototype.toggleAttributeIfSupported = function (t) {\n          var n;\n          return a.call(e.getAllAttributeNames(), t) >= 0 ? (null != (n = this.delegate) && n.inputControllerWillPerformFormatting(t), this.withTargetDOMRange(function () {\n            var e;\n            return null != (e = this.responder) ? e.toggleCurrentAttribute(t) : void 0;\n          })) : void 0;\n        }, u.prototype.activateAttributeIfSupported = function (t, n) {\n          var i;\n          return a.call(e.getAllAttributeNames(), t) >= 0 ? (null != (i = this.delegate) && i.inputControllerWillPerformFormatting(t), this.withTargetDOMRange(function () {\n            var e;\n            return null != (e = this.responder) ? e.setCurrentAttribute(t, n) : void 0;\n          })) : void 0;\n        }, u.prototype.deleteInDirection = function (t, e) {\n          var n, i, o, r;\n          return o = (null != e ? e : {\n            recordUndoEntry: !0\n          }).recordUndoEntry, o && null != (r = this.delegate) && r.inputControllerWillPerformTyping(), i = function (e) {\n            return function () {\n              var n;\n              return null != (n = e.responder) ? n.deleteInDirection(t) : void 0;\n            };\n          }(this), (n = this.getTargetDOMRange({\n            minLength: 2\n          })) ? this.withTargetDOMRange(n, i) : i();\n        }, u.prototype.withTargetDOMRange = function (t, n) {\n          var i;\n          return \"function\" == typeof t && (n = t, t = this.getTargetDOMRange()), t ? null != (i = this.responder) ? i.withTargetDOMRange(t, n.bind(this)) : void 0 : (e.selectionChangeObserver.reset(), n.call(this));\n        }, u.prototype.getTargetDOMRange = function (t) {\n          var e, n, i, o;\n          return i = (null != t ? t : {\n            minLength: 0\n          }).minLength, (o = \"function\" == typeof (e = this.event).getTargetRanges ? e.getTargetRanges() : void 0) && o.length && (n = f(o[0]), 0 === i || n.toString().length >= i) ? n : void 0;\n        }, f = function (t) {\n          var e;\n          return e = document.createRange(), e.setStart(t.startContainer, t.startOffset), e.setEnd(t.endContainer, t.endOffset), e;\n        }, u.prototype.withEvent = function (t, e) {\n          var n;\n          this.event = t;\n          try {\n            n = e.call(this);\n          } finally {\n            this.event = null;\n          }\n          return n;\n        }, c = function (t) {\n          var e, n;\n          return a.call(null != (e = null != (n = t.dataTransfer) ? n.types : void 0) ? e : [], \"Files\") >= 0;\n        }, h = function (t) {\n          var e;\n          return (e = t.clipboardData) ? a.call(e.types, \"Files\") >= 0 && 1 === e.types.length && e.files.length >= 1 : void 0;\n        }, p = function (t) {\n          var e;\n          return (e = t.clipboardData) ? a.call(e.types, \"text/plain\") >= 0 && 1 === e.types.length : void 0;\n        }, l = function (t) {\n          var e;\n          return e = [], t.altKey && e.push(\"alt\"), t.shiftKey && e.push(\"shift\"), e.push(t.key), e;\n        }, d = function (t) {\n          return {\n            x: t.clientX,\n            y: t.clientY\n          };\n        }, u;\n      }(e.InputController);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r,\n        s,\n        a,\n        u,\n        c = function (t, e) {\n          return function () {\n            return t.apply(e, arguments);\n          };\n        },\n        l = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) h.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        h = {}.hasOwnProperty;\n      n = e.defer, i = e.handleEvent, s = e.makeElement, u = e.tagName, a = e.config, r = a.lang, t = a.css, o = a.keyNames, e.AttachmentEditorController = function (a) {\n        function h(t, e, n, i) {\n          this.attachmentPiece = t, this.element = e, this.container = n, this.options = null != i ? i : {}, this.didBlurCaption = c(this.didBlurCaption, this), this.didChangeCaption = c(this.didChangeCaption, this), this.didInputCaption = c(this.didInputCaption, this), this.didKeyDownCaption = c(this.didKeyDownCaption, this), this.didClickActionButton = c(this.didClickActionButton, this), this.didClickToolbar = c(this.didClickToolbar, this), this.attachment = this.attachmentPiece.attachment, \"a\" === u(this.element) && (this.element = this.element.firstChild), this.install();\n        }\n        var p;\n        return l(h, a), p = function (t) {\n          return function () {\n            var e;\n            return e = t.apply(this, arguments), e[\"do\"](), null == this.undos && (this.undos = []), this.undos.push(e.undo);\n          };\n        }, h.prototype.install = function () {\n          return this.makeElementMutable(), this.addToolbar(), this.attachment.isPreviewable() ? this.installCaptionEditor() : void 0;\n        }, h.prototype.uninstall = function () {\n          var t, e;\n          for (this.savePendingCaption(); e = this.undos.pop();) e();\n          return null != (t = this.delegate) ? t.didUninstallAttachmentEditor(this) : void 0;\n        }, h.prototype.savePendingCaption = function () {\n          var t, e, n;\n          return null != this.pendingCaption ? (t = this.pendingCaption, this.pendingCaption = null, t ? null != (e = this.delegate) && \"function\" == typeof e.attachmentEditorDidRequestUpdatingAttributesForAttachment ? e.attachmentEditorDidRequestUpdatingAttributesForAttachment({\n            caption: t\n          }, this.attachment) : void 0 : null != (n = this.delegate) && \"function\" == typeof n.attachmentEditorDidRequestRemovingAttributeForAttachment ? n.attachmentEditorDidRequestRemovingAttributeForAttachment(\"caption\", this.attachment) : void 0) : void 0;\n        }, h.prototype.makeElementMutable = p(function () {\n          return {\n            \"do\": function (t) {\n              return function () {\n                return t.element.dataset.trixMutable = !0;\n              };\n            }(this),\n            undo: function (t) {\n              return function () {\n                return delete t.element.dataset.trixMutable;\n              };\n            }(this)\n          };\n        }), h.prototype.addToolbar = p(function () {\n          var n;\n          return n = s({\n            tagName: \"div\",\n            className: t.attachmentToolbar,\n            data: {\n              trixMutable: !0\n            },\n            childNodes: s({\n              tagName: \"div\",\n              className: \"trix-button-row\",\n              childNodes: s({\n                tagName: \"span\",\n                className: \"trix-button-group trix-button-group--actions\",\n                childNodes: s({\n                  tagName: \"button\",\n                  className: \"trix-button trix-button--remove\",\n                  textContent: r.remove,\n                  attributes: {\n                    title: r.remove\n                  },\n                  data: {\n                    trixAction: \"remove\"\n                  }\n                })\n              })\n            })\n          }), this.attachment.isPreviewable() && n.appendChild(s({\n            tagName: \"div\",\n            className: t.attachmentMetadataContainer,\n            childNodes: s({\n              tagName: \"span\",\n              className: t.attachmentMetadata,\n              childNodes: [s({\n                tagName: \"span\",\n                className: t.attachmentName,\n                textContent: this.attachment.getFilename(),\n                attributes: {\n                  title: this.attachment.getFilename()\n                }\n              }), s({\n                tagName: \"span\",\n                className: t.attachmentSize,\n                textContent: this.attachment.getFormattedFilesize()\n              })]\n            })\n          })), i(\"click\", {\n            onElement: n,\n            withCallback: this.didClickToolbar\n          }), i(\"click\", {\n            onElement: n,\n            matchingSelector: \"[data-trix-action]\",\n            withCallback: this.didClickActionButton\n          }), {\n            \"do\": function (t) {\n              return function () {\n                return t.element.appendChild(n);\n              };\n            }(this),\n            undo: function () {\n              return function () {\n                return e.removeNode(n);\n              };\n            }(this)\n          };\n        }), h.prototype.installCaptionEditor = p(function () {\n          var o, a, u, c, l;\n          return c = s({\n            tagName: \"textarea\",\n            className: t.attachmentCaptionEditor,\n            attributes: {\n              placeholder: r.captionPlaceholder\n            },\n            data: {\n              trixMutable: !0\n            }\n          }), c.value = this.attachmentPiece.getCaption(), l = c.cloneNode(), l.classList.add(\"trix-autoresize-clone\"), l.tabIndex = -1, o = function () {\n            return l.value = c.value, c.style.height = l.scrollHeight + \"px\";\n          }, i(\"input\", {\n            onElement: c,\n            withCallback: o\n          }), i(\"input\", {\n            onElement: c,\n            withCallback: this.didInputCaption\n          }), i(\"keydown\", {\n            onElement: c,\n            withCallback: this.didKeyDownCaption\n          }), i(\"change\", {\n            onElement: c,\n            withCallback: this.didChangeCaption\n          }), i(\"blur\", {\n            onElement: c,\n            withCallback: this.didBlurCaption\n          }), u = this.element.querySelector(\"figcaption\"), a = u.cloneNode(), {\n            \"do\": function (e) {\n              return function () {\n                return u.style.display = \"none\", a.appendChild(c), a.appendChild(l), a.classList.add(t.attachmentCaption + \"--editing\"), u.parentElement.insertBefore(a, u), o(), e.options.editCaption ? n(function () {\n                  return c.focus();\n                }) : void 0;\n              };\n            }(this),\n            undo: function () {\n              return e.removeNode(a), u.style.display = null;\n            }\n          };\n        }), h.prototype.didClickToolbar = function (t) {\n          return t.preventDefault(), t.stopPropagation();\n        }, h.prototype.didClickActionButton = function (t) {\n          var e, n;\n          switch (e = t.target.getAttribute(\"data-trix-action\")) {\n            case \"remove\":\n              return null != (n = this.delegate) ? n.attachmentEditorDidRequestRemovalOfAttachment(this.attachment) : void 0;\n          }\n        }, h.prototype.didKeyDownCaption = function (t) {\n          var e;\n          return \"return\" === o[t.keyCode] ? (t.preventDefault(), this.savePendingCaption(), null != (e = this.delegate) && \"function\" == typeof e.attachmentEditorDidRequestDeselectingAttachment ? e.attachmentEditorDidRequestDeselectingAttachment(this.attachment) : void 0) : void 0;\n        }, h.prototype.didInputCaption = function (t) {\n          return this.pendingCaption = t.target.value.replace(/\\s/g, \" \").trim();\n        }, h.prototype.didChangeCaption = function () {\n          return this.savePendingCaption();\n        }, h.prototype.didBlurCaption = function () {\n          return this.savePendingCaption();\n        }, h;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) r.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        r = {}.hasOwnProperty;\n      i = e.makeElement, t = e.config.css, e.AttachmentView = function (r) {\n        function s() {\n          s.__super__.constructor.apply(this, arguments), this.attachment = this.object, this.attachment.uploadProgressDelegate = this, this.attachmentPiece = this.options.piece;\n        }\n        var a;\n        return o(s, r), s.attachmentSelector = \"[data-trix-attachment]\", s.prototype.createContentNodes = function () {\n          return [];\n        }, s.prototype.createNodes = function () {\n          var e, n, o, r, s, u, c;\n          if (e = r = i({\n            tagName: \"figure\",\n            className: this.getClassName(),\n            data: this.getData(),\n            editable: !1\n          }), (n = this.getHref()) && (r = i({\n            tagName: \"a\",\n            editable: !1,\n            attributes: {\n              href: n,\n              tabindex: -1\n            }\n          }), e.appendChild(r)), this.attachment.hasContent()) r.innerHTML = this.attachment.getContent();else for (c = this.createContentNodes(), o = 0, s = c.length; s > o; o++) u = c[o], r.appendChild(u);\n          return r.appendChild(this.createCaptionElement()), this.attachment.isPending() && (this.progressElement = i({\n            tagName: \"progress\",\n            attributes: {\n              \"class\": t.attachmentProgress,\n              value: this.attachment.getUploadProgress(),\n              max: 100\n            },\n            data: {\n              trixMutable: !0,\n              trixStoreKey: [\"progressElement\", this.attachment.id].join(\"/\")\n            }\n          }), e.appendChild(this.progressElement)), [a(\"left\"), e, a(\"right\")];\n        }, s.prototype.createCaptionElement = function () {\n          var e, n, o, r, s, a, u;\n          return o = i({\n            tagName: \"figcaption\",\n            className: t.attachmentCaption\n          }), (e = this.attachmentPiece.getCaption()) ? (o.classList.add(t.attachmentCaption + \"--edited\"), o.textContent = e) : (n = this.getCaptionConfig(), n.name && (r = this.attachment.getFilename()), n.size && (a = this.attachment.getFormattedFilesize()), r && (s = i({\n            tagName: \"span\",\n            className: t.attachmentName,\n            textContent: r\n          }), o.appendChild(s)), a && (r && o.appendChild(document.createTextNode(\" \")), u = i({\n            tagName: \"span\",\n            className: t.attachmentSize,\n            textContent: a\n          }), o.appendChild(u))), o;\n        }, s.prototype.getClassName = function () {\n          var e, n;\n          return n = [t.attachment, t.attachment + \"--\" + this.attachment.getType()], (e = this.attachment.getExtension()) && n.push(t.attachment + \"--\" + e), n.join(\" \");\n        }, s.prototype.getData = function () {\n          var t, e;\n          return e = {\n            trixAttachment: JSON.stringify(this.attachment),\n            trixContentType: this.attachment.getContentType(),\n            trixId: this.attachment.id\n          }, t = this.attachmentPiece.attributes, t.isEmpty() || (e.trixAttributes = JSON.stringify(t)), this.attachment.isPending() && (e.trixSerialize = !1), e;\n        }, s.prototype.getHref = function () {\n          return n(this.attachment.getContent(), \"a\") ? void 0 : this.attachment.getHref();\n        }, s.prototype.getCaptionConfig = function () {\n          var t, n, i;\n          return i = this.attachment.getType(), t = e.copyObject(null != (n = e.config.attachments[i]) ? n.caption : void 0), \"file\" === i && (t.name = !0), t;\n        }, s.prototype.findProgressElement = function () {\n          var t;\n          return null != (t = this.findElement()) ? t.querySelector(\"progress\") : void 0;\n        }, a = function (t) {\n          return i({\n            tagName: \"span\",\n            textContent: e.ZERO_WIDTH_SPACE,\n            data: {\n              trixCursorTarget: t,\n              trixSerialize: !1\n            }\n          });\n        }, s.prototype.attachmentDidChangeUploadProgress = function () {\n          var t, e;\n          return e = this.attachment.getUploadProgress(), null != (t = this.findProgressElement()) ? t.value = e : void 0;\n        }, s;\n      }(e.ObjectView), n = function (t, e) {\n        var n;\n        return n = i(\"div\"), n.innerHTML = null != t ? t : \"\", n.querySelector(e);\n      };\n    }.call(this), function () {\n      var t,\n        n = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var o in e) i.call(e, o) && (t[o] = e[o]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        i = {}.hasOwnProperty;\n      t = e.makeElement, e.PreviewableAttachmentView = function (i) {\n        function o() {\n          o.__super__.constructor.apply(this, arguments), this.attachment.previewDelegate = this;\n        }\n        return n(o, i), o.prototype.createContentNodes = function () {\n          return this.image = t({\n            tagName: \"img\",\n            attributes: {\n              src: \"\"\n            },\n            data: {\n              trixMutable: !0\n            }\n          }), this.refresh(this.image), [this.image];\n        }, o.prototype.createCaptionElement = function () {\n          var t;\n          return t = o.__super__.createCaptionElement.apply(this, arguments), t.textContent || t.setAttribute(\"data-trix-placeholder\", e.config.lang.captionPlaceholder), t;\n        }, o.prototype.refresh = function (t) {\n          var e;\n          return null == t && (t = null != (e = this.findElement()) ? e.querySelector(\"img\") : void 0), t ? this.updateAttributesForImage(t) : void 0;\n        }, o.prototype.updateAttributesForImage = function (t) {\n          var e, n, i, o, r, s;\n          return r = this.attachment.getURL(), n = this.attachment.getPreviewURL(), t.src = n || r, n === r ? t.removeAttribute(\"data-trix-serialized-attributes\") : (i = JSON.stringify({\n            src: r\n          }), t.setAttribute(\"data-trix-serialized-attributes\", i)), s = this.attachment.getWidth(), e = this.attachment.getHeight(), null != s && (t.width = s), null != e && (t.height = e), o = [\"imageElement\", this.attachment.id, t.src, t.width, t.height].join(\"/\"), t.dataset.trixStoreKey = o;\n        }, o.prototype.attachmentDidChangeAttributes = function () {\n          return this.refresh(this.image), this.refresh();\n        }, o;\n      }(e.AttachmentView);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) r.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        r = {}.hasOwnProperty;\n      i = e.makeElement, t = e.findInnerElement, n = e.getTextConfig, e.PieceView = function (r) {\n        function s() {\n          var t;\n          s.__super__.constructor.apply(this, arguments), this.piece = this.object, this.attributes = this.piece.getAttributes(), t = this.options, this.textConfig = t.textConfig, this.context = t.context, this.piece.attachment ? this.attachment = this.piece.attachment : this.string = this.piece.toString();\n        }\n        var a;\n        return o(s, r), s.prototype.createNodes = function () {\n          var e, n, i, o, r, s;\n          if (s = this.attachment ? this.createAttachmentNodes() : this.createStringNodes(), e = this.createElement()) {\n            for (i = t(e), n = 0, o = s.length; o > n; n++) r = s[n], i.appendChild(r);\n            s = [e];\n          }\n          return s;\n        }, s.prototype.createAttachmentNodes = function () {\n          var t, n;\n          return t = this.attachment.isPreviewable() ? e.PreviewableAttachmentView : e.AttachmentView, n = this.createChildView(t, this.piece.attachment, {\n            piece: this.piece\n          }), n.getNodes();\n        }, s.prototype.createStringNodes = function () {\n          var t, e, n, o, r, s, a, u, c, l;\n          if (null != (u = this.textConfig) ? u.plaintext : void 0) return [document.createTextNode(this.string)];\n          for (a = [], c = this.string.split(\"\\n\"), n = e = 0, o = c.length; o > e; n = ++e) l = c[n], n > 0 && (t = i(\"br\"), a.push(t)), (r = l.length) && (s = document.createTextNode(this.preserveSpaces(l)), a.push(s));\n          return a;\n        }, s.prototype.createElement = function () {\n          var t, e, o, r, s, a, u, c, l;\n          c = {}, a = this.attributes;\n          for (r in a) if (l = a[r], (t = n(r)) && (t.tagName && (s = i(t.tagName), o ? (o.appendChild(s), o = s) : e = o = s), t.styleProperty && (c[t.styleProperty] = l), t.style)) {\n            u = t.style;\n            for (r in u) l = u[r], c[r] = l;\n          }\n          if (Object.keys(c).length) {\n            null == e && (e = i(\"span\"));\n            for (r in c) l = c[r], e.style[r] = l;\n          }\n          return e;\n        }, s.prototype.createContainerElement = function () {\n          var t, e, o, r, s;\n          r = this.attributes;\n          for (o in r) if (s = r[o], (e = n(o)) && e.groupTagName) return t = {}, t[o] = s, i(e.groupTagName, t);\n        }, a = e.NON_BREAKING_SPACE, s.prototype.preserveSpaces = function (t) {\n          return this.context.isLast && (t = t.replace(/\\ $/, a)), t = t.replace(/(\\S)\\ {3}(\\S)/g, \"$1 \" + a + \" $2\").replace(/\\ {2}/g, a + \" \").replace(/\\ {2}/g, \" \" + a), (this.context.isFirst || this.context.followsWhitespace) && (t = t.replace(/^\\ /, a)), t;\n        }, s;\n      }(e.ObjectView);\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.TextView = function (n) {\n        function i() {\n          i.__super__.constructor.apply(this, arguments), this.text = this.object, this.textConfig = this.options.textConfig;\n        }\n        var o;\n        return t(i, n), i.prototype.createNodes = function () {\n          var t, n, i, r, s, a, u, c, l, h;\n          for (a = [], c = e.ObjectGroup.groupObjects(this.getPieces()), r = c.length - 1, i = n = 0, s = c.length; s > n; i = ++n) u = c[i], t = {}, 0 === i && (t.isFirst = !0), i === r && (t.isLast = !0), o(l) && (t.followsWhitespace = !0), h = this.findOrCreateCachedChildView(e.PieceView, u, {\n            textConfig: this.textConfig,\n            context: t\n          }), a.push.apply(a, h.getNodes()), l = u;\n          return a;\n        }, i.prototype.getPieces = function () {\n          var t, e, n, i, o;\n          for (i = this.text.getPieces(), o = [], t = 0, e = i.length; e > t; t++) n = i[t], n.hasAttribute(\"blockBreak\") || o.push(n);\n          return o;\n        }, o = function (t) {\n          return /\\s$/.test(null != t ? t.toString() : void 0);\n        }, i;\n      }(e.ObjectView);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) r.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        r = {}.hasOwnProperty;\n      i = e.makeElement, n = e.getBlockConfig, t = e.config.css, e.BlockView = function (r) {\n        function s() {\n          s.__super__.constructor.apply(this, arguments), this.block = this.object, this.attributes = this.block.getAttributes();\n        }\n        return o(s, r), s.prototype.createNodes = function () {\n          var t, o, r, s, a, u, c, l, h, p, d;\n          if (o = document.createComment(\"block\"), c = [o], this.block.isEmpty() ? c.push(i(\"br\")) : (p = null != (l = n(this.block.getLastAttribute())) ? l.text : void 0, d = this.findOrCreateCachedChildView(e.TextView, this.block.text, {\n            textConfig: p\n          }), c.push.apply(c, d.getNodes()), this.shouldAddExtraNewlineElement() && c.push(i(\"br\"))), this.attributes.length) return c;\n          for (h = e.config.blockAttributes[\"default\"].tagName, this.block.isRTL() && (t = {\n            dir: \"rtl\"\n          }), r = i({\n            tagName: h,\n            attributes: t\n          }), s = 0, a = c.length; a > s; s++) u = c[s], r.appendChild(u);\n          return [r];\n        }, s.prototype.createContainerElement = function (e) {\n          var o, r, s, a, u;\n          return o = this.attributes[e], u = n(o).tagName, 0 === e && this.block.isRTL() && (r = {\n            dir: \"rtl\"\n          }), \"attachmentGallery\" === o && (a = this.block.getBlockBreakPosition(), s = t.attachmentGallery + \" \" + t.attachmentGallery + \"--\" + a), i({\n            tagName: u,\n            className: s,\n            attributes: r\n          });\n        }, s.prototype.shouldAddExtraNewlineElement = function () {\n          return /\\n\\n$/.test(this.block.toString());\n        }, s;\n      }(e.ObjectView);\n    }.call(this), function () {\n      var t,\n        n,\n        i = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) o.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        o = {}.hasOwnProperty;\n      t = e.defer, n = e.makeElement, e.DocumentView = function (o) {\n        function r() {\n          r.__super__.constructor.apply(this, arguments), this.element = this.options.element, this.elementStore = new e.ElementStore(), this.setDocument(this.object);\n        }\n        var s, a, u;\n        return i(r, o), r.render = function (t) {\n          var e, i;\n          return e = n(\"div\"), i = new this(t, {\n            element: e\n          }), i.render(), i.sync(), e;\n        }, r.prototype.setDocument = function (t) {\n          return t.isEqualTo(this.document) ? void 0 : this.document = this.object = t;\n        }, r.prototype.render = function () {\n          var t, i, o, r, s, a, u;\n          if (this.childViews = [], this.shadowElement = n(\"div\"), !this.document.isEmpty()) {\n            for (s = e.ObjectGroup.groupObjects(this.document.getBlocks(), {\n              asTree: !0\n            }), a = [], t = 0, i = s.length; i > t; t++) r = s[t], u = this.findOrCreateCachedChildView(e.BlockView, r), a.push(function () {\n              var t, e, n, i;\n              for (n = u.getNodes(), i = [], t = 0, e = n.length; e > t; t++) o = n[t], i.push(this.shadowElement.appendChild(o));\n              return i;\n            }.call(this));\n            return a;\n          }\n        }, r.prototype.isSynced = function () {\n          return s(this.shadowElement, this.element);\n        }, r.prototype.sync = function () {\n          var t;\n          for (t = this.createDocumentFragmentForSync(); this.element.lastChild;) this.element.removeChild(this.element.lastChild);\n          return this.element.appendChild(t), this.didSync();\n        }, r.prototype.didSync = function () {\n          return this.elementStore.reset(a(this.element)), t(function (t) {\n            return function () {\n              return t.garbageCollectCachedViews();\n            };\n          }(this));\n        }, r.prototype.createDocumentFragmentForSync = function () {\n          var t, e, n, i, o, r, s, u, c, l;\n          for (e = document.createDocumentFragment(), u = this.shadowElement.childNodes, n = 0, o = u.length; o > n; n++) s = u[n], e.appendChild(s.cloneNode(!0));\n          for (c = a(e), i = 0, r = c.length; r > i; i++) t = c[i], (l = this.elementStore.remove(t)) && t.parentNode.replaceChild(l, t);\n          return e;\n        }, a = function (t) {\n          return t.querySelectorAll(\"[data-trix-store-key]\");\n        }, s = function (t, e) {\n          return u(t.innerHTML) === u(e.innerHTML);\n        }, u = function (t) {\n          return t.replace(/&nbsp;/g, \" \");\n        }, r;\n      }(e.ObjectView);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r,\n        s = function (t, e) {\n          return function () {\n            return t.apply(e, arguments);\n          };\n        },\n        a = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) u.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        u = {}.hasOwnProperty;\n      i = e.findClosestElementFromNode, o = e.handleEvent, r = e.innerElementIsActive, n = e.defer, t = e.AttachmentView.attachmentSelector, e.CompositionController = function (u) {\n        function c(n, i) {\n          this.element = n, this.composition = i, this.didClickAttachment = s(this.didClickAttachment, this), this.didBlur = s(this.didBlur, this), this.didFocus = s(this.didFocus, this), this.documentView = new e.DocumentView(this.composition.document, {\n            element: this.element\n          }), o(\"focus\", {\n            onElement: this.element,\n            withCallback: this.didFocus\n          }), o(\"blur\", {\n            onElement: this.element,\n            withCallback: this.didBlur\n          }), o(\"click\", {\n            onElement: this.element,\n            matchingSelector: \"a[contenteditable=false]\",\n            preventDefault: !0\n          }), o(\"mousedown\", {\n            onElement: this.element,\n            matchingSelector: t,\n            withCallback: this.didClickAttachment\n          }), o(\"click\", {\n            onElement: this.element,\n            matchingSelector: \"a\" + t,\n            preventDefault: !0\n          });\n        }\n        return a(c, u), c.prototype.didFocus = function () {\n          var t, e, n;\n          return t = function (t) {\n            return function () {\n              var e;\n              return t.focused ? void 0 : (t.focused = !0, null != (e = t.delegate) && \"function\" == typeof e.compositionControllerDidFocus ? e.compositionControllerDidFocus() : void 0);\n            };\n          }(this), null != (e = null != (n = this.blurPromise) ? n.then(t) : void 0) ? e : t();\n        }, c.prototype.didBlur = function () {\n          return this.blurPromise = new Promise(function (t) {\n            return function (e) {\n              return n(function () {\n                var n;\n                return r(t.element) || (t.focused = null, null != (n = t.delegate) && \"function\" == typeof n.compositionControllerDidBlur && n.compositionControllerDidBlur()), t.blurPromise = null, e();\n              });\n            };\n          }(this));\n        }, c.prototype.didClickAttachment = function (t, e) {\n          var n, o, r;\n          return n = this.findAttachmentForElement(e), o = null != i(t.target, {\n            matchingSelector: \"figcaption\"\n          }), null != (r = this.delegate) && \"function\" == typeof r.compositionControllerDidSelectAttachment ? r.compositionControllerDidSelectAttachment(n, {\n            editCaption: o\n          }) : void 0;\n        }, c.prototype.getSerializableElement = function () {\n          return this.isEditingAttachment() ? this.documentView.shadowElement : this.element;\n        }, c.prototype.render = function () {\n          var t, e, n;\n          return this.revision !== this.composition.revision && (this.documentView.setDocument(this.composition.document), this.documentView.render(), this.revision = this.composition.revision), this.canSyncDocumentView() && !this.documentView.isSynced() && (null != (t = this.delegate) && \"function\" == typeof t.compositionControllerWillSyncDocumentView && t.compositionControllerWillSyncDocumentView(), this.documentView.sync(), null != (e = this.delegate) && \"function\" == typeof e.compositionControllerDidSyncDocumentView && e.compositionControllerDidSyncDocumentView()), null != (n = this.delegate) && \"function\" == typeof n.compositionControllerDidRender ? n.compositionControllerDidRender() : void 0;\n        }, c.prototype.rerenderViewForObject = function (t) {\n          return this.invalidateViewForObject(t), this.render();\n        }, c.prototype.invalidateViewForObject = function (t) {\n          return this.documentView.invalidateViewForObject(t);\n        }, c.prototype.isViewCachingEnabled = function () {\n          return this.documentView.isViewCachingEnabled();\n        }, c.prototype.enableViewCaching = function () {\n          return this.documentView.enableViewCaching();\n        }, c.prototype.disableViewCaching = function () {\n          return this.documentView.disableViewCaching();\n        }, c.prototype.refreshViewCache = function () {\n          return this.documentView.garbageCollectCachedViews();\n        }, c.prototype.isEditingAttachment = function () {\n          return null != this.attachmentEditor;\n        }, c.prototype.installAttachmentEditorForAttachment = function (t, n) {\n          var i, o, r;\n          if ((null != (r = this.attachmentEditor) ? r.attachment : void 0) !== t && (o = this.documentView.findElementForObject(t))) return this.uninstallAttachmentEditor(), i = this.composition.document.getAttachmentPieceForAttachment(t), this.attachmentEditor = new e.AttachmentEditorController(i, o, this.element, n), this.attachmentEditor.delegate = this;\n        }, c.prototype.uninstallAttachmentEditor = function () {\n          var t;\n          return null != (t = this.attachmentEditor) ? t.uninstall() : void 0;\n        }, c.prototype.didUninstallAttachmentEditor = function () {\n          return this.attachmentEditor = null, this.render();\n        }, c.prototype.attachmentEditorDidRequestUpdatingAttributesForAttachment = function (t, e) {\n          var n;\n          return null != (n = this.delegate) && \"function\" == typeof n.compositionControllerWillUpdateAttachment && n.compositionControllerWillUpdateAttachment(e), this.composition.updateAttributesForAttachment(t, e);\n        }, c.prototype.attachmentEditorDidRequestRemovingAttributeForAttachment = function (t, e) {\n          var n;\n          return null != (n = this.delegate) && \"function\" == typeof n.compositionControllerWillUpdateAttachment && n.compositionControllerWillUpdateAttachment(e), this.composition.removeAttributeForAttachment(t, e);\n        }, c.prototype.attachmentEditorDidRequestRemovalOfAttachment = function (t) {\n          var e;\n          return null != (e = this.delegate) && \"function\" == typeof e.compositionControllerDidRequestRemovalOfAttachment ? e.compositionControllerDidRequestRemovalOfAttachment(t) : void 0;\n        }, c.prototype.attachmentEditorDidRequestDeselectingAttachment = function (t) {\n          var e;\n          return null != (e = this.delegate) && \"function\" == typeof e.compositionControllerDidRequestDeselectingAttachment ? e.compositionControllerDidRequestDeselectingAttachment(t) : void 0;\n        }, c.prototype.canSyncDocumentView = function () {\n          return !this.isEditingAttachment();\n        }, c.prototype.findAttachmentForElement = function (t) {\n          return this.composition.document.getAttachmentById(parseInt(t.dataset.trixId, 10));\n        }, c;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o = function (t, e) {\n          return function () {\n            return t.apply(e, arguments);\n          };\n        },\n        r = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) s.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        s = {}.hasOwnProperty;\n      n = e.handleEvent, i = e.triggerEvent, t = e.findClosestElementFromNode, e.ToolbarController = function (e) {\n        function s(t) {\n          this.element = t, this.didKeyDownDialogInput = o(this.didKeyDownDialogInput, this), this.didClickDialogButton = o(this.didClickDialogButton, this), this.didClickAttributeButton = o(this.didClickAttributeButton, this), this.didClickActionButton = o(this.didClickActionButton, this), this.attributes = {}, this.actions = {}, this.resetDialogInputs(), n(\"mousedown\", {\n            onElement: this.element,\n            matchingSelector: a,\n            withCallback: this.didClickActionButton\n          }), n(\"mousedown\", {\n            onElement: this.element,\n            matchingSelector: c,\n            withCallback: this.didClickAttributeButton\n          }), n(\"click\", {\n            onElement: this.element,\n            matchingSelector: v,\n            preventDefault: !0\n          }), n(\"click\", {\n            onElement: this.element,\n            matchingSelector: l,\n            withCallback: this.didClickDialogButton\n          }), n(\"keydown\", {\n            onElement: this.element,\n            matchingSelector: h,\n            withCallback: this.didKeyDownDialogInput\n          });\n        }\n        var a, u, c, l, h, p, d, f, g, m, v;\n        return r(s, e), c = \"[data-trix-attribute]\", a = \"[data-trix-action]\", v = c + \", \" + a, p = \"[data-trix-dialog]\", u = p + \"[data-trix-active]\", l = p + \" [data-trix-method]\", h = p + \" [data-trix-input]\", s.prototype.didClickActionButton = function (t, e) {\n          var n, i, o;\n          return null != (i = this.delegate) && i.toolbarDidClickButton(), t.preventDefault(), n = d(e), this.getDialog(n) ? this.toggleDialog(n) : null != (o = this.delegate) ? o.toolbarDidInvokeAction(n) : void 0;\n        }, s.prototype.didClickAttributeButton = function (t, e) {\n          var n, i, o;\n          return null != (i = this.delegate) && i.toolbarDidClickButton(), t.preventDefault(), n = f(e), this.getDialog(n) ? this.toggleDialog(n) : null != (o = this.delegate) && o.toolbarDidToggleAttribute(n), this.refreshAttributeButtons();\n        }, s.prototype.didClickDialogButton = function (e, n) {\n          var i, o;\n          return i = t(n, {\n            matchingSelector: p\n          }), o = n.getAttribute(\"data-trix-method\"), this[o].call(this, i);\n        }, s.prototype.didKeyDownDialogInput = function (t, e) {\n          var n, i;\n          return 13 === t.keyCode && (t.preventDefault(), n = e.getAttribute(\"name\"), i = this.getDialog(n), this.setAttribute(i)), 27 === t.keyCode ? (t.preventDefault(), this.hideDialog()) : void 0;\n        }, s.prototype.updateActions = function (t) {\n          return this.actions = t, this.refreshActionButtons();\n        }, s.prototype.refreshActionButtons = function () {\n          return this.eachActionButton(function (t) {\n            return function (e, n) {\n              return e.disabled = t.actions[n] === !1;\n            };\n          }(this));\n        }, s.prototype.eachActionButton = function (t) {\n          var e, n, i, o, r;\n          for (o = this.element.querySelectorAll(a), r = [], n = 0, i = o.length; i > n; n++) e = o[n], r.push(t(e, d(e)));\n          return r;\n        }, s.prototype.updateAttributes = function (t) {\n          return this.attributes = t, this.refreshAttributeButtons();\n        }, s.prototype.refreshAttributeButtons = function () {\n          return this.eachAttributeButton(function (t) {\n            return function (e, n) {\n              return e.disabled = t.attributes[n] === !1, t.attributes[n] || t.dialogIsVisible(n) ? (e.setAttribute(\"data-trix-active\", \"\"), e.classList.add(\"trix-active\")) : (e.removeAttribute(\"data-trix-active\"), e.classList.remove(\"trix-active\"));\n            };\n          }(this));\n        }, s.prototype.eachAttributeButton = function (t) {\n          var e, n, i, o, r;\n          for (o = this.element.querySelectorAll(c), r = [], n = 0, i = o.length; i > n; n++) e = o[n], r.push(t(e, f(e)));\n          return r;\n        }, s.prototype.applyKeyboardCommand = function (t) {\n          var e, n, o, r, s, a, u;\n          for (s = JSON.stringify(t.sort()), u = this.element.querySelectorAll(\"[data-trix-key]\"), r = 0, a = u.length; a > r; r++) if (e = u[r], o = e.getAttribute(\"data-trix-key\").split(\"+\"), n = JSON.stringify(o.sort()), n === s) return i(\"mousedown\", {\n            onElement: e\n          }), !0;\n          return !1;\n        }, s.prototype.dialogIsVisible = function (t) {\n          var e;\n          return (e = this.getDialog(t)) ? e.hasAttribute(\"data-trix-active\") : void 0;\n        }, s.prototype.toggleDialog = function (t) {\n          return this.dialogIsVisible(t) ? this.hideDialog() : this.showDialog(t);\n        }, s.prototype.showDialog = function (t) {\n          var e, n, i, o, r, s, a, u, c, l;\n          for (this.hideDialog(), null != (a = this.delegate) && a.toolbarWillShowDialog(), i = this.getDialog(t), i.setAttribute(\"data-trix-active\", \"\"), i.classList.add(\"trix-active\"), u = i.querySelectorAll(\"input[disabled]\"), o = 0, s = u.length; s > o; o++) n = u[o], n.removeAttribute(\"disabled\");\n          return (e = f(i)) && (r = m(i, t)) && (r.value = null != (c = this.attributes[e]) ? c : \"\", r.select()), null != (l = this.delegate) ? l.toolbarDidShowDialog(t) : void 0;\n        }, s.prototype.setAttribute = function (t) {\n          var e, n, i;\n          return e = f(t), n = m(t, e), n.willValidate && !n.checkValidity() ? (n.setAttribute(\"data-trix-validate\", \"\"), n.classList.add(\"trix-validate\"), n.focus()) : (null != (i = this.delegate) && i.toolbarDidUpdateAttribute(e, n.value), this.hideDialog());\n        }, s.prototype.removeAttribute = function (t) {\n          var e, n;\n          return e = f(t), null != (n = this.delegate) && n.toolbarDidRemoveAttribute(e), this.hideDialog();\n        }, s.prototype.hideDialog = function () {\n          var t, e;\n          return (t = this.element.querySelector(u)) ? (t.removeAttribute(\"data-trix-active\"), t.classList.remove(\"trix-active\"), this.resetDialogInputs(), null != (e = this.delegate) ? e.toolbarDidHideDialog(g(t)) : void 0) : void 0;\n        }, s.prototype.resetDialogInputs = function () {\n          var t, e, n, i, o;\n          for (i = this.element.querySelectorAll(h), o = [], t = 0, n = i.length; n > t; t++) e = i[t], e.setAttribute(\"disabled\", \"disabled\"), e.removeAttribute(\"data-trix-validate\"), o.push(e.classList.remove(\"trix-validate\"));\n          return o;\n        }, s.prototype.getDialog = function (t) {\n          return this.element.querySelector(\"[data-trix-dialog=\" + t + \"]\");\n        }, m = function (t, e) {\n          return null == e && (e = f(t)), t.querySelector(\"[data-trix-input][name='\" + e + \"']\");\n        }, d = function (t) {\n          return t.getAttribute(\"data-trix-action\");\n        }, f = function (t) {\n          var e;\n          return null != (e = t.getAttribute(\"data-trix-attribute\")) ? e : t.getAttribute(\"data-trix-dialog-attribute\");\n        }, g = function (t) {\n          return t.getAttribute(\"data-trix-dialog\");\n        }, s;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.ImagePreloadOperation = function (e) {\n        function n(t) {\n          this.url = t;\n        }\n        return t(n, e), n.prototype.perform = function (t) {\n          var e;\n          return e = new Image(), e.onload = function (n) {\n            return function () {\n              return e.width = n.width = e.naturalWidth, e.height = n.height = e.naturalHeight, t(!0, e);\n            };\n          }(this), e.onerror = function () {\n            return t(!1);\n          }, e.src = this.url;\n        }, n;\n      }(e.Operation);\n    }.call(this), function () {\n      var t = function (t, e) {\n          return function () {\n            return t.apply(e, arguments);\n          };\n        },\n        n = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var o in e) i.call(e, o) && (t[o] = e[o]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        i = {}.hasOwnProperty;\n      e.Attachment = function (i) {\n        function o(n) {\n          null == n && (n = {}), this.releaseFile = t(this.releaseFile, this), o.__super__.constructor.apply(this, arguments), this.attributes = e.Hash.box(n), this.didChangeAttributes();\n        }\n        return n(o, i), o.previewablePattern = /^image(\\/(gif|png|jpe?g)|$)/, o.attachmentForFile = function (t) {\n          var e, n;\n          return n = this.attributesForFile(t), e = new this(n), e.setFile(t), e;\n        }, o.attributesForFile = function (t) {\n          return new e.Hash({\n            filename: t.name,\n            filesize: t.size,\n            contentType: t.type\n          });\n        }, o.fromJSON = function (t) {\n          return new this(t);\n        }, o.prototype.getAttribute = function (t) {\n          return this.attributes.get(t);\n        }, o.prototype.hasAttribute = function (t) {\n          return this.attributes.has(t);\n        }, o.prototype.getAttributes = function () {\n          return this.attributes.toObject();\n        }, o.prototype.setAttributes = function (t) {\n          var e, n, i;\n          return null == t && (t = {}), e = this.attributes.merge(t), this.attributes.isEqualTo(e) ? void 0 : (this.attributes = e, this.didChangeAttributes(), null != (n = this.previewDelegate) && \"function\" == typeof n.attachmentDidChangeAttributes && n.attachmentDidChangeAttributes(this), null != (i = this.delegate) && \"function\" == typeof i.attachmentDidChangeAttributes ? i.attachmentDidChangeAttributes(this) : void 0);\n        }, o.prototype.didChangeAttributes = function () {\n          return this.isPreviewable() ? this.preloadURL() : void 0;\n        }, o.prototype.isPending = function () {\n          return null != this.file && !(this.getURL() || this.getHref());\n        }, o.prototype.isPreviewable = function () {\n          return this.attributes.has(\"previewable\") ? this.attributes.get(\"previewable\") : this.constructor.previewablePattern.test(this.getContentType());\n        }, o.prototype.getType = function () {\n          return this.hasContent() ? \"content\" : this.isPreviewable() ? \"preview\" : \"file\";\n        }, o.prototype.getURL = function () {\n          return this.attributes.get(\"url\");\n        }, o.prototype.getHref = function () {\n          return this.attributes.get(\"href\");\n        }, o.prototype.getFilename = function () {\n          var t;\n          return null != (t = this.attributes.get(\"filename\")) ? t : \"\";\n        }, o.prototype.getFilesize = function () {\n          return this.attributes.get(\"filesize\");\n        }, o.prototype.getFormattedFilesize = function () {\n          var t;\n          return t = this.attributes.get(\"filesize\"), \"number\" == typeof t ? e.config.fileSize.formatter(t) : \"\";\n        }, o.prototype.getExtension = function () {\n          var t;\n          return null != (t = this.getFilename().match(/\\.(\\w+)$/)) ? t[1].toLowerCase() : void 0;\n        }, o.prototype.getContentType = function () {\n          return this.attributes.get(\"contentType\");\n        }, o.prototype.hasContent = function () {\n          return this.attributes.has(\"content\");\n        }, o.prototype.getContent = function () {\n          return this.attributes.get(\"content\");\n        }, o.prototype.getWidth = function () {\n          return this.attributes.get(\"width\");\n        }, o.prototype.getHeight = function () {\n          return this.attributes.get(\"height\");\n        }, o.prototype.getFile = function () {\n          return this.file;\n        }, o.prototype.setFile = function (t) {\n          return this.file = t, this.isPreviewable() ? this.preloadFile() : void 0;\n        }, o.prototype.releaseFile = function () {\n          return this.releasePreloadedFile(), this.file = null;\n        }, o.prototype.getUploadProgress = function () {\n          var t;\n          return null != (t = this.uploadProgress) ? t : 0;\n        }, o.prototype.setUploadProgress = function (t) {\n          var e;\n          return this.uploadProgress !== t ? (this.uploadProgress = t, null != (e = this.uploadProgressDelegate) && \"function\" == typeof e.attachmentDidChangeUploadProgress ? e.attachmentDidChangeUploadProgress(this) : void 0) : void 0;\n        }, o.prototype.toJSON = function () {\n          return this.getAttributes();\n        }, o.prototype.getCacheKey = function () {\n          return [o.__super__.getCacheKey.apply(this, arguments), this.attributes.getCacheKey(), this.getPreviewURL()].join(\"/\");\n        }, o.prototype.getPreviewURL = function () {\n          return this.previewURL || this.preloadingURL;\n        }, o.prototype.setPreviewURL = function (t) {\n          var e, n;\n          return t !== this.getPreviewURL() ? (this.previewURL = t, null != (e = this.previewDelegate) && \"function\" == typeof e.attachmentDidChangeAttributes && e.attachmentDidChangeAttributes(this), null != (n = this.delegate) && \"function\" == typeof n.attachmentDidChangePreviewURL ? n.attachmentDidChangePreviewURL(this) : void 0) : void 0;\n        }, o.prototype.preloadURL = function () {\n          return this.preload(this.getURL(), this.releaseFile);\n        }, o.prototype.preloadFile = function () {\n          return this.file ? (this.fileObjectURL = URL.createObjectURL(this.file), this.preload(this.fileObjectURL)) : void 0;\n        }, o.prototype.releasePreloadedFile = function () {\n          return this.fileObjectURL ? (URL.revokeObjectURL(this.fileObjectURL), this.fileObjectURL = null) : void 0;\n        }, o.prototype.preload = function (t, n) {\n          var i;\n          return t && t !== this.getPreviewURL() ? (this.preloadingURL = t, i = new e.ImagePreloadOperation(t), i.then(function (e) {\n            return function (i) {\n              var o, r;\n              return r = i.width, o = i.height, e.getWidth() && e.getHeight() || e.setAttributes({\n                width: r,\n                height: o\n              }), e.preloadingURL = null, e.setPreviewURL(t), \"function\" == typeof n ? n() : void 0;\n            };\n          }(this))[\"catch\"](function (t) {\n            return function () {\n              return t.preloadingURL = null, \"function\" == typeof n ? n() : void 0;\n            };\n          }(this))) : void 0;\n        }, o;\n      }(e.Object);\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.Piece = function (n) {\n        function i(t, n) {\n          null == n && (n = {}), i.__super__.constructor.apply(this, arguments), this.attributes = e.Hash.box(n);\n        }\n        return t(i, n), i.types = {}, i.registerType = function (t, e) {\n          return e.type = t, this.types[t] = e;\n        }, i.fromJSON = function (t) {\n          var e;\n          return (e = this.types[t.type]) ? e.fromJSON(t) : void 0;\n        }, i.prototype.copyWithAttributes = function (t) {\n          return new this.constructor(this.getValue(), t);\n        }, i.prototype.copyWithAdditionalAttributes = function (t) {\n          return this.copyWithAttributes(this.attributes.merge(t));\n        }, i.prototype.copyWithoutAttribute = function (t) {\n          return this.copyWithAttributes(this.attributes.remove(t));\n        }, i.prototype.copy = function () {\n          return this.copyWithAttributes(this.attributes);\n        }, i.prototype.getAttribute = function (t) {\n          return this.attributes.get(t);\n        }, i.prototype.getAttributesHash = function () {\n          return this.attributes;\n        }, i.prototype.getAttributes = function () {\n          return this.attributes.toObject();\n        }, i.prototype.getCommonAttributes = function () {\n          var t, e, n;\n          return (n = pieceList.getPieceAtIndex(0)) ? (t = n.attributes, e = t.getKeys(), pieceList.eachPiece(function (n) {\n            return e = t.getKeysCommonToHash(n.attributes), t = t.slice(e);\n          }), t.toObject()) : {};\n        }, i.prototype.hasAttribute = function (t) {\n          return this.attributes.has(t);\n        }, i.prototype.hasSameStringValueAsPiece = function (t) {\n          return null != t && this.toString() === t.toString();\n        }, i.prototype.hasSameAttributesAsPiece = function (t) {\n          return null != t && (this.attributes === t.attributes || this.attributes.isEqualTo(t.attributes));\n        }, i.prototype.isBlockBreak = function () {\n          return !1;\n        }, i.prototype.isEqualTo = function (t) {\n          return i.__super__.isEqualTo.apply(this, arguments) || this.hasSameConstructorAs(t) && this.hasSameStringValueAsPiece(t) && this.hasSameAttributesAsPiece(t);\n        }, i.prototype.isEmpty = function () {\n          return 0 === this.length;\n        }, i.prototype.isSerializable = function () {\n          return !0;\n        }, i.prototype.toJSON = function () {\n          return {\n            type: this.constructor.type,\n            attributes: this.getAttributes()\n          };\n        }, i.prototype.contentsForInspection = function () {\n          return {\n            type: this.constructor.type,\n            attributes: this.attributes.inspect()\n          };\n        }, i.prototype.canBeGrouped = function () {\n          return this.hasAttribute(\"href\");\n        }, i.prototype.canBeGroupedWith = function (t) {\n          return this.getAttribute(\"href\") === t.getAttribute(\"href\");\n        }, i.prototype.getLength = function () {\n          return this.length;\n        }, i.prototype.canBeConsolidatedWith = function () {\n          return !1;\n        }, i;\n      }(e.Object);\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.Piece.registerType(\"attachment\", e.AttachmentPiece = function (n) {\n        function i(t) {\n          this.attachment = t, i.__super__.constructor.apply(this, arguments), this.length = 1, this.ensureAttachmentExclusivelyHasAttribute(\"href\"), this.attachment.hasContent() || this.removeProhibitedAttributes();\n        }\n        return t(i, n), i.fromJSON = function (t) {\n          return new this(e.Attachment.fromJSON(t.attachment), t.attributes);\n        }, i.permittedAttributes = [\"caption\", \"presentation\"], i.prototype.ensureAttachmentExclusivelyHasAttribute = function (t) {\n          return this.hasAttribute(t) ? (this.attachment.hasAttribute(t) || this.attachment.setAttributes(this.attributes.slice(t)), this.attributes = this.attributes.remove(t)) : void 0;\n        }, i.prototype.removeProhibitedAttributes = function () {\n          var t;\n          return t = this.attributes.slice(this.constructor.permittedAttributes), t.isEqualTo(this.attributes) ? void 0 : this.attributes = t;\n        }, i.prototype.getValue = function () {\n          return this.attachment;\n        }, i.prototype.isSerializable = function () {\n          return !this.attachment.isPending();\n        }, i.prototype.getCaption = function () {\n          var t;\n          return null != (t = this.attributes.get(\"caption\")) ? t : \"\";\n        }, i.prototype.isEqualTo = function (t) {\n          var e;\n          return i.__super__.isEqualTo.apply(this, arguments) && this.attachment.id === (null != t && null != (e = t.attachment) ? e.id : void 0);\n        }, i.prototype.toString = function () {\n          return e.OBJECT_REPLACEMENT_CHARACTER;\n        }, i.prototype.toJSON = function () {\n          var t;\n          return t = i.__super__.toJSON.apply(this, arguments), t.attachment = this.attachment, t;\n        }, i.prototype.getCacheKey = function () {\n          return [i.__super__.getCacheKey.apply(this, arguments), this.attachment.getCacheKey()].join(\"/\");\n        }, i.prototype.toConsole = function () {\n          return JSON.stringify(this.toString());\n        }, i;\n      }(e.Piece));\n    }.call(this), function () {\n      var t,\n        n = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var o in e) i.call(e, o) && (t[o] = e[o]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        i = {}.hasOwnProperty;\n      t = e.normalizeNewlines, e.Piece.registerType(\"string\", e.StringPiece = function (e) {\n        function i(e) {\n          i.__super__.constructor.apply(this, arguments), this.string = t(e), this.length = this.string.length;\n        }\n        return n(i, e), i.fromJSON = function (t) {\n          return new this(t.string, t.attributes);\n        }, i.prototype.getValue = function () {\n          return this.string;\n        }, i.prototype.toString = function () {\n          return this.string.toString();\n        }, i.prototype.isBlockBreak = function () {\n          return \"\\n\" === this.toString() && this.getAttribute(\"blockBreak\") === !0;\n        }, i.prototype.toJSON = function () {\n          var t;\n          return t = i.__super__.toJSON.apply(this, arguments), t.string = this.string, t;\n        }, i.prototype.canBeConsolidatedWith = function (t) {\n          return null != t && this.hasSameConstructorAs(t) && this.hasSameAttributesAsPiece(t);\n        }, i.prototype.consolidateWith = function (t) {\n          return new this.constructor(this.toString() + t.toString(), this.attributes);\n        }, i.prototype.splitAtOffset = function (t) {\n          var e, n;\n          return 0 === t ? (e = null, n = this) : t === this.length ? (e = this, n = null) : (e = new this.constructor(this.string.slice(0, t), this.attributes), n = new this.constructor(this.string.slice(t), this.attributes)), [e, n];\n        }, i.prototype.toConsole = function () {\n          var t;\n          return t = this.string, t.length > 15 && (t = t.slice(0, 14) + \"\\u2026\"), JSON.stringify(t.toString());\n        }, i;\n      }(e.Piece));\n    }.call(this), function () {\n      var t,\n        n = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var o in e) i.call(e, o) && (t[o] = e[o]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        i = {}.hasOwnProperty,\n        o = [].slice;\n      t = e.spliceArray, e.SplittableList = function (e) {\n        function i(t) {\n          null == t && (t = []), i.__super__.constructor.apply(this, arguments), this.objects = t.slice(0), this.length = this.objects.length;\n        }\n        var r, s, a;\n        return n(i, e), i.box = function (t) {\n          return t instanceof this ? t : new this(t);\n        }, i.prototype.indexOf = function (t) {\n          return this.objects.indexOf(t);\n        }, i.prototype.splice = function () {\n          var e;\n          return e = 1 <= arguments.length ? o.call(arguments, 0) : [], new this.constructor(t.apply(null, [this.objects].concat(o.call(e))));\n        }, i.prototype.eachObject = function (t) {\n          var e, n, i, o, r, s;\n          for (r = this.objects, s = [], n = e = 0, i = r.length; i > e; n = ++e) o = r[n], s.push(t(o, n));\n          return s;\n        }, i.prototype.insertObjectAtIndex = function (t, e) {\n          return this.splice(e, 0, t);\n        }, i.prototype.insertSplittableListAtIndex = function (t, e) {\n          return this.splice.apply(this, [e, 0].concat(o.call(t.objects)));\n        }, i.prototype.insertSplittableListAtPosition = function (t, e) {\n          var n, i, o;\n          return o = this.splitObjectAtPosition(e), i = o[0], n = o[1], new this.constructor(i).insertSplittableListAtIndex(t, n);\n        }, i.prototype.editObjectAtIndex = function (t, e) {\n          return this.replaceObjectAtIndex(e(this.objects[t]), t);\n        }, i.prototype.replaceObjectAtIndex = function (t, e) {\n          return this.splice(e, 1, t);\n        }, i.prototype.removeObjectAtIndex = function (t) {\n          return this.splice(t, 1);\n        }, i.prototype.getObjectAtIndex = function (t) {\n          return this.objects[t];\n        }, i.prototype.getSplittableListInRange = function (t) {\n          var e, n, i, o;\n          return i = this.splitObjectsAtRange(t), n = i[0], e = i[1], o = i[2], new this.constructor(n.slice(e, o + 1));\n        }, i.prototype.selectSplittableList = function (t) {\n          var e, n;\n          return n = function () {\n            var n, i, o, r;\n            for (o = this.objects, r = [], n = 0, i = o.length; i > n; n++) e = o[n], t(e) && r.push(e);\n            return r;\n          }.call(this), new this.constructor(n);\n        }, i.prototype.removeObjectsInRange = function (t) {\n          var e, n, i, o;\n          return i = this.splitObjectsAtRange(t), n = i[0], e = i[1], o = i[2], new this.constructor(n).splice(e, o - e + 1);\n        }, i.prototype.transformObjectsInRange = function (t, e) {\n          var n, i, o, r, s, a, u;\n          return s = this.splitObjectsAtRange(t), r = s[0], i = s[1], a = s[2], u = function () {\n            var t, s, u;\n            for (u = [], n = t = 0, s = r.length; s > t; n = ++t) o = r[n], u.push(n >= i && a >= n ? e(o) : o);\n            return u;\n          }(), new this.constructor(u);\n        }, i.prototype.splitObjectsAtRange = function (t) {\n          var e, n, i, o, s, u;\n          return o = this.splitObjectAtPosition(a(t)), n = o[0], e = o[1], i = o[2], s = new this.constructor(n).splitObjectAtPosition(r(t) + i), n = s[0], u = s[1], [n, e, u - 1];\n        }, i.prototype.getObjectAtPosition = function (t) {\n          var e, n, i;\n          return i = this.findIndexAndOffsetAtPosition(t), e = i.index, n = i.offset, this.objects[e];\n        }, i.prototype.splitObjectAtPosition = function (t) {\n          var e, n, i, o, r, s, a, u, c, l;\n          return s = this.findIndexAndOffsetAtPosition(t), e = s.index, r = s.offset, o = this.objects.slice(0), null != e ? 0 === r ? (c = e, l = 0) : (i = this.getObjectAtIndex(e), a = i.splitAtOffset(r), n = a[0], u = a[1], o.splice(e, 1, n, u), c = e + 1, l = n.getLength() - r) : (c = o.length, l = 0), [o, c, l];\n        }, i.prototype.consolidate = function () {\n          var t, e, n, i, o, r;\n          for (i = [], o = this.objects[0], r = this.objects.slice(1), t = 0, e = r.length; e > t; t++) n = r[t], (\"function\" == typeof o.canBeConsolidatedWith ? o.canBeConsolidatedWith(n) : void 0) ? o = o.consolidateWith(n) : (i.push(o), o = n);\n          return null != o && i.push(o), new this.constructor(i);\n        }, i.prototype.consolidateFromIndexToIndex = function (t, e) {\n          var n, i, r;\n          return i = this.objects.slice(0), r = i.slice(t, e + 1), n = new this.constructor(r).consolidate().toArray(), this.splice.apply(this, [t, r.length].concat(o.call(n)));\n        }, i.prototype.findIndexAndOffsetAtPosition = function (t) {\n          var e, n, i, o, r, s, a;\n          for (e = 0, a = this.objects, i = n = 0, o = a.length; o > n; i = ++n) {\n            if (s = a[i], r = e + s.getLength(), t >= e && r > t) return {\n              index: i,\n              offset: t - e\n            };\n            e = r;\n          }\n          return {\n            index: null,\n            offset: null\n          };\n        }, i.prototype.findPositionAtIndexAndOffset = function (t, e) {\n          var n, i, o, r, s, a;\n          for (s = 0, a = this.objects, n = i = 0, o = a.length; o > i; n = ++i) if (r = a[n], t > n) s += r.getLength();else if (n === t) {\n            s += e;\n            break;\n          }\n          return s;\n        }, i.prototype.getEndPosition = function () {\n          var t, e;\n          return null != this.endPosition ? this.endPosition : this.endPosition = function () {\n            var n, i, o;\n            for (e = 0, o = this.objects, n = 0, i = o.length; i > n; n++) t = o[n], e += t.getLength();\n            return e;\n          }.call(this);\n        }, i.prototype.toString = function () {\n          return this.objects.join(\"\");\n        }, i.prototype.toArray = function () {\n          return this.objects.slice(0);\n        }, i.prototype.toJSON = function () {\n          return this.toArray();\n        }, i.prototype.isEqualTo = function (t) {\n          return i.__super__.isEqualTo.apply(this, arguments) || s(this.objects, null != t ? t.objects : void 0);\n        }, s = function (t, e) {\n          var n, i, o, r, s;\n          if (null == e && (e = []), t.length !== e.length) return !1;\n          for (s = !0, i = n = 0, o = t.length; o > n; i = ++n) r = t[i], s && !r.isEqualTo(e[i]) && (s = !1);\n          return s;\n        }, i.prototype.contentsForInspection = function () {\n          var t;\n          return {\n            objects: \"[\" + function () {\n              var e, n, i, o;\n              for (i = this.objects, o = [], e = 0, n = i.length; n > e; e++) t = i[e], o.push(t.inspect());\n              return o;\n            }.call(this).join(\", \") + \"]\"\n          };\n        }, a = function (t) {\n          return t[0];\n        }, r = function (t) {\n          return t[1];\n        }, i;\n      }(e.Object);\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.Text = function (n) {\n        function i(t) {\n          var n;\n          null == t && (t = []), i.__super__.constructor.apply(this, arguments), this.pieceList = new e.SplittableList(function () {\n            var e, i, o;\n            for (o = [], e = 0, i = t.length; i > e; e++) n = t[e], n.isEmpty() || o.push(n);\n            return o;\n          }());\n        }\n        return t(i, n), i.textForAttachmentWithAttributes = function (t, n) {\n          var i;\n          return i = new e.AttachmentPiece(t, n), new this([i]);\n        }, i.textForStringWithAttributes = function (t, n) {\n          var i;\n          return i = new e.StringPiece(t, n), new this([i]);\n        }, i.fromJSON = function (t) {\n          var n, i;\n          return i = function () {\n            var i, o, r;\n            for (r = [], i = 0, o = t.length; o > i; i++) n = t[i], r.push(e.Piece.fromJSON(n));\n            return r;\n          }(), new this(i);\n        }, i.prototype.copy = function () {\n          return this.copyWithPieceList(this.pieceList);\n        }, i.prototype.copyWithPieceList = function (t) {\n          return new this.constructor(t.consolidate().toArray());\n        }, i.prototype.copyUsingObjectMap = function (t) {\n          var e, n;\n          return n = function () {\n            var n, i, o, r, s;\n            for (o = this.getPieces(), s = [], n = 0, i = o.length; i > n; n++) e = o[n], s.push(null != (r = t.find(e)) ? r : e);\n            return s;\n          }.call(this), new this.constructor(n);\n        }, i.prototype.appendText = function (t) {\n          return this.insertTextAtPosition(t, this.getLength());\n        }, i.prototype.insertTextAtPosition = function (t, e) {\n          return this.copyWithPieceList(this.pieceList.insertSplittableListAtPosition(t.pieceList, e));\n        }, i.prototype.removeTextAtRange = function (t) {\n          return this.copyWithPieceList(this.pieceList.removeObjectsInRange(t));\n        }, i.prototype.replaceTextAtRange = function (t, e) {\n          return this.removeTextAtRange(e).insertTextAtPosition(t, e[0]);\n        }, i.prototype.moveTextFromRangeToPosition = function (t, e) {\n          var n, i;\n          if (!(t[0] <= e && e <= t[1])) return i = this.getTextAtRange(t), n = i.getLength(), t[0] < e && (e -= n), this.removeTextAtRange(t).insertTextAtPosition(i, e);\n        }, i.prototype.addAttributeAtRange = function (t, e, n) {\n          var i;\n          return i = {}, i[t] = e, this.addAttributesAtRange(i, n);\n        }, i.prototype.addAttributesAtRange = function (t, e) {\n          return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e, function (e) {\n            return e.copyWithAdditionalAttributes(t);\n          }));\n        }, i.prototype.removeAttributeAtRange = function (t, e) {\n          return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e, function (e) {\n            return e.copyWithoutAttribute(t);\n          }));\n        }, i.prototype.setAttributesAtRange = function (t, e) {\n          return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e, function (e) {\n            return e.copyWithAttributes(t);\n          }));\n        }, i.prototype.getAttributesAtPosition = function (t) {\n          var e, n;\n          return null != (e = null != (n = this.pieceList.getObjectAtPosition(t)) ? n.getAttributes() : void 0) ? e : {};\n        }, i.prototype.getCommonAttributes = function () {\n          var t, n;\n          return t = function () {\n            var t, e, i, o;\n            for (i = this.pieceList.toArray(), o = [], t = 0, e = i.length; e > t; t++) n = i[t], o.push(n.getAttributes());\n            return o;\n          }.call(this), e.Hash.fromCommonAttributesOfObjects(t).toObject();\n        }, i.prototype.getCommonAttributesAtRange = function (t) {\n          var e;\n          return null != (e = this.getTextAtRange(t).getCommonAttributes()) ? e : {};\n        }, i.prototype.getExpandedRangeForAttributeAtOffset = function (t, e) {\n          var n, i, o;\n          for (n = o = e, i = this.getLength(); n > 0 && this.getCommonAttributesAtRange([n - 1, o])[t];) n--;\n          for (; i > o && this.getCommonAttributesAtRange([e, o + 1])[t];) o++;\n          return [n, o];\n        }, i.prototype.getTextAtRange = function (t) {\n          return this.copyWithPieceList(this.pieceList.getSplittableListInRange(t));\n        }, i.prototype.getStringAtRange = function (t) {\n          return this.pieceList.getSplittableListInRange(t).toString();\n        }, i.prototype.getStringAtPosition = function (t) {\n          return this.getStringAtRange([t, t + 1]);\n        }, i.prototype.startsWithString = function (t) {\n          return this.getStringAtRange([0, t.length]) === t;\n        }, i.prototype.endsWithString = function (t) {\n          var e;\n          return e = this.getLength(), this.getStringAtRange([e - t.length, e]) === t;\n        }, i.prototype.getAttachmentPieces = function () {\n          var t, e, n, i, o;\n          for (i = this.pieceList.toArray(), o = [], t = 0, e = i.length; e > t; t++) n = i[t], null != n.attachment && o.push(n);\n          return o;\n        }, i.prototype.getAttachments = function () {\n          var t, e, n, i, o;\n          for (i = this.getAttachmentPieces(), o = [], t = 0, e = i.length; e > t; t++) n = i[t], o.push(n.attachment);\n          return o;\n        }, i.prototype.getAttachmentAndPositionById = function (t) {\n          var e, n, i, o, r, s;\n          for (o = 0, r = this.pieceList.toArray(), e = 0, n = r.length; n > e; e++) {\n            if (i = r[e], (null != (s = i.attachment) ? s.id : void 0) === t) return {\n              attachment: i.attachment,\n              position: o\n            };\n            o += i.length;\n          }\n          return {\n            attachment: null,\n            position: null\n          };\n        }, i.prototype.getAttachmentById = function (t) {\n          var e, n, i;\n          return i = this.getAttachmentAndPositionById(t), e = i.attachment, n = i.position, e;\n        }, i.prototype.getRangeOfAttachment = function (t) {\n          var e, n;\n          return n = this.getAttachmentAndPositionById(t.id), t = n.attachment, e = n.position, null != t ? [e, e + 1] : void 0;\n        }, i.prototype.updateAttributesForAttachment = function (t, e) {\n          var n;\n          return (n = this.getRangeOfAttachment(e)) ? this.addAttributesAtRange(t, n) : this;\n        }, i.prototype.getLength = function () {\n          return this.pieceList.getEndPosition();\n        }, i.prototype.isEmpty = function () {\n          return 0 === this.getLength();\n        }, i.prototype.isEqualTo = function (t) {\n          var e;\n          return i.__super__.isEqualTo.apply(this, arguments) || (null != t && null != (e = t.pieceList) ? e.isEqualTo(this.pieceList) : void 0);\n        }, i.prototype.isBlockBreak = function () {\n          return 1 === this.getLength() && this.pieceList.getObjectAtIndex(0).isBlockBreak();\n        }, i.prototype.eachPiece = function (t) {\n          return this.pieceList.eachObject(t);\n        }, i.prototype.getPieces = function () {\n          return this.pieceList.toArray();\n        }, i.prototype.getPieceAtPosition = function (t) {\n          return this.pieceList.getObjectAtPosition(t);\n        }, i.prototype.contentsForInspection = function () {\n          return {\n            pieceList: this.pieceList.inspect()\n          };\n        }, i.prototype.toSerializableText = function () {\n          var t;\n          return t = this.pieceList.selectSplittableList(function (t) {\n            return t.isSerializable();\n          }), this.copyWithPieceList(t);\n        }, i.prototype.toString = function () {\n          return this.pieceList.toString();\n        }, i.prototype.toJSON = function () {\n          return this.pieceList.toJSON();\n        }, i.prototype.toConsole = function () {\n          var t;\n          return JSON.stringify(function () {\n            var e, n, i, o;\n            for (i = this.pieceList.toArray(), o = [], e = 0, n = i.length; n > e; e++) t = i[e], o.push(JSON.parse(t.toConsole()));\n            return o;\n          }.call(this));\n        }, i.prototype.getDirection = function () {\n          return e.getDirection(this.toString());\n        }, i.prototype.isRTL = function () {\n          return \"rtl\" === this.getDirection();\n        }, i;\n      }(e.Object);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r,\n        s = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) a.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        a = {}.hasOwnProperty,\n        u = [].indexOf || function (t) {\n          for (var e = 0, n = this.length; n > e; e++) if (e in this && this[e] === t) return e;\n          return -1;\n        },\n        c = [].slice;\n      t = e.arraysAreEqual, r = e.spliceArray, i = e.getBlockConfig, n = e.getBlockAttributeNames, o = e.getListAttributeNames, e.Block = function (n) {\n        function a(t, n) {\n          null == t && (t = new e.Text()), null == n && (n = []), a.__super__.constructor.apply(this, arguments), this.text = h(t), this.attributes = n;\n        }\n        var l, h, p, d, f, g, m, v, y;\n        return s(a, n), a.fromJSON = function (t) {\n          var n;\n          return n = e.Text.fromJSON(t.text), new this(n, t.attributes);\n        }, a.prototype.isEmpty = function () {\n          return this.text.isBlockBreak();\n        }, a.prototype.isEqualTo = function (e) {\n          return a.__super__.isEqualTo.apply(this, arguments) || this.text.isEqualTo(null != e ? e.text : void 0) && t(this.attributes, null != e ? e.attributes : void 0);\n        }, a.prototype.copyWithText = function (t) {\n          return new this.constructor(t, this.attributes);\n        }, a.prototype.copyWithoutText = function () {\n          return this.copyWithText(null);\n        }, a.prototype.copyWithAttributes = function (t) {\n          return new this.constructor(this.text, t);\n        }, a.prototype.copyWithoutAttributes = function () {\n          return this.copyWithAttributes(null);\n        }, a.prototype.copyUsingObjectMap = function (t) {\n          var e;\n          return this.copyWithText((e = t.find(this.text)) ? e : this.text.copyUsingObjectMap(t));\n        }, a.prototype.addAttribute = function (t) {\n          var e;\n          return e = this.attributes.concat(d(t)), this.copyWithAttributes(e);\n        }, a.prototype.removeAttribute = function (t) {\n          var e, n;\n          return n = i(t).listAttribute, e = g(g(this.attributes, t), n), this.copyWithAttributes(e);\n        }, a.prototype.removeLastAttribute = function () {\n          return this.removeAttribute(this.getLastAttribute());\n        }, a.prototype.getLastAttribute = function () {\n          return f(this.attributes);\n        }, a.prototype.getAttributes = function () {\n          return this.attributes.slice(0);\n        }, a.prototype.getAttributeLevel = function () {\n          return this.attributes.length;\n        }, a.prototype.getAttributeAtLevel = function (t) {\n          return this.attributes[t - 1];\n        }, a.prototype.hasAttribute = function (t) {\n          return u.call(this.attributes, t) >= 0;\n        }, a.prototype.hasAttributes = function () {\n          return this.getAttributeLevel() > 0;\n        }, a.prototype.getLastNestableAttribute = function () {\n          return f(this.getNestableAttributes());\n        }, a.prototype.getNestableAttributes = function () {\n          var t, e, n, o, r;\n          for (o = this.attributes, r = [], e = 0, n = o.length; n > e; e++) t = o[e], i(t).nestable && r.push(t);\n          return r;\n        }, a.prototype.getNestingLevel = function () {\n          return this.getNestableAttributes().length;\n        }, a.prototype.decreaseNestingLevel = function () {\n          var t;\n          return (t = this.getLastNestableAttribute()) ? this.removeAttribute(t) : this;\n        }, a.prototype.increaseNestingLevel = function () {\n          var t, e, n;\n          return (t = this.getLastNestableAttribute()) ? (n = this.attributes.lastIndexOf(t), e = r.apply(null, [this.attributes, n + 1, 0].concat(c.call(d(t)))), this.copyWithAttributes(e)) : this;\n        }, a.prototype.getListItemAttributes = function () {\n          var t, e, n, o, r;\n          for (o = this.attributes, r = [], e = 0, n = o.length; n > e; e++) t = o[e], i(t).listAttribute && r.push(t);\n          return r;\n        }, a.prototype.isListItem = function () {\n          var t;\n          return null != (t = i(this.getLastAttribute())) ? t.listAttribute : void 0;\n        }, a.prototype.isTerminalBlock = function () {\n          var t;\n          return null != (t = i(this.getLastAttribute())) ? t.terminal : void 0;\n        }, a.prototype.breaksOnReturn = function () {\n          var t;\n          return null != (t = i(this.getLastAttribute())) ? t.breakOnReturn : void 0;\n        }, a.prototype.findLineBreakInDirectionFromPosition = function (t, e) {\n          var n, i;\n          return i = this.toString(), n = function () {\n            switch (t) {\n              case \"forward\":\n                return i.indexOf(\"\\n\", e);\n              case \"backward\":\n                return i.slice(0, e).lastIndexOf(\"\\n\");\n            }\n          }(), -1 !== n ? n : void 0;\n        }, a.prototype.contentsForInspection = function () {\n          return {\n            text: this.text.inspect(),\n            attributes: this.attributes\n          };\n        }, a.prototype.toString = function () {\n          return this.text.toString();\n        }, a.prototype.toJSON = function () {\n          return {\n            text: this.text,\n            attributes: this.attributes\n          };\n        }, a.prototype.getDirection = function () {\n          return this.text.getDirection();\n        }, a.prototype.isRTL = function () {\n          return this.text.isRTL();\n        }, a.prototype.getLength = function () {\n          return this.text.getLength();\n        }, a.prototype.canBeConsolidatedWith = function (t) {\n          return !this.hasAttributes() && !t.hasAttributes() && this.getDirection() === t.getDirection();\n        }, a.prototype.consolidateWith = function (t) {\n          var n, i;\n          return n = e.Text.textForStringWithAttributes(\"\\n\"), i = this.getTextWithoutBlockBreak().appendText(n), this.copyWithText(i.appendText(t.text));\n        }, a.prototype.splitAtOffset = function (t) {\n          var e, n;\n          return 0 === t ? (e = null, n = this) : t === this.getLength() ? (e = this, n = null) : (e = this.copyWithText(this.text.getTextAtRange([0, t])), n = this.copyWithText(this.text.getTextAtRange([t, this.getLength()]))), [e, n];\n        }, a.prototype.getBlockBreakPosition = function () {\n          return this.text.getLength() - 1;\n        }, a.prototype.getTextWithoutBlockBreak = function () {\n          return m(this.text) ? this.text.getTextAtRange([0, this.getBlockBreakPosition()]) : this.text.copy();\n        }, a.prototype.canBeGrouped = function (t) {\n          return this.attributes[t];\n        }, a.prototype.canBeGroupedWith = function (t, e) {\n          var n, r, s, a;\n          return s = t.getAttributes(), r = s[e], n = this.attributes[e], !(n !== r || i(n).group === !1 && (a = s[e + 1], u.call(o(), a) < 0) || this.getDirection() !== t.getDirection() && !t.isEmpty());\n        }, h = function (t) {\n          return t = y(t), t = l(t);\n        }, y = function (t) {\n          var n, i, o, r, s, a;\n          return r = !1, a = t.getPieces(), i = 2 <= a.length ? c.call(a, 0, n = a.length - 1) : (n = 0, []), o = a[n++], null == o ? t : (i = function () {\n            var t, e, n;\n            for (n = [], t = 0, e = i.length; e > t; t++) s = i[t], s.isBlockBreak() ? (r = !0, n.push(v(s))) : n.push(s);\n            return n;\n          }(), r ? new e.Text(c.call(i).concat([o])) : t);\n        }, p = e.Text.textForStringWithAttributes(\"\\n\", {\n          blockBreak: !0\n        }), l = function (t) {\n          return m(t) ? t : t.appendText(p);\n        }, m = function (t) {\n          var e, n;\n          return n = t.getLength(), 0 === n ? !1 : (e = t.getTextAtRange([n - 1, n]), e.isBlockBreak());\n        }, v = function (t) {\n          return t.copyWithoutAttribute(\"blockBreak\");\n        }, d = function (t) {\n          var e;\n          return e = i(t).listAttribute, null != e ? [e, t] : [t];\n        }, f = function (t) {\n          return t.slice(-1)[0];\n        }, g = function (t, e) {\n          var n;\n          return n = t.lastIndexOf(e), -1 === n ? t : r(t, n, 1);\n        }, a;\n      }(e.Object);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) r.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        r = {}.hasOwnProperty,\n        s = [].indexOf || function (t) {\n          for (var e = 0, n = this.length; n > e; e++) if (e in this && this[e] === t) return e;\n          return -1;\n        },\n        a = [].slice;\n      n = e.tagName, i = e.walkTree, t = e.nodeIsAttachmentElement, e.HTMLSanitizer = function (r) {\n        function u(t, e) {\n          var n;\n          n = null != e ? e : {}, this.allowedAttributes = n.allowedAttributes, this.forbiddenProtocols = n.forbiddenProtocols, this.forbiddenElements = n.forbiddenElements, null == this.allowedAttributes && (this.allowedAttributes = c), null == this.forbiddenProtocols && (this.forbiddenProtocols = h), null == this.forbiddenElements && (this.forbiddenElements = l), this.body = p(t);\n        }\n        var c, l, h, p;\n        return o(u, r), c = \"style href src width height class\".split(\" \"), h = \"javascript:\".split(\" \"), l = \"script iframe\".split(\" \"), u.sanitize = function (t, e) {\n          var n;\n          return n = new this(t, e), n.sanitize(), n;\n        }, u.prototype.sanitize = function () {\n          return this.sanitizeElements(), this.normalizeListElementNesting();\n        }, u.prototype.getHTML = function () {\n          return this.body.innerHTML;\n        }, u.prototype.getBody = function () {\n          return this.body;\n        }, u.prototype.sanitizeElements = function () {\n          var t, n, o, r, s;\n          for (s = i(this.body), r = []; s.nextNode();) switch (o = s.currentNode, o.nodeType) {\n            case Node.ELEMENT_NODE:\n              this.elementIsRemovable(o) ? r.push(o) : this.sanitizeElement(o);\n              break;\n            case Node.COMMENT_NODE:\n              r.push(o);\n          }\n          for (t = 0, n = r.length; n > t; t++) o = r[t], e.removeNode(o);\n          return this.body;\n        }, u.prototype.sanitizeElement = function (t) {\n          var e, n, i, o, r;\n          for (t.hasAttribute(\"href\") && (o = t.protocol, s.call(this.forbiddenProtocols, o) >= 0 && t.removeAttribute(\"href\")), r = a.call(t.attributes), e = 0, n = r.length; n > e; e++) i = r[e].name, s.call(this.allowedAttributes, i) >= 0 || 0 === i.indexOf(\"data-trix\") || t.removeAttribute(i);\n          return t;\n        }, u.prototype.normalizeListElementNesting = function () {\n          var t, e, i, o, r;\n          for (r = a.call(this.body.querySelectorAll(\"ul,ol\")), t = 0, e = r.length; e > t; t++) i = r[t], (o = i.previousElementSibling) && \"li\" === n(o) && o.appendChild(i);\n          return this.body;\n        }, u.prototype.elementIsRemovable = function (t) {\n          return (null != t ? t.nodeType : void 0) === Node.ELEMENT_NODE ? this.elementIsForbidden(t) || this.elementIsntSerializable(t) : void 0;\n        }, u.prototype.elementIsForbidden = function (t) {\n          var e;\n          return e = n(t), s.call(this.forbiddenElements, e) >= 0;\n        }, u.prototype.elementIsntSerializable = function (e) {\n          return \"false\" === e.getAttribute(\"data-trix-serialize\") && !t(e);\n        }, p = function (t) {\n          var e, n, i, o, r;\n          for (null == t && (t = \"\"), t = t.replace(/<\\/html[^>]*>[^]*$/i, \"</html>\"), e = document.implementation.createHTMLDocument(\"\"), e.documentElement.innerHTML = t, r = e.head.querySelectorAll(\"style\"), i = 0, o = r.length; o > i; i++) n = r[i], e.body.appendChild(n);\n          return e.body;\n        }, u;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r,\n        s,\n        a,\n        u,\n        c,\n        l,\n        h,\n        p = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) d.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        d = {}.hasOwnProperty,\n        f = [].indexOf || function (t) {\n          for (var e = 0, n = this.length; n > e; e++) if (e in this && this[e] === t) return e;\n          return -1;\n        };\n      t = e.arraysAreEqual, s = e.makeElement, l = e.tagName, r = e.getBlockTagNames, h = e.walkTree, o = e.findClosestElementFromNode, i = e.elementContainsNode, a = e.nodeIsAttachmentElement, u = e.normalizeSpaces, n = e.breakableWhitespacePattern, c = e.squishBreakableWhitespace, e.HTMLParser = function (d) {\n        function g(t, e) {\n          this.html = t, this.referenceElement = (null != e ? e : {}).referenceElement, this.blocks = [], this.blockElements = [], this.processedElements = [];\n        }\n        var m, v, y, b, A, C, x, w, E, S, R, k;\n        return p(g, d), g.parse = function (t, e) {\n          var n;\n          return n = new this(t, e), n.parse(), n;\n        }, g.prototype.getDocument = function () {\n          return e.Document.fromJSON(this.blocks);\n        }, g.prototype.parse = function () {\n          var t, n;\n          try {\n            for (this.createHiddenContainer(), t = e.HTMLSanitizer.sanitize(this.html).getHTML(), this.containerElement.innerHTML = t, n = h(this.containerElement, {\n              usingFilter: x\n            }); n.nextNode();) this.processNode(n.currentNode);\n            return this.translateBlockElementMarginsToNewlines();\n          } finally {\n            this.removeHiddenContainer();\n          }\n        }, g.prototype.createHiddenContainer = function () {\n          return this.referenceElement ? (this.containerElement = this.referenceElement.cloneNode(!1), this.containerElement.removeAttribute(\"id\"), this.containerElement.setAttribute(\"data-trix-internal\", \"\"), this.containerElement.style.display = \"none\", this.referenceElement.parentNode.insertBefore(this.containerElement, this.referenceElement.nextSibling)) : (this.containerElement = s({\n            tagName: \"div\",\n            style: {\n              display: \"none\"\n            }\n          }), document.body.appendChild(this.containerElement));\n        }, g.prototype.removeHiddenContainer = function () {\n          return e.removeNode(this.containerElement);\n        }, x = function (t) {\n          return \"style\" === l(t) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n        }, g.prototype.processNode = function (t) {\n          switch (t.nodeType) {\n            case Node.TEXT_NODE:\n              if (!this.isInsignificantTextNode(t)) return this.appendBlockForTextNode(t), this.processTextNode(t);\n              break;\n            case Node.ELEMENT_NODE:\n              return this.appendBlockForElement(t), this.processElement(t);\n          }\n        }, g.prototype.appendBlockForTextNode = function (e) {\n          var n, i, o;\n          return i = e.parentNode, i === this.currentBlockElement && this.isBlockElement(e.previousSibling) ? this.appendStringWithAttributes(\"\\n\") : i !== this.containerElement && !this.isBlockElement(i) || (n = this.getBlockAttributes(i), t(n, null != (o = this.currentBlock) ? o.attributes : void 0)) ? void 0 : (this.currentBlock = this.appendBlockForAttributesWithElement(n, i), this.currentBlockElement = i);\n        }, g.prototype.appendBlockForElement = function (e) {\n          var n, o, r, s;\n          if (r = this.isBlockElement(e), o = i(this.currentBlockElement, e), r && !this.isBlockElement(e.firstChild)) {\n            if ((!this.isInsignificantTextNode(e.firstChild) || !this.isBlockElement(e.firstElementChild)) && (n = this.getBlockAttributes(e), e.firstChild)) return o && t(n, this.currentBlock.attributes) ? this.appendStringWithAttributes(\"\\n\") : (this.currentBlock = this.appendBlockForAttributesWithElement(n, e), this.currentBlockElement = e);\n          } else if (this.currentBlockElement && !o && !r) return (s = this.findParentBlockElement(e)) ? this.appendBlockForElement(s) : (this.currentBlock = this.appendEmptyBlock(), this.currentBlockElement = null);\n        }, g.prototype.findParentBlockElement = function (t) {\n          var e;\n          for (e = t.parentElement; e && e !== this.containerElement;) {\n            if (this.isBlockElement(e) && f.call(this.blockElements, e) >= 0) return e;\n            e = e.parentElement;\n          }\n          return null;\n        }, g.prototype.processTextNode = function (t) {\n          var e, n;\n          return n = t.data, v(t.parentNode) || (n = c(n), R(null != (e = t.previousSibling) ? e.textContent : void 0) && (n = A(n))), this.appendStringWithAttributes(n, this.getTextAttributes(t.parentNode));\n        }, g.prototype.processElement = function (t) {\n          var e, n, i, o, r;\n          if (a(t)) return e = w(t, \"attachment\"), Object.keys(e).length && (o = this.getTextAttributes(t), this.appendAttachmentWithAttributes(e, o), t.innerHTML = \"\"), this.processedElements.push(t);\n          switch (l(t)) {\n            case \"br\":\n              return this.isExtraBR(t) || this.isBlockElement(t.nextSibling) || this.appendStringWithAttributes(\"\\n\", this.getTextAttributes(t)), this.processedElements.push(t);\n            case \"img\":\n              e = {\n                url: t.getAttribute(\"src\"),\n                contentType: \"image\"\n              }, i = b(t);\n              for (n in i) r = i[n], e[n] = r;\n              return this.appendAttachmentWithAttributes(e, this.getTextAttributes(t)), this.processedElements.push(t);\n            case \"tr\":\n              if (t.parentNode.firstChild !== t) return this.appendStringWithAttributes(\"\\n\");\n              break;\n            case \"td\":\n              if (t.parentNode.firstChild !== t) return this.appendStringWithAttributes(\" | \");\n          }\n        }, g.prototype.appendBlockForAttributesWithElement = function (t, e) {\n          var n;\n          return this.blockElements.push(e), n = m(t), this.blocks.push(n), n;\n        }, g.prototype.appendEmptyBlock = function () {\n          return this.appendBlockForAttributesWithElement([], null);\n        }, g.prototype.appendStringWithAttributes = function (t, e) {\n          return this.appendPiece(S(t, e));\n        }, g.prototype.appendAttachmentWithAttributes = function (t, e) {\n          return this.appendPiece(E(t, e));\n        }, g.prototype.appendPiece = function (t) {\n          return 0 === this.blocks.length && this.appendEmptyBlock(), this.blocks[this.blocks.length - 1].text.push(t);\n        }, g.prototype.appendStringToTextAtIndex = function (t, e) {\n          var n, i;\n          return i = this.blocks[e].text, n = i[i.length - 1], \"string\" === (null != n ? n.type : void 0) ? n.string += t : i.push(S(t));\n        }, g.prototype.prependStringToTextAtIndex = function (t, e) {\n          var n, i;\n          return i = this.blocks[e].text, n = i[0], \"string\" === (null != n ? n.type : void 0) ? n.string = t + n.string : i.unshift(S(t));\n        }, S = function (t, e) {\n          var n;\n          return null == e && (e = {}), n = \"string\", t = u(t), {\n            string: t,\n            attributes: e,\n            type: n\n          };\n        }, E = function (t, e) {\n          var n;\n          return null == e && (e = {}), n = \"attachment\", {\n            attachment: t,\n            attributes: e,\n            type: n\n          };\n        }, m = function (t) {\n          var e;\n          return null == t && (t = {}), e = [], {\n            text: e,\n            attributes: t\n          };\n        }, g.prototype.getTextAttributes = function (t) {\n          var n, i, r, s, u, c, l, h, p, d, f, g;\n          r = {}, p = e.config.textAttributes;\n          for (n in p) if (u = p[n], u.tagName && o(t, {\n            matchingSelector: u.tagName,\n            untilNode: this.containerElement\n          })) r[n] = !0;else if (u.parser) {\n            if (g = u.parser(t)) {\n              for (i = !1, d = this.findBlockElementAncestors(t), c = 0, h = d.length; h > c; c++) if (s = d[c], u.parser(s) === g) {\n                i = !0;\n                break;\n              }\n              i || (r[n] = g);\n            }\n          } else u.styleProperty && (g = t.style[u.styleProperty]) && (r[n] = g);\n          if (a(t)) {\n            f = w(t, \"attributes\");\n            for (l in f) g = f[l], r[l] = g;\n          }\n          return r;\n        }, g.prototype.getBlockAttributes = function (t) {\n          var n, i, o, r;\n          for (i = []; t && t !== this.containerElement;) {\n            r = e.config.blockAttributes;\n            for (n in r) o = r[n], o.parse !== !1 && l(t) === o.tagName && ((\"function\" == typeof o.test ? o.test(t) : void 0) || !o.test) && (i.push(n), o.listAttribute && i.push(o.listAttribute));\n            t = t.parentNode;\n          }\n          return i.reverse();\n        }, g.prototype.findBlockElementAncestors = function (t) {\n          var e, n;\n          for (e = []; t && t !== this.containerElement;) n = l(t), f.call(r(), n) >= 0 && e.push(t), t = t.parentNode;\n          return e;\n        }, w = function (t, e) {\n          try {\n            return JSON.parse(t.getAttribute(\"data-trix-\" + e));\n          } catch (n) {\n            return {};\n          }\n        }, b = function (t) {\n          var e, n, i;\n          return i = t.getAttribute(\"width\"), n = t.getAttribute(\"height\"), e = {}, i && (e.width = parseInt(i, 10)), n && (e.height = parseInt(n, 10)), e;\n        }, g.prototype.isBlockElement = function (t) {\n          var e;\n          if ((null != t ? t.nodeType : void 0) === Node.ELEMENT_NODE && !a(t) && !o(t, {\n            matchingSelector: \"td\",\n            untilNode: this.containerElement\n          })) return e = l(t), f.call(r(), e) >= 0 || \"block\" === window.getComputedStyle(t).display;\n        }, g.prototype.isInsignificantTextNode = function (t) {\n          var e, n, i;\n          if ((null != t ? t.nodeType : void 0) === Node.TEXT_NODE && k(t.data) && (n = t.parentNode, i = t.previousSibling, e = t.nextSibling, (!C(n.previousSibling) || this.isBlockElement(n.previousSibling)) && !v(n))) return !i || this.isBlockElement(i) || !e || this.isBlockElement(e);\n        }, g.prototype.isExtraBR = function (t) {\n          return \"br\" === l(t) && this.isBlockElement(t.parentNode) && t.parentNode.lastChild === t;\n        }, v = function (t) {\n          var e;\n          return e = window.getComputedStyle(t).whiteSpace, \"pre\" === e || \"pre-wrap\" === e || \"pre-line\" === e;\n        }, C = function (t) {\n          return t && !R(t.textContent);\n        }, g.prototype.translateBlockElementMarginsToNewlines = function () {\n          var t, e, n, i, o, r, s, a;\n          for (e = this.getMarginOfDefaultBlockElement(), s = this.blocks, a = [], i = n = 0, o = s.length; o > n; i = ++n) t = s[i], (r = this.getMarginOfBlockElementAtIndex(i)) && (r.top > 2 * e.top && this.prependStringToTextAtIndex(\"\\n\", i), a.push(r.bottom > 2 * e.bottom ? this.appendStringToTextAtIndex(\"\\n\", i) : void 0));\n          return a;\n        }, g.prototype.getMarginOfBlockElementAtIndex = function (t) {\n          var e, n;\n          return !(e = this.blockElements[t]) || !e.textContent || (n = l(e), f.call(r(), n) >= 0 || f.call(this.processedElements, e) >= 0) ? void 0 : y(e);\n        }, g.prototype.getMarginOfDefaultBlockElement = function () {\n          var t;\n          return t = s(e.config.blockAttributes[\"default\"].tagName), this.containerElement.appendChild(t), y(t);\n        }, y = function (t) {\n          var e;\n          return e = window.getComputedStyle(t), \"block\" === e.display ? {\n            top: parseInt(e.marginTop),\n            bottom: parseInt(e.marginBottom)\n          } : void 0;\n        }, A = function (t) {\n          return t.replace(RegExp(\"^\" + n.source + \"+\"), \"\");\n        }, k = function (t) {\n          return RegExp(\"^\" + n.source + \"*$\").test(t);\n        }, R = function (t) {\n          return /\\s$/.test(t);\n        }, g;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) s.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        s = {}.hasOwnProperty,\n        a = [].slice,\n        u = [].indexOf || function (t) {\n          for (var e = 0, n = this.length; n > e; e++) if (e in this && this[e] === t) return e;\n          return -1;\n        };\n      t = e.arraysAreEqual, i = e.normalizeRange, o = e.rangeIsCollapsed, n = e.getBlockConfig, e.Document = function (s) {\n        function c(t) {\n          null == t && (t = []), c.__super__.constructor.apply(this, arguments), 0 === t.length && (t = [new e.Block()]), this.blockList = e.SplittableList.box(t);\n        }\n        var l;\n        return r(c, s), c.fromJSON = function (t) {\n          var n, i;\n          return i = function () {\n            var i, o, r;\n            for (r = [], i = 0, o = t.length; o > i; i++) n = t[i], r.push(e.Block.fromJSON(n));\n            return r;\n          }(), new this(i);\n        }, c.fromHTML = function (t, n) {\n          return e.HTMLParser.parse(t, n).getDocument();\n        }, c.fromString = function (t, n) {\n          var i;\n          return i = e.Text.textForStringWithAttributes(t, n), new this([new e.Block(i)]);\n        }, c.prototype.isEmpty = function () {\n          var t;\n          return 1 === this.blockList.length && (t = this.getBlockAtIndex(0), t.isEmpty() && !t.hasAttributes());\n        }, c.prototype.copy = function (t) {\n          var e;\n          return null == t && (t = {}), e = t.consolidateBlocks ? this.blockList.consolidate().toArray() : this.blockList.toArray(), new this.constructor(e);\n        }, c.prototype.copyUsingObjectsFromDocument = function (t) {\n          var n;\n          return n = new e.ObjectMap(t.getObjects()), this.copyUsingObjectMap(n);\n        }, c.prototype.copyUsingObjectMap = function (t) {\n          var e, n, i;\n          return n = function () {\n            var n, o, r, s;\n            for (r = this.getBlocks(), s = [], n = 0, o = r.length; o > n; n++) e = r[n], s.push((i = t.find(e)) ? i : e.copyUsingObjectMap(t));\n            return s;\n          }.call(this), new this.constructor(n);\n        }, c.prototype.copyWithBaseBlockAttributes = function (t) {\n          var e, n, i;\n          return null == t && (t = []), i = function () {\n            var i, o, r, s;\n            for (r = this.getBlocks(), s = [], i = 0, o = r.length; o > i; i++) n = r[i], e = t.concat(n.getAttributes()), s.push(n.copyWithAttributes(e));\n            return s;\n          }.call(this), new this.constructor(i);\n        }, c.prototype.replaceBlock = function (t, e) {\n          var n;\n          return n = this.blockList.indexOf(t), -1 === n ? this : new this.constructor(this.blockList.replaceObjectAtIndex(e, n));\n        }, c.prototype.insertDocumentAtRange = function (t, e) {\n          var n, r, s, a, u, c, l;\n          return r = t.blockList, u = (e = i(e))[0], c = this.locationFromPosition(u), s = c.index, a = c.offset, l = this, n = this.getBlockAtPosition(u), o(e) && n.isEmpty() && !n.hasAttributes() ? l = new this.constructor(l.blockList.removeObjectAtIndex(s)) : n.getBlockBreakPosition() === a && u++, l = l.removeTextAtRange(e), new this.constructor(l.blockList.insertSplittableListAtPosition(r, u));\n        }, c.prototype.mergeDocumentAtRange = function (e, n) {\n          var o, r, s, a, u, c, l, h, p, d, f, g;\n          return f = (n = i(n))[0], d = this.locationFromPosition(f), r = this.getBlockAtIndex(d.index).getAttributes(), o = e.getBaseBlockAttributes(), g = r.slice(-o.length), t(o, g) ? (l = r.slice(0, -o.length), c = e.copyWithBaseBlockAttributes(l)) : c = e.copy({\n            consolidateBlocks: !0\n          }).copyWithBaseBlockAttributes(r), s = c.getBlockCount(), a = c.getBlockAtIndex(0), t(r, a.getAttributes()) ? (u = a.getTextWithoutBlockBreak(), p = this.insertTextAtRange(u, n), s > 1 && (c = new this.constructor(c.getBlocks().slice(1)), h = f + u.getLength(), p = p.insertDocumentAtRange(c, h))) : p = this.insertDocumentAtRange(c, n), p;\n        }, c.prototype.insertTextAtRange = function (t, e) {\n          var n, o, r, s, a;\n          return a = (e = i(e))[0], s = this.locationFromPosition(a), o = s.index, r = s.offset, n = this.removeTextAtRange(e), new this.constructor(n.blockList.editObjectAtIndex(o, function (e) {\n            return e.copyWithText(e.text.insertTextAtPosition(t, r));\n          }));\n        }, c.prototype.removeTextAtRange = function (t) {\n          var e, n, r, s, a, u, c, l, h, p, d, f, g, m, v, y, b, A, C, x, w;\n          return p = t = i(t), l = p[0], A = p[1], o(t) ? this : (d = this.locationRangeFromRange(t), u = d[0], y = d[1], a = u.index, c = u.offset, s = this.getBlockAtIndex(a), v = y.index, b = y.offset, m = this.getBlockAtIndex(v), f = A - l === 1 && s.getBlockBreakPosition() === c && m.getBlockBreakPosition() !== b && \"\\n\" === m.text.getStringAtPosition(b), f ? r = this.blockList.editObjectAtIndex(v, function (t) {\n            return t.copyWithText(t.text.removeTextAtRange([b, b + 1]));\n          }) : (h = s.text.getTextAtRange([0, c]), C = m.text.getTextAtRange([b, m.getLength()]), x = h.appendText(C), g = a !== v && 0 === c, w = g && s.getAttributeLevel() >= m.getAttributeLevel(), n = w ? m.copyWithText(x) : s.copyWithText(x), e = v + 1 - a, r = this.blockList.splice(a, e, n)), new this.constructor(r));\n        }, c.prototype.moveTextFromRangeToPosition = function (t, e) {\n          var n, o, r, s, u, c, l, h, p, d;\n          return c = t = i(t), p = c[0], r = c[1], e >= p && r >= e ? this : (o = this.getDocumentAtRange(t), h = this.removeTextAtRange(t), u = e > p, u && (e -= o.getLength()), l = o.getBlocks(), s = l[0], n = 2 <= l.length ? a.call(l, 1) : [], 0 === n.length ? (d = s.getTextWithoutBlockBreak(), u && (e += 1)) : d = s.text, h = h.insertTextAtRange(d, e), 0 === n.length ? h : (o = new this.constructor(n), e += d.getLength(), h.insertDocumentAtRange(o, e)));\n        }, c.prototype.addAttributeAtRange = function (t, e, i) {\n          var o;\n          return o = this.blockList, this.eachBlockAtRange(i, function (i, r, s) {\n            return o = o.editObjectAtIndex(s, function () {\n              return n(t) ? i.addAttribute(t, e) : r[0] === r[1] ? i : i.copyWithText(i.text.addAttributeAtRange(t, e, r));\n            });\n          }), new this.constructor(o);\n        }, c.prototype.addAttribute = function (t, e) {\n          var n;\n          return n = this.blockList, this.eachBlock(function (i, o) {\n            return n = n.editObjectAtIndex(o, function () {\n              return i.addAttribute(t, e);\n            });\n          }), new this.constructor(n);\n        }, c.prototype.removeAttributeAtRange = function (t, e) {\n          var i;\n          return i = this.blockList, this.eachBlockAtRange(e, function (e, o, r) {\n            return n(t) ? i = i.editObjectAtIndex(r, function () {\n              return e.removeAttribute(t);\n            }) : o[0] !== o[1] ? i = i.editObjectAtIndex(r, function () {\n              return e.copyWithText(e.text.removeAttributeAtRange(t, o));\n            }) : void 0;\n          }), new this.constructor(i);\n        }, c.prototype.updateAttributesForAttachment = function (t, e) {\n          var n, i, o, r;\n          return o = (i = this.getRangeOfAttachment(e))[0], n = this.locationFromPosition(o).index, r = this.getTextAtIndex(n), new this.constructor(this.blockList.editObjectAtIndex(n, function (n) {\n            return n.copyWithText(r.updateAttributesForAttachment(t, e));\n          }));\n        }, c.prototype.removeAttributeForAttachment = function (t, e) {\n          var n;\n          return n = this.getRangeOfAttachment(e), this.removeAttributeAtRange(t, n);\n        }, c.prototype.insertBlockBreakAtRange = function (t) {\n          var n, o, r, s;\n          return s = (t = i(t))[0], r = this.locationFromPosition(s).offset, o = this.removeTextAtRange(t), 0 === r && (n = [new e.Block()]), new this.constructor(o.blockList.insertSplittableListAtPosition(new e.SplittableList(n), s));\n        }, c.prototype.applyBlockAttributeAtRange = function (t, e, i) {\n          var o, r, s, a;\n          return s = this.expandRangeToLineBreaksAndSplitBlocks(i), r = s.document, i = s.range, o = n(t), o.listAttribute ? (r = r.removeLastListAttributeAtRange(i, {\n            exceptAttributeName: t\n          }), a = r.convertLineBreaksToBlockBreaksInRange(i), r = a.document, i = a.range) : r = o.exclusive ? r.removeBlockAttributesAtRange(i) : o.terminal ? r.removeLastTerminalAttributeAtRange(i) : r.consolidateBlocksAtRange(i), r.addAttributeAtRange(t, e, i);\n        }, c.prototype.removeLastListAttributeAtRange = function (t, e) {\n          var i;\n          return null == e && (e = {}), i = this.blockList, this.eachBlockAtRange(t, function (t, o, r) {\n            var s;\n            if ((s = t.getLastAttribute()) && n(s).listAttribute && s !== e.exceptAttributeName) return i = i.editObjectAtIndex(r, function () {\n              return t.removeAttribute(s);\n            });\n          }), new this.constructor(i);\n        }, c.prototype.removeLastTerminalAttributeAtRange = function (t) {\n          var e;\n          return e = this.blockList, this.eachBlockAtRange(t, function (t, i, o) {\n            var r;\n            if ((r = t.getLastAttribute()) && n(r).terminal) return e = e.editObjectAtIndex(o, function () {\n              return t.removeAttribute(r);\n            });\n          }), new this.constructor(e);\n        }, c.prototype.removeBlockAttributesAtRange = function (t) {\n          var e;\n          return e = this.blockList, this.eachBlockAtRange(t, function (t, n, i) {\n            return t.hasAttributes() ? e = e.editObjectAtIndex(i, function () {\n              return t.copyWithoutAttributes();\n            }) : void 0;\n          }), new this.constructor(e);\n        }, c.prototype.expandRangeToLineBreaksAndSplitBlocks = function (t) {\n          var e, n, o, r, s, a, u, c, l;\n          return a = t = i(t), l = a[0], r = a[1], c = this.locationFromPosition(l), o = this.locationFromPosition(r), e = this, u = e.getBlockAtIndex(c.index), null != (c.offset = u.findLineBreakInDirectionFromPosition(\"backward\", c.offset)) && (s = e.positionFromLocation(c), e = e.insertBlockBreakAtRange([s, s + 1]), o.index += 1, o.offset -= e.getBlockAtIndex(c.index).getLength(), c.index += 1), c.offset = 0, 0 === o.offset && o.index > c.index ? (o.index -= 1, o.offset = e.getBlockAtIndex(o.index).getBlockBreakPosition()) : (n = e.getBlockAtIndex(o.index), \"\\n\" === n.text.getStringAtRange([o.offset - 1, o.offset]) ? o.offset -= 1 : o.offset = n.findLineBreakInDirectionFromPosition(\"forward\", o.offset), o.offset !== n.getBlockBreakPosition() && (s = e.positionFromLocation(o), e = e.insertBlockBreakAtRange([s, s + 1]))), l = e.positionFromLocation(c), r = e.positionFromLocation(o), t = i([l, r]), {\n            document: e,\n            range: t\n          };\n        }, c.prototype.convertLineBreaksToBlockBreaksInRange = function (t) {\n          var e, n, o;\n          return n = (t = i(t))[0], o = this.getStringAtRange(t).slice(0, -1), e = this, o.replace(/.*?\\n/g, function (t) {\n            return n += t.length, e = e.insertBlockBreakAtRange([n - 1, n]);\n          }), {\n            document: e,\n            range: t\n          };\n        }, c.prototype.consolidateBlocksAtRange = function (t) {\n          var e, n, o, r, s;\n          return o = t = i(t), s = o[0], n = o[1], r = this.locationFromPosition(s).index, e = this.locationFromPosition(n).index, new this.constructor(this.blockList.consolidateFromIndexToIndex(r, e));\n        }, c.prototype.getDocumentAtRange = function (t) {\n          var e;\n          return t = i(t), e = this.blockList.getSplittableListInRange(t).toArray(), new this.constructor(e);\n        }, c.prototype.getStringAtRange = function (t) {\n          var e, n, o;\n          return o = t = i(t), n = o[o.length - 1], n !== this.getLength() && (e = -1), this.getDocumentAtRange(t).toString().slice(0, e);\n        }, c.prototype.getBlockAtIndex = function (t) {\n          return this.blockList.getObjectAtIndex(t);\n        }, c.prototype.getBlockAtPosition = function (t) {\n          var e;\n          return e = this.locationFromPosition(t).index, this.getBlockAtIndex(e);\n        }, c.prototype.getTextAtIndex = function (t) {\n          var e;\n          return null != (e = this.getBlockAtIndex(t)) ? e.text : void 0;\n        }, c.prototype.getTextAtPosition = function (t) {\n          var e;\n          return e = this.locationFromPosition(t).index, this.getTextAtIndex(e);\n        }, c.prototype.getPieceAtPosition = function (t) {\n          var e, n, i;\n          return i = this.locationFromPosition(t), e = i.index, n = i.offset, this.getTextAtIndex(e).getPieceAtPosition(n);\n        }, c.prototype.getCharacterAtPosition = function (t) {\n          var e, n, i;\n          return i = this.locationFromPosition(t), e = i.index, n = i.offset, this.getTextAtIndex(e).getStringAtRange([n, n + 1]);\n        }, c.prototype.getLength = function () {\n          return this.blockList.getEndPosition();\n        }, c.prototype.getBlocks = function () {\n          return this.blockList.toArray();\n        }, c.prototype.getBlockCount = function () {\n          return this.blockList.length;\n        }, c.prototype.getEditCount = function () {\n          return this.editCount;\n        }, c.prototype.eachBlock = function (t) {\n          return this.blockList.eachObject(t);\n        }, c.prototype.eachBlockAtRange = function (t, e) {\n          var n, o, r, s, a, u, c, l, h, p, d, f;\n          if (u = t = i(t), d = u[0], r = u[1], p = this.locationFromPosition(d), o = this.locationFromPosition(r), p.index === o.index) return n = this.getBlockAtIndex(p.index), f = [p.offset, o.offset], e(n, f, p.index);\n          for (h = [], a = s = c = p.index, l = o.index; l >= c ? l >= s : s >= l; a = l >= c ? ++s : --s) (n = this.getBlockAtIndex(a)) ? (f = function () {\n            switch (a) {\n              case p.index:\n                return [p.offset, n.text.getLength()];\n              case o.index:\n                return [0, o.offset];\n              default:\n                return [0, n.text.getLength()];\n            }\n          }(), h.push(e(n, f, a))) : h.push(void 0);\n          return h;\n        }, c.prototype.getCommonAttributesAtRange = function (t) {\n          var n, r, s;\n          return r = (t = i(t))[0], o(t) ? this.getCommonAttributesAtPosition(r) : (s = [], n = [], this.eachBlockAtRange(t, function (t, e) {\n            return e[0] !== e[1] ? (s.push(t.text.getCommonAttributesAtRange(e)), n.push(l(t))) : void 0;\n          }), e.Hash.fromCommonAttributesOfObjects(s).merge(e.Hash.fromCommonAttributesOfObjects(n)).toObject());\n        }, c.prototype.getCommonAttributesAtPosition = function (t) {\n          var n, i, o, r, s, a, c, h, p, d;\n          if (p = this.locationFromPosition(t), s = p.index, h = p.offset, o = this.getBlockAtIndex(s), !o) return {};\n          r = l(o), n = o.text.getAttributesAtPosition(h), i = o.text.getAttributesAtPosition(h - 1), a = function () {\n            var t, n;\n            t = e.config.textAttributes, n = [];\n            for (c in t) d = t[c], d.inheritable && n.push(c);\n            return n;\n          }();\n          for (c in i) d = i[c], (d === n[c] || u.call(a, c) >= 0) && (r[c] = d);\n          return r;\n        }, c.prototype.getRangeOfCommonAttributeAtPosition = function (t, e) {\n          var n, o, r, s, a, u, c, l, h;\n          return a = this.locationFromPosition(e), r = a.index, s = a.offset, h = this.getTextAtIndex(r), u = h.getExpandedRangeForAttributeAtOffset(t, s), l = u[0], o = u[1], c = this.positionFromLocation({\n            index: r,\n            offset: l\n          }), n = this.positionFromLocation({\n            index: r,\n            offset: o\n          }), i([c, n]);\n        }, c.prototype.getBaseBlockAttributes = function () {\n          var t, e, n, i, o, r, s;\n          for (t = this.getBlockAtIndex(0).getAttributes(), n = i = 1, s = this.getBlockCount(); s >= 1 ? s > i : i > s; n = s >= 1 ? ++i : --i) e = this.getBlockAtIndex(n).getAttributes(), r = Math.min(t.length, e.length), t = function () {\n            var n, i, s;\n            for (s = [], o = n = 0, i = r; (i >= 0 ? i > n : n > i) && e[o] === t[o]; o = i >= 0 ? ++n : --n) s.push(e[o]);\n            return s;\n          }();\n          return t;\n        }, l = function (t) {\n          var e, n;\n          return n = {}, (e = t.getLastAttribute()) && (n[e] = !0), n;\n        }, c.prototype.getAttachmentById = function (t) {\n          var e, n, i, o;\n          for (o = this.getAttachments(), n = 0, i = o.length; i > n; n++) if (e = o[n], e.id === t) return e;\n        }, c.prototype.getAttachmentPieces = function () {\n          var t;\n          return t = [], this.blockList.eachObject(function (e) {\n            var n;\n            return n = e.text, t = t.concat(n.getAttachmentPieces());\n          }), t;\n        }, c.prototype.getAttachments = function () {\n          var t, e, n, i, o;\n          for (i = this.getAttachmentPieces(), o = [], t = 0, e = i.length; e > t; t++) n = i[t], o.push(n.attachment);\n          return o;\n        }, c.prototype.getRangeOfAttachment = function (t) {\n          var e, n, o, r, s, a, u;\n          for (r = 0, s = this.blockList.toArray(), n = e = 0, o = s.length; o > e; n = ++e) {\n            if (a = s[n].text, u = a.getRangeOfAttachment(t)) return i([r + u[0], r + u[1]]);\n            r += a.getLength();\n          }\n        }, c.prototype.getLocationRangeOfAttachment = function (t) {\n          var e;\n          return e = this.getRangeOfAttachment(t), this.locationRangeFromRange(e);\n        }, c.prototype.getAttachmentPieceForAttachment = function (t) {\n          var e, n, i, o;\n          for (o = this.getAttachmentPieces(), e = 0, n = o.length; n > e; e++) if (i = o[e], i.attachment === t) return i;\n        }, c.prototype.findRangesForBlockAttribute = function (t) {\n          var e, n, i, o, r, s, a;\n          for (r = 0, s = [], a = this.getBlocks(), n = 0, i = a.length; i > n; n++) e = a[n], o = e.getLength(), e.hasAttribute(t) && s.push([r, r + o]), r += o;\n          return s;\n        }, c.prototype.findRangesForTextAttribute = function (t, e) {\n          var n, i, o, r, s, a, u, c, l, h;\n          for (h = (null != e ? e : {}).withValue, a = 0, u = [], c = [], r = function (e) {\n            return null != h ? e.getAttribute(t) === h : e.hasAttribute(t);\n          }, l = this.getPieces(), n = 0, i = l.length; i > n; n++) s = l[n], o = s.getLength(), r(s) && (u[1] === a ? u[1] = a + o : c.push(u = [a, a + o])), a += o;\n          return c;\n        }, c.prototype.locationFromPosition = function (t) {\n          var e, n;\n          return n = this.blockList.findIndexAndOffsetAtPosition(Math.max(0, t)), null != n.index ? n : (e = this.getBlocks(), {\n            index: e.length - 1,\n            offset: e[e.length - 1].getLength()\n          });\n        }, c.prototype.positionFromLocation = function (t) {\n          return this.blockList.findPositionAtIndexAndOffset(t.index, t.offset);\n        }, c.prototype.locationRangeFromPosition = function (t) {\n          return i(this.locationFromPosition(t));\n        }, c.prototype.locationRangeFromRange = function (t) {\n          var e, n, o, r;\n          if (t = i(t)) return r = t[0], n = t[1], o = this.locationFromPosition(r), e = this.locationFromPosition(n), i([o, e]);\n        }, c.prototype.rangeFromLocationRange = function (t) {\n          var e, n;\n          return t = i(t), e = this.positionFromLocation(t[0]), o(t) || (n = this.positionFromLocation(t[1])), i([e, n]);\n        }, c.prototype.isEqualTo = function (t) {\n          return this.blockList.isEqualTo(null != t ? t.blockList : void 0);\n        }, c.prototype.getTexts = function () {\n          var t, e, n, i, o;\n          for (i = this.getBlocks(), o = [], e = 0, n = i.length; n > e; e++) t = i[e], o.push(t.text);\n          return o;\n        }, c.prototype.getPieces = function () {\n          var t, e, n, i, o;\n          for (n = [], i = this.getTexts(), t = 0, e = i.length; e > t; t++) o = i[t], n.push.apply(n, o.getPieces());\n          return n;\n        }, c.prototype.getObjects = function () {\n          return this.getBlocks().concat(this.getTexts()).concat(this.getPieces());\n        }, c.prototype.toSerializableDocument = function () {\n          var t;\n          return t = [], this.blockList.eachObject(function (e) {\n            return t.push(e.copyWithText(e.text.toSerializableText()));\n          }), new this.constructor(t);\n        }, c.prototype.toString = function () {\n          return this.blockList.toString();\n        }, c.prototype.toJSON = function () {\n          return this.blockList.toJSON();\n        }, c.prototype.toConsole = function () {\n          var t;\n          return JSON.stringify(function () {\n            var e, n, i, o;\n            for (i = this.blockList.toArray(), o = [], e = 0, n = i.length; n > e; e++) t = i[e], o.push(JSON.parse(t.text.toConsole()));\n            return o;\n          }.call(this));\n        }, c;\n      }(e.Object);\n    }.call(this), function () {\n      e.LineBreakInsertion = function () {\n        function t(t) {\n          var e;\n          this.composition = t, this.document = this.composition.document, e = this.composition.getSelectedRange(), this.startPosition = e[0], this.endPosition = e[1], this.startLocation = this.document.locationFromPosition(this.startPosition), this.endLocation = this.document.locationFromPosition(this.endPosition), this.block = this.document.getBlockAtIndex(this.endLocation.index), this.breaksOnReturn = this.block.breaksOnReturn(), this.previousCharacter = this.block.text.getStringAtPosition(this.endLocation.offset - 1), this.nextCharacter = this.block.text.getStringAtPosition(this.endLocation.offset);\n        }\n        return t.prototype.shouldInsertBlockBreak = function () {\n          return this.block.hasAttributes() && this.block.isListItem() && !this.block.isEmpty() ? 0 !== this.startLocation.offset : this.breaksOnReturn && \"\\n\" !== this.nextCharacter;\n        }, t.prototype.shouldBreakFormattedBlock = function () {\n          return this.block.hasAttributes() && !this.block.isListItem() && (this.breaksOnReturn && \"\\n\" === this.nextCharacter || \"\\n\" === this.previousCharacter);\n        }, t.prototype.shouldDecreaseListLevel = function () {\n          return this.block.hasAttributes() && this.block.isListItem() && this.block.isEmpty();\n        }, t.prototype.shouldPrependListItem = function () {\n          return this.block.isListItem() && 0 === this.startLocation.offset && !this.block.isEmpty();\n        }, t.prototype.shouldRemoveLastBlockAttribute = function () {\n          return this.block.hasAttributes() && !this.block.isListItem() && this.block.isEmpty();\n        }, t;\n      }();\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r,\n        s,\n        a,\n        u,\n        c,\n        l,\n        h = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) p.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        p = {}.hasOwnProperty;\n      s = e.normalizeRange, c = e.rangesAreEqual, u = e.rangeIsCollapsed, a = e.objectsAreEqual, t = e.arrayStartsWith, l = e.summarizeArrayChange, i = e.getAllAttributeNames, o = e.getBlockConfig, r = e.getTextConfig, n = e.extend, e.Composition = function (p) {\n        function d() {\n          this.document = new e.Document(), this.attachments = [], this.currentAttributes = {}, this.revision = 0;\n        }\n        var f;\n        return h(d, p), d.prototype.setDocument = function (t) {\n          var e;\n          return t.isEqualTo(this.document) ? void 0 : (this.document = t, this.refreshAttachments(), this.revision++, null != (e = this.delegate) && \"function\" == typeof e.compositionDidChangeDocument ? e.compositionDidChangeDocument(t) : void 0);\n        }, d.prototype.getSnapshot = function () {\n          return {\n            document: this.document,\n            selectedRange: this.getSelectedRange()\n          };\n        }, d.prototype.loadSnapshot = function (t) {\n          var n, i, o, r;\n          return n = t.document, r = t.selectedRange, null != (i = this.delegate) && \"function\" == typeof i.compositionWillLoadSnapshot && i.compositionWillLoadSnapshot(), this.setDocument(null != n ? n : new e.Document()), this.setSelection(null != r ? r : [0, 0]), null != (o = this.delegate) && \"function\" == typeof o.compositionDidLoadSnapshot ? o.compositionDidLoadSnapshot() : void 0;\n        }, d.prototype.insertText = function (t, e) {\n          var n, i, o, r;\n          return r = (null != e ? e : {\n            updatePosition: !0\n          }).updatePosition, i = this.getSelectedRange(), this.setDocument(this.document.insertTextAtRange(t, i)), o = i[0], n = o + t.getLength(), r && this.setSelection(n), this.notifyDelegateOfInsertionAtRange([o, n]);\n        }, d.prototype.insertBlock = function (t) {\n          var n;\n          return null == t && (t = new e.Block()), n = new e.Document([t]), this.insertDocument(n);\n        }, d.prototype.insertDocument = function (t) {\n          var n, i, o;\n          return null == t && (t = new e.Document()), i = this.getSelectedRange(), this.setDocument(this.document.insertDocumentAtRange(t, i)), o = i[0], n = o + t.getLength(), this.setSelection(n), this.notifyDelegateOfInsertionAtRange([o, n]);\n        }, d.prototype.insertString = function (t, n) {\n          var i, o;\n          return i = this.getCurrentTextAttributes(), o = e.Text.textForStringWithAttributes(t, i), this.insertText(o, n);\n        }, d.prototype.insertBlockBreak = function () {\n          var t, e, n;\n          return e = this.getSelectedRange(), this.setDocument(this.document.insertBlockBreakAtRange(e)), n = e[0], t = n + 1, this.setSelection(t), this.notifyDelegateOfInsertionAtRange([n, t]);\n        }, d.prototype.insertLineBreak = function () {\n          var t, n;\n          return n = new e.LineBreakInsertion(this), n.shouldDecreaseListLevel() ? (this.decreaseListLevel(), this.setSelection(n.startPosition)) : n.shouldPrependListItem() ? (t = new e.Document([n.block.copyWithoutText()]), this.insertDocument(t)) : n.shouldInsertBlockBreak() ? this.insertBlockBreak() : n.shouldRemoveLastBlockAttribute() ? this.removeLastBlockAttribute() : n.shouldBreakFormattedBlock() ? this.breakFormattedBlock(n) : this.insertString(\"\\n\");\n        }, d.prototype.insertHTML = function (t) {\n          var n, i, o, r;\n          return n = e.Document.fromHTML(t), o = this.getSelectedRange(), this.setDocument(this.document.mergeDocumentAtRange(n, o)), r = o[0], i = r + n.getLength() - 1, this.setSelection(i), this.notifyDelegateOfInsertionAtRange([r, i]);\n        }, d.prototype.replaceHTML = function (t) {\n          var n, i, o;\n          return n = e.Document.fromHTML(t).copyUsingObjectsFromDocument(this.document), i = this.getLocationRange({\n            strict: !1\n          }), o = this.document.rangeFromLocationRange(i), this.setDocument(n), this.setSelection(o);\n        }, d.prototype.insertFile = function (t) {\n          return this.insertFiles([t]);\n        }, d.prototype.insertFiles = function (t) {\n          var n, i, o, r, s, a;\n          for (i = [], r = 0, s = t.length; s > r; r++) o = t[r], (null != (a = this.delegate) ? a.compositionShouldAcceptFile(o) : void 0) && (n = e.Attachment.attachmentForFile(o), i.push(n));\n          return this.insertAttachments(i);\n        }, d.prototype.insertAttachment = function (t) {\n          return this.insertAttachments([t]);\n        }, d.prototype.insertAttachments = function (t) {\n          var n, i, o, r, s, a, u, c, l;\n          for (c = new e.Text(), r = 0, s = t.length; s > r; r++) n = t[r], l = n.getType(), a = null != (u = e.config.attachments[l]) ? u.presentation : void 0, o = this.getCurrentTextAttributes(), a && (o.presentation = a), i = e.Text.textForAttachmentWithAttributes(n, o), c = c.appendText(i);\n          return this.insertText(c);\n        }, d.prototype.shouldManageDeletingInDirection = function (t) {\n          var e;\n          if (e = this.getLocationRange(), u(e)) {\n            if (\"backward\" === t && 0 === e[0].offset) return !0;\n            if (this.shouldManageMovingCursorInDirection(t)) return !0;\n          } else if (e[0].index !== e[1].index) return !0;\n          return !1;\n        }, d.prototype.deleteInDirection = function (t, e) {\n          var n, i, o, r, s, a, c, l;\n          return r = (null != e ? e : {}).length, s = this.getLocationRange(), a = this.getSelectedRange(), c = u(a), c ? o = \"backward\" === t && 0 === s[0].offset : l = s[0].index !== s[1].index, o && this.canDecreaseBlockAttributeLevel() && (i = this.getBlock(), i.isListItem() ? this.decreaseListLevel() : this.decreaseBlockAttributeLevel(), this.setSelection(a[0]), i.isEmpty()) ? !1 : (c && (a = this.getExpandedRangeInDirection(t, {\n            length: r\n          }), \"backward\" === t && (n = this.getAttachmentAtRange(a))), n ? (this.editAttachment(n), !1) : (this.setDocument(this.document.removeTextAtRange(a)), this.setSelection(a[0]), o || l ? !1 : void 0));\n        }, d.prototype.moveTextFromRange = function (t) {\n          var e;\n          return e = this.getSelectedRange()[0], this.setDocument(this.document.moveTextFromRangeToPosition(t, e)), this.setSelection(e);\n        }, d.prototype.removeAttachment = function (t) {\n          var e;\n          return (e = this.document.getRangeOfAttachment(t)) ? (this.stopEditingAttachment(), this.setDocument(this.document.removeTextAtRange(e)), this.setSelection(e[0])) : void 0;\n        }, d.prototype.removeLastBlockAttribute = function () {\n          var t, e, n, i;\n          return n = this.getSelectedRange(), i = n[0], e = n[1], t = this.document.getBlockAtPosition(e), this.removeCurrentAttribute(t.getLastAttribute()), this.setSelection(i);\n        }, f = \" \", d.prototype.insertPlaceholder = function () {\n          return this.placeholderPosition = this.getPosition(), this.insertString(f);\n        }, d.prototype.selectPlaceholder = function () {\n          return null != this.placeholderPosition ? (this.setSelectedRange([this.placeholderPosition, this.placeholderPosition + f.length]), this.getSelectedRange()) : void 0;\n        }, d.prototype.forgetPlaceholder = function () {\n          return this.placeholderPosition = null;\n        }, d.prototype.hasCurrentAttribute = function (t) {\n          var e;\n          return e = this.currentAttributes[t], null != e && e !== !1;\n        }, d.prototype.toggleCurrentAttribute = function (t) {\n          var e;\n          return (e = !this.currentAttributes[t]) ? this.setCurrentAttribute(t, e) : this.removeCurrentAttribute(t);\n        }, d.prototype.canSetCurrentAttribute = function (t) {\n          return o(t) ? this.canSetCurrentBlockAttribute(t) : this.canSetCurrentTextAttribute(t);\n        }, d.prototype.canSetCurrentTextAttribute = function () {\n          var t, e, n, i, o;\n          if (e = this.getSelectedDocument()) {\n            for (o = e.getAttachments(), n = 0, i = o.length; i > n; n++) if (t = o[n], !t.hasContent()) return !1;\n            return !0;\n          }\n        }, d.prototype.canSetCurrentBlockAttribute = function () {\n          var t;\n          if (t = this.getBlock()) return !t.isTerminalBlock();\n        }, d.prototype.setCurrentAttribute = function (t, e) {\n          return o(t) ? this.setBlockAttribute(t, e) : (this.setTextAttribute(t, e), this.currentAttributes[t] = e, this.notifyDelegateOfCurrentAttributesChange());\n        }, d.prototype.setTextAttribute = function (t, n) {\n          var i, o, r, s;\n          if (o = this.getSelectedRange()) return r = o[0], i = o[1], r !== i ? this.setDocument(this.document.addAttributeAtRange(t, n, o)) : \"href\" === t ? (s = e.Text.textForStringWithAttributes(n, {\n            href: n\n          }), this.insertText(s)) : void 0;\n        }, d.prototype.setBlockAttribute = function (t, e) {\n          var n, i;\n          if (i = this.getSelectedRange()) return this.canSetCurrentAttribute(t) ? (n = this.getBlock(), this.setDocument(this.document.applyBlockAttributeAtRange(t, e, i)), this.setSelection(i)) : void 0;\n        }, d.prototype.removeCurrentAttribute = function (t) {\n          return o(t) ? (this.removeBlockAttribute(t), this.updateCurrentAttributes()) : (this.removeTextAttribute(t), delete this.currentAttributes[t], this.notifyDelegateOfCurrentAttributesChange());\n        }, d.prototype.removeTextAttribute = function (t) {\n          var e;\n          if (e = this.getSelectedRange()) return this.setDocument(this.document.removeAttributeAtRange(t, e));\n        }, d.prototype.removeBlockAttribute = function (t) {\n          var e;\n          if (e = this.getSelectedRange()) return this.setDocument(this.document.removeAttributeAtRange(t, e));\n        }, d.prototype.canDecreaseNestingLevel = function () {\n          var t;\n          return (null != (t = this.getBlock()) ? t.getNestingLevel() : void 0) > 0;\n        }, d.prototype.canIncreaseNestingLevel = function () {\n          var e, n, i;\n          if (e = this.getBlock()) return (null != (i = o(e.getLastNestableAttribute())) ? i.listAttribute : 0) ? (n = this.getPreviousBlock()) ? t(n.getListItemAttributes(), e.getListItemAttributes()) : void 0 : e.getNestingLevel() > 0;\n        }, d.prototype.decreaseNestingLevel = function () {\n          var t;\n          if (t = this.getBlock()) return this.setDocument(this.document.replaceBlock(t, t.decreaseNestingLevel()));\n        }, d.prototype.increaseNestingLevel = function () {\n          var t;\n          if (t = this.getBlock()) return this.setDocument(this.document.replaceBlock(t, t.increaseNestingLevel()));\n        }, d.prototype.canDecreaseBlockAttributeLevel = function () {\n          var t;\n          return (null != (t = this.getBlock()) ? t.getAttributeLevel() : void 0) > 0;\n        }, d.prototype.decreaseBlockAttributeLevel = function () {\n          var t, e;\n          return (t = null != (e = this.getBlock()) ? e.getLastAttribute() : void 0) ? this.removeCurrentAttribute(t) : void 0;\n        }, d.prototype.decreaseListLevel = function () {\n          var t, e, n, i, o, r;\n          for (r = this.getSelectedRange()[0], o = this.document.locationFromPosition(r).index, n = o, t = this.getBlock().getAttributeLevel(); (e = this.document.getBlockAtIndex(n + 1)) && e.isListItem() && e.getAttributeLevel() > t;) n++;\n          return r = this.document.positionFromLocation({\n            index: o,\n            offset: 0\n          }), i = this.document.positionFromLocation({\n            index: n,\n            offset: 0\n          }), this.setDocument(this.document.removeLastListAttributeAtRange([r, i]));\n        }, d.prototype.updateCurrentAttributes = function () {\n          var t, e, n, o, r, s;\n          if (s = this.getSelectedRange({\n            ignoreLock: !0\n          })) {\n            for (e = this.document.getCommonAttributesAtRange(s), r = i(), n = 0, o = r.length; o > n; n++) t = r[n], e[t] || this.canSetCurrentAttribute(t) || (e[t] = !1);\n            if (!a(e, this.currentAttributes)) return this.currentAttributes = e, this.notifyDelegateOfCurrentAttributesChange();\n          }\n        }, d.prototype.getCurrentAttributes = function () {\n          return n.call({}, this.currentAttributes);\n        }, d.prototype.getCurrentTextAttributes = function () {\n          var t, e, n, i;\n          t = {}, n = this.currentAttributes;\n          for (e in n) i = n[e], i !== !1 && r(e) && (t[e] = i);\n          return t;\n        }, d.prototype.freezeSelection = function () {\n          return this.setCurrentAttribute(\"frozen\", !0);\n        }, d.prototype.thawSelection = function () {\n          return this.removeCurrentAttribute(\"frozen\");\n        }, d.prototype.hasFrozenSelection = function () {\n          return this.hasCurrentAttribute(\"frozen\");\n        }, d.proxyMethod(\"getSelectionManager().getPointRange\"), d.proxyMethod(\"getSelectionManager().setLocationRangeFromPointRange\"), d.proxyMethod(\"getSelectionManager().createLocationRangeFromDOMRange\"), d.proxyMethod(\"getSelectionManager().locationIsCursorTarget\"), d.proxyMethod(\"getSelectionManager().selectionIsExpanded\"), d.proxyMethod(\"delegate?.getSelectionManager\"), d.prototype.setSelection = function (t) {\n          var e, n;\n          return e = this.document.locationRangeFromRange(t), null != (n = this.delegate) ? n.compositionDidRequestChangingSelectionToLocationRange(e) : void 0;\n        }, d.prototype.getSelectedRange = function () {\n          var t;\n          return (t = this.getLocationRange()) ? this.document.rangeFromLocationRange(t) : void 0;\n        }, d.prototype.setSelectedRange = function (t) {\n          var e;\n          return e = this.document.locationRangeFromRange(t), this.getSelectionManager().setLocationRange(e);\n        }, d.prototype.getPosition = function () {\n          var t;\n          return (t = this.getLocationRange()) ? this.document.positionFromLocation(t[0]) : void 0;\n        }, d.prototype.getLocationRange = function (t) {\n          var e, n;\n          return null != (e = null != (n = this.targetLocationRange) ? n : this.getSelectionManager().getLocationRange(t)) ? e : s({\n            index: 0,\n            offset: 0\n          });\n        }, d.prototype.withTargetLocationRange = function (t, e) {\n          var n;\n          this.targetLocationRange = t;\n          try {\n            n = e();\n          } finally {\n            this.targetLocationRange = null;\n          }\n          return n;\n        }, d.prototype.withTargetRange = function (t, e) {\n          var n;\n          return n = this.document.locationRangeFromRange(t), this.withTargetLocationRange(n, e);\n        }, d.prototype.withTargetDOMRange = function (t, e) {\n          var n;\n          return n = this.createLocationRangeFromDOMRange(t, {\n            strict: !1\n          }), this.withTargetLocationRange(n, e);\n        }, d.prototype.getExpandedRangeInDirection = function (t, e) {\n          var n, i, o, r;\n          return i = (null != e ? e : {}).length, o = this.getSelectedRange(), r = o[0], n = o[1], \"backward\" === t ? i ? r -= i : r = this.translateUTF16PositionFromOffset(r, -1) : i ? n += i : n = this.translateUTF16PositionFromOffset(n, 1), s([r, n]);\n        }, d.prototype.shouldManageMovingCursorInDirection = function (t) {\n          var e;\n          return this.editingAttachment ? !0 : (e = this.getExpandedRangeInDirection(t), null != this.getAttachmentAtRange(e));\n        }, d.prototype.moveCursorInDirection = function (t) {\n          var e, n, i, o;\n          return this.editingAttachment ? i = this.document.getRangeOfAttachment(this.editingAttachment) : (o = this.getSelectedRange(), i = this.getExpandedRangeInDirection(t), n = !c(o, i)), this.setSelectedRange(\"backward\" === t ? i[0] : i[1]), n && (e = this.getAttachmentAtRange(i)) ? this.editAttachment(e) : void 0;\n        }, d.prototype.expandSelectionInDirection = function (t, e) {\n          var n, i;\n          return n = (null != e ? e : {}).length, i = this.getExpandedRangeInDirection(t, {\n            length: n\n          }), this.setSelectedRange(i);\n        }, d.prototype.expandSelectionForEditing = function () {\n          return this.hasCurrentAttribute(\"href\") ? this.expandSelectionAroundCommonAttribute(\"href\") : void 0;\n        }, d.prototype.expandSelectionAroundCommonAttribute = function (t) {\n          var e, n;\n          return e = this.getPosition(), n = this.document.getRangeOfCommonAttributeAtPosition(t, e), this.setSelectedRange(n);\n        }, d.prototype.selectionContainsAttachments = function () {\n          var t;\n          return (null != (t = this.getSelectedAttachments()) ? t.length : void 0) > 0;\n        }, d.prototype.selectionIsInCursorTarget = function () {\n          return this.editingAttachment || this.positionIsCursorTarget(this.getPosition());\n        }, d.prototype.positionIsCursorTarget = function (t) {\n          var e;\n          return (e = this.document.locationFromPosition(t)) ? this.locationIsCursorTarget(e) : void 0;\n        }, d.prototype.positionIsBlockBreak = function (t) {\n          var e;\n          return null != (e = this.document.getPieceAtPosition(t)) ? e.isBlockBreak() : void 0;\n        }, d.prototype.getSelectedDocument = function () {\n          var t;\n          return (t = this.getSelectedRange()) ? this.document.getDocumentAtRange(t) : void 0;\n        }, d.prototype.getSelectedAttachments = function () {\n          var t;\n          return null != (t = this.getSelectedDocument()) ? t.getAttachments() : void 0;\n        }, d.prototype.getAttachments = function () {\n          return this.attachments.slice(0);\n        }, d.prototype.refreshAttachments = function () {\n          var t, e, n, i, o, r, s, a, u, c, h, p;\n          for (n = this.document.getAttachments(), a = l(this.attachments, n), t = a.added, h = a.removed, this.attachments = n, i = 0, r = h.length; r > i; i++) e = h[i], e.delegate = null, null != (u = this.delegate) && \"function\" == typeof u.compositionDidRemoveAttachment && u.compositionDidRemoveAttachment(e);\n          for (p = [], o = 0, s = t.length; s > o; o++) e = t[o], e.delegate = this, p.push(null != (c = this.delegate) && \"function\" == typeof c.compositionDidAddAttachment ? c.compositionDidAddAttachment(e) : void 0);\n          return p;\n        }, d.prototype.attachmentDidChangeAttributes = function (t) {\n          var e;\n          return this.revision++, null != (e = this.delegate) && \"function\" == typeof e.compositionDidEditAttachment ? e.compositionDidEditAttachment(t) : void 0;\n        }, d.prototype.attachmentDidChangePreviewURL = function (t) {\n          var e;\n          return this.revision++, null != (e = this.delegate) && \"function\" == typeof e.compositionDidChangeAttachmentPreviewURL ? e.compositionDidChangeAttachmentPreviewURL(t) : void 0;\n        }, d.prototype.editAttachment = function (t, e) {\n          var n;\n          if (t !== this.editingAttachment) return this.stopEditingAttachment(), this.editingAttachment = t, null != (n = this.delegate) && \"function\" == typeof n.compositionDidStartEditingAttachment ? n.compositionDidStartEditingAttachment(this.editingAttachment, e) : void 0;\n        }, d.prototype.stopEditingAttachment = function () {\n          var t;\n          if (this.editingAttachment) return null != (t = this.delegate) && \"function\" == typeof t.compositionDidStopEditingAttachment && t.compositionDidStopEditingAttachment(this.editingAttachment), this.editingAttachment = null;\n        }, d.prototype.updateAttributesForAttachment = function (t, e) {\n          return this.setDocument(this.document.updateAttributesForAttachment(t, e));\n        }, d.prototype.removeAttributeForAttachment = function (t, e) {\n          return this.setDocument(this.document.removeAttributeForAttachment(t, e));\n        }, d.prototype.breakFormattedBlock = function (t) {\n          var n, i, o, r, s;\n          return i = t.document, n = t.block, r = t.startPosition, s = [r - 1, r], n.getBlockBreakPosition() === t.startLocation.offset ? (n.breaksOnReturn() && \"\\n\" === t.nextCharacter ? r += 1 : i = i.removeTextAtRange(s), s = [r, r]) : \"\\n\" === t.nextCharacter ? \"\\n\" === t.previousCharacter ? s = [r - 1, r + 1] : (s = [r, r + 1], r += 1) : t.startLocation.offset - 1 !== 0 && (r += 1), o = new e.Document([n.removeLastAttribute().copyWithoutText()]), this.setDocument(i.insertDocumentAtRange(o, s)), this.setSelection(r);\n        }, d.prototype.getPreviousBlock = function () {\n          var t, e;\n          return (e = this.getLocationRange()) && (t = e[0].index, t > 0) ? this.document.getBlockAtIndex(t - 1) : void 0;\n        }, d.prototype.getBlock = function () {\n          var t;\n          return (t = this.getLocationRange()) ? this.document.getBlockAtIndex(t[0].index) : void 0;\n        }, d.prototype.getAttachmentAtRange = function (t) {\n          var n;\n          return n = this.document.getDocumentAtRange(t), n.toString() === e.OBJECT_REPLACEMENT_CHARACTER + \"\\n\" ? n.getAttachments()[0] : void 0;\n        }, d.prototype.notifyDelegateOfCurrentAttributesChange = function () {\n          var t;\n          return null != (t = this.delegate) && \"function\" == typeof t.compositionDidChangeCurrentAttributes ? t.compositionDidChangeCurrentAttributes(this.currentAttributes) : void 0;\n        }, d.prototype.notifyDelegateOfInsertionAtRange = function (t) {\n          var e;\n          return null != (e = this.delegate) && \"function\" == typeof e.compositionDidPerformInsertionAtRange ? e.compositionDidPerformInsertionAtRange(t) : void 0;\n        }, d.prototype.translateUTF16PositionFromOffset = function (t, e) {\n          var n, i;\n          return i = this.document.toUTF16String(), n = i.offsetFromUCS2Offset(t), i.offsetToUCS2Offset(n + e);\n        }, d;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.UndoManager = function (e) {\n        function n(t) {\n          this.composition = t, this.undoEntries = [], this.redoEntries = [];\n        }\n        var i;\n        return t(n, e), n.prototype.recordUndoEntry = function (t, e) {\n          var n, o, r, s, a;\n          return s = null != e ? e : {}, o = s.context, n = s.consolidatable, r = this.undoEntries.slice(-1)[0], n && i(r, t, o) ? void 0 : (a = this.createEntry({\n            description: t,\n            context: o\n          }), this.undoEntries.push(a), this.redoEntries = []);\n        }, n.prototype.undo = function () {\n          var t, e;\n          return (e = this.undoEntries.pop()) ? (t = this.createEntry(e), this.redoEntries.push(t), this.composition.loadSnapshot(e.snapshot)) : void 0;\n        }, n.prototype.redo = function () {\n          var t, e;\n          return (t = this.redoEntries.pop()) ? (e = this.createEntry(t), this.undoEntries.push(e), this.composition.loadSnapshot(t.snapshot)) : void 0;\n        }, n.prototype.canUndo = function () {\n          return this.undoEntries.length > 0;\n        }, n.prototype.canRedo = function () {\n          return this.redoEntries.length > 0;\n        }, n.prototype.createEntry = function (t) {\n          var e, n, i;\n          return i = null != t ? t : {}, n = i.description, e = i.context, {\n            description: null != n ? n.toString() : void 0,\n            context: JSON.stringify(e),\n            snapshot: this.composition.getSnapshot()\n          };\n        }, i = function (t, e, n) {\n          return (null != t ? t.description : void 0) === (null != e ? e.toString() : void 0) && (null != t ? t.context : void 0) === JSON.stringify(n);\n        }, n;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t;\n      e.attachmentGalleryFilter = function (e) {\n        var n;\n        return n = new t(e), n.perform(), n.getSnapshot();\n      }, t = function () {\n        function t(t) {\n          this.document = t.document, this.selectedRange = t.selectedRange;\n        }\n        var e, n, i;\n        return e = \"attachmentGallery\", n = \"presentation\", i = \"gallery\", t.prototype.perform = function () {\n          return this.removeBlockAttribute(), this.applyBlockAttribute();\n        }, t.prototype.getSnapshot = function () {\n          return {\n            document: this.document,\n            selectedRange: this.selectedRange\n          };\n        }, t.prototype.removeBlockAttribute = function () {\n          var t, n, i, o, r;\n          for (o = this.findRangesOfBlocks(), r = [], t = 0, n = o.length; n > t; t++) i = o[t], r.push(this.document = this.document.removeAttributeAtRange(e, i));\n          return r;\n        }, t.prototype.applyBlockAttribute = function () {\n          var t, n, i, o, r, s;\n          for (i = 0, r = this.findRangesOfPieces(), s = [], t = 0, n = r.length; n > t; t++) o = r[t], o[1] - o[0] > 1 && (o[0] += i, o[1] += i, \"\\n\" !== this.document.getCharacterAtPosition(o[1]) && (this.document = this.document.insertBlockBreakAtRange(o[1]), o[1] < this.selectedRange[1] && this.moveSelectedRangeForward(), o[1]++, i++), 0 !== o[0] && \"\\n\" !== this.document.getCharacterAtPosition(o[0] - 1) && (this.document = this.document.insertBlockBreakAtRange(o[0]), o[0] < this.selectedRange[0] && this.moveSelectedRangeForward(), o[0]++, i++), s.push(this.document = this.document.applyBlockAttributeAtRange(e, !0, o)));\n          return s;\n        }, t.prototype.findRangesOfBlocks = function () {\n          return this.document.findRangesForBlockAttribute(e);\n        }, t.prototype.findRangesOfPieces = function () {\n          return this.document.findRangesForTextAttribute(n, {\n            withValue: i\n          });\n        }, t.prototype.moveSelectedRangeForward = function () {\n          return this.selectedRange[0] += 1, this.selectedRange[1] += 1;\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = function (t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      };\n      e.Editor = function () {\n        function n(n, o, r) {\n          this.composition = n, this.selectionManager = o, this.element = r, this.insertFiles = t(this.insertFiles, this), this.undoManager = new e.UndoManager(this.composition), this.filters = i.slice(0);\n        }\n        var i;\n        return i = [e.attachmentGalleryFilter], n.prototype.loadDocument = function (t) {\n          return this.loadSnapshot({\n            document: t,\n            selectedRange: [0, 0]\n          });\n        }, n.prototype.loadHTML = function (t) {\n          return null == t && (t = \"\"), this.loadDocument(e.Document.fromHTML(t, {\n            referenceElement: this.element\n          }));\n        }, n.prototype.loadJSON = function (t) {\n          var n, i;\n          return n = t.document, i = t.selectedRange, n = e.Document.fromJSON(n), this.loadSnapshot({\n            document: n,\n            selectedRange: i\n          });\n        }, n.prototype.loadSnapshot = function (t) {\n          return this.undoManager = new e.UndoManager(this.composition), this.composition.loadSnapshot(t);\n        }, n.prototype.getDocument = function () {\n          return this.composition.document;\n        }, n.prototype.getSelectedDocument = function () {\n          return this.composition.getSelectedDocument();\n        }, n.prototype.getSnapshot = function () {\n          return this.composition.getSnapshot();\n        }, n.prototype.toJSON = function () {\n          return this.getSnapshot();\n        }, n.prototype.deleteInDirection = function (t) {\n          return this.composition.deleteInDirection(t);\n        }, n.prototype.insertAttachment = function (t) {\n          return this.composition.insertAttachment(t);\n        }, n.prototype.insertAttachments = function (t) {\n          return this.composition.insertAttachments(t);\n        }, n.prototype.insertDocument = function (t) {\n          return this.composition.insertDocument(t);\n        }, n.prototype.insertFile = function (t) {\n          return this.composition.insertFile(t);\n        }, n.prototype.insertFiles = function (t) {\n          return this.composition.insertFiles(t);\n        }, n.prototype.insertHTML = function (t) {\n          return this.composition.insertHTML(t);\n        }, n.prototype.insertString = function (t) {\n          return this.composition.insertString(t);\n        }, n.prototype.insertText = function (t) {\n          return this.composition.insertText(t);\n        }, n.prototype.insertLineBreak = function () {\n          return this.composition.insertLineBreak();\n        }, n.prototype.getSelectedRange = function () {\n          return this.composition.getSelectedRange();\n        }, n.prototype.getPosition = function () {\n          return this.composition.getPosition();\n        }, n.prototype.getClientRectAtPosition = function (t) {\n          var e;\n          return e = this.getDocument().locationRangeFromRange([t, t + 1]), this.selectionManager.getClientRectAtLocationRange(e);\n        }, n.prototype.expandSelectionInDirection = function (t) {\n          return this.composition.expandSelectionInDirection(t);\n        }, n.prototype.moveCursorInDirection = function (t) {\n          return this.composition.moveCursorInDirection(t);\n        }, n.prototype.setSelectedRange = function (t) {\n          return this.composition.setSelectedRange(t);\n        }, n.prototype.activateAttribute = function (t, e) {\n          return null == e && (e = !0), this.composition.setCurrentAttribute(t, e);\n        }, n.prototype.attributeIsActive = function (t) {\n          return this.composition.hasCurrentAttribute(t);\n        }, n.prototype.canActivateAttribute = function (t) {\n          return this.composition.canSetCurrentAttribute(t);\n        }, n.prototype.deactivateAttribute = function (t) {\n          return this.composition.removeCurrentAttribute(t);\n        }, n.prototype.canDecreaseNestingLevel = function () {\n          return this.composition.canDecreaseNestingLevel();\n        }, n.prototype.canIncreaseNestingLevel = function () {\n          return this.composition.canIncreaseNestingLevel();\n        }, n.prototype.decreaseNestingLevel = function () {\n          return this.canDecreaseNestingLevel() ? this.composition.decreaseNestingLevel() : void 0;\n        }, n.prototype.increaseNestingLevel = function () {\n          return this.canIncreaseNestingLevel() ? this.composition.increaseNestingLevel() : void 0;\n        }, n.prototype.canRedo = function () {\n          return this.undoManager.canRedo();\n        }, n.prototype.canUndo = function () {\n          return this.undoManager.canUndo();\n        }, n.prototype.recordUndoEntry = function (t, e) {\n          var n, i, o;\n          return o = null != e ? e : {}, i = o.context, n = o.consolidatable, this.undoManager.recordUndoEntry(t, {\n            context: i,\n            consolidatable: n\n          });\n        }, n.prototype.redo = function () {\n          return this.canRedo() ? this.undoManager.redo() : void 0;\n        }, n.prototype.undo = function () {\n          return this.canUndo() ? this.undoManager.undo() : void 0;\n        }, n;\n      }();\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.ManagedAttachment = function (e) {\n        function n(t, e) {\n          var n;\n          this.attachmentManager = t, this.attachment = e, n = this.attachment, this.id = n.id, this.file = n.file;\n        }\n        return t(n, e), n.prototype.remove = function () {\n          return this.attachmentManager.requestRemovalOfAttachment(this.attachment);\n        }, n.proxyMethod(\"attachment.getAttribute\"), n.proxyMethod(\"attachment.hasAttribute\"), n.proxyMethod(\"attachment.setAttribute\"), n.proxyMethod(\"attachment.getAttributes\"), n.proxyMethod(\"attachment.setAttributes\"), n.proxyMethod(\"attachment.isPending\"), n.proxyMethod(\"attachment.isPreviewable\"), n.proxyMethod(\"attachment.getURL\"), n.proxyMethod(\"attachment.getHref\"), n.proxyMethod(\"attachment.getFilename\"), n.proxyMethod(\"attachment.getFilesize\"), n.proxyMethod(\"attachment.getFormattedFilesize\"), n.proxyMethod(\"attachment.getExtension\"), n.proxyMethod(\"attachment.getContentType\"), n.proxyMethod(\"attachment.getFile\"), n.proxyMethod(\"attachment.setFile\"), n.proxyMethod(\"attachment.releaseFile\"), n.proxyMethod(\"attachment.getUploadProgress\"), n.proxyMethod(\"attachment.setUploadProgress\"), n;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t = function (t, e) {\n          function i() {\n            this.constructor = t;\n          }\n          for (var o in e) n.call(e, o) && (t[o] = e[o]);\n          return i.prototype = e.prototype, t.prototype = new i(), t.__super__ = e.prototype, t;\n        },\n        n = {}.hasOwnProperty;\n      e.AttachmentManager = function (n) {\n        function i(t) {\n          var e, n, i;\n          for (null == t && (t = []), this.managedAttachments = {}, n = 0, i = t.length; i > n; n++) e = t[n], this.manageAttachment(e);\n        }\n        return t(i, n), i.prototype.getAttachments = function () {\n          var t, e, n, i;\n          n = this.managedAttachments, i = [];\n          for (e in n) t = n[e], i.push(t);\n          return i;\n        }, i.prototype.manageAttachment = function (t) {\n          var n, i;\n          return null != (n = this.managedAttachments)[i = t.id] ? n[i] : n[i] = new e.ManagedAttachment(this, t);\n        }, i.prototype.attachmentIsManaged = function (t) {\n          return t.id in this.managedAttachments;\n        }, i.prototype.requestRemovalOfAttachment = function (t) {\n          var e;\n          return this.attachmentIsManaged(t) && null != (e = this.delegate) && \"function\" == typeof e.attachmentManagerDidRequestRemovalOfAttachment ? e.attachmentManagerDidRequestRemovalOfAttachment(t) : void 0;\n        }, i.prototype.unmanageAttachment = function (t) {\n          var e;\n          return e = this.managedAttachments[t.id], delete this.managedAttachments[t.id], e;\n        }, i;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t, n, i, o, r, s, a, u, c, l, h;\n      t = e.elementContainsNode, n = e.findChildIndexOfNode, r = e.nodeIsBlockStart, s = e.nodeIsBlockStartComment, o = e.nodeIsBlockContainer, a = e.nodeIsCursorTarget, u = e.nodeIsEmptyTextNode, c = e.nodeIsTextNode, i = e.nodeIsAttachmentElement, l = e.tagName, h = e.walkTree, e.LocationMapper = function () {\n        function e(t) {\n          this.element = t;\n        }\n        var p, d, f, g;\n        return e.prototype.findLocationFromContainerAndOffset = function (e, i, o) {\n          var s, u, l, p, g, m, v;\n          for (m = (null != o ? o : {\n            strict: !0\n          }).strict, u = 0, l = !1, p = {\n            index: 0,\n            offset: 0\n          }, (s = this.findAttachmentElementParentForNode(e)) && (e = s.parentNode, i = n(s)), v = h(this.element, {\n            usingFilter: f\n          }); v.nextNode();) {\n            if (g = v.currentNode, g === e && c(e)) {\n              a(g) || (p.offset += i);\n              break;\n            }\n            if (g.parentNode === e) {\n              if (u++ === i) break;\n            } else if (!t(e, g) && u > 0) break;\n            r(g, {\n              strict: m\n            }) ? (l && p.index++, p.offset = 0, l = !0) : p.offset += d(g);\n          }\n          return p;\n        }, e.prototype.findContainerAndOffsetFromLocation = function (t) {\n          var e, i, s, u, l;\n          if (0 === t.index && 0 === t.offset) {\n            for (e = this.element, u = 0; e.firstChild;) if (e = e.firstChild, o(e)) {\n              u = 1;\n              break;\n            }\n            return [e, u];\n          }\n          if (l = this.findNodeAndOffsetFromLocation(t), i = l[0], s = l[1], i) {\n            if (c(i)) 0 === d(i) ? (e = i.parentNode.parentNode, u = n(i.parentNode), a(i, {\n              name: \"right\"\n            }) && u++) : (e = i, u = t.offset - s);else {\n              if (e = i.parentNode, !r(i.previousSibling) && !o(e)) for (; i === e.lastChild && (i = e, e = e.parentNode, !o(e)););\n              u = n(i), 0 !== t.offset && u++;\n            }\n            return [e, u];\n          }\n        }, e.prototype.findNodeAndOffsetFromLocation = function (t) {\n          var e, n, i, o, r, s, u, l;\n          for (u = 0, l = this.getSignificantNodesForIndex(t.index), n = 0, i = l.length; i > n; n++) {\n            if (e = l[n], o = d(e), t.offset <= u + o) if (c(e)) {\n              if (r = e, s = u, t.offset === s && a(r)) break;\n            } else r || (r = e, s = u);\n            if (u += o, u > t.offset) break;\n          }\n          return [r, s];\n        }, e.prototype.findAttachmentElementParentForNode = function (t) {\n          for (; t && t !== this.element;) {\n            if (i(t)) return t;\n            t = t.parentNode;\n          }\n        }, e.prototype.getSignificantNodesForIndex = function (t) {\n          var e, n, i, o, r;\n          for (i = [], r = h(this.element, {\n            usingFilter: p\n          }), o = !1; r.nextNode();) if (n = r.currentNode, s(n)) {\n            if (\"undefined\" != typeof e && null !== e ? e++ : e = 0, e === t) o = !0;else if (o) break;\n          } else o && i.push(n);\n          return i;\n        }, d = function (t) {\n          var e;\n          return t.nodeType === Node.TEXT_NODE ? a(t) ? 0 : (e = t.textContent, e.length) : \"br\" === l(t) || i(t) ? 1 : 0;\n        }, p = function (t) {\n          return g(t) === NodeFilter.FILTER_ACCEPT ? f(t) : NodeFilter.FILTER_REJECT;\n        }, g = function (t) {\n          return u(t) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n        }, f = function (t) {\n          return i(t.parentNode) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n        }, e;\n      }();\n    }.call(this), function () {\n      var t,\n        n,\n        i = [].slice;\n      t = e.getDOMRange, n = e.setDOMRange, e.PointMapper = function () {\n        function e() {}\n        return e.prototype.createDOMRangeFromPoint = function (e) {\n          var i, o, r, s, a, u, c, l;\n          if (c = e.x, l = e.y, document.caretPositionFromPoint) return a = document.caretPositionFromPoint(c, l), r = a.offsetNode, o = a.offset, i = document.createRange(), i.setStart(r, o), i;\n          if (document.caretRangeFromPoint) return document.caretRangeFromPoint(c, l);\n          if (document.body.createTextRange) {\n            s = t();\n            try {\n              u = document.body.createTextRange(), u.moveToPoint(c, l), u.select();\n            } catch (h) {}\n            return i = t(), n(s), i;\n          }\n        }, e.prototype.getClientRectsForDOMRange = function (t) {\n          var e, n, o;\n          return n = i.call(t.getClientRects()), o = n[0], e = n[n.length - 1], [o, e];\n        }, e;\n      }();\n    }.call(this), function () {\n      var t,\n        n = function (t, e) {\n          return function () {\n            return t.apply(e, arguments);\n          };\n        },\n        i = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) o.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        o = {}.hasOwnProperty,\n        r = [].indexOf || function (t) {\n          for (var e = 0, n = this.length; n > e; e++) if (e in this && this[e] === t) return e;\n          return -1;\n        };\n      t = e.getDOMRange, e.SelectionChangeObserver = function (e) {\n        function o() {\n          this.run = n(this.run, this), this.update = n(this.update, this), this.selectionManagers = [];\n        }\n        var s;\n        return i(o, e), o.prototype.start = function () {\n          return this.started ? void 0 : (this.started = !0, \"onselectionchange\" in document ? document.addEventListener(\"selectionchange\", this.update, !0) : this.run());\n        }, o.prototype.stop = function () {\n          return this.started ? (this.started = !1, document.removeEventListener(\"selectionchange\", this.update, !0)) : void 0;\n        }, o.prototype.registerSelectionManager = function (t) {\n          return r.call(this.selectionManagers, t) < 0 ? (this.selectionManagers.push(t), this.start()) : void 0;\n        }, o.prototype.unregisterSelectionManager = function (t) {\n          var e;\n          return this.selectionManagers = function () {\n            var n, i, o, r;\n            for (o = this.selectionManagers, r = [], n = 0, i = o.length; i > n; n++) e = o[n], e !== t && r.push(e);\n            return r;\n          }.call(this), 0 === this.selectionManagers.length ? this.stop() : void 0;\n        }, o.prototype.notifySelectionManagersOfSelectionChange = function () {\n          var t, e, n, i, o;\n          for (n = this.selectionManagers, i = [], t = 0, e = n.length; e > t; t++) o = n[t], i.push(o.selectionDidChange());\n          return i;\n        }, o.prototype.update = function () {\n          var e;\n          return e = t(), s(e, this.domRange) ? void 0 : (this.domRange = e, this.notifySelectionManagersOfSelectionChange());\n        }, o.prototype.reset = function () {\n          return this.domRange = null, this.update();\n        }, o.prototype.run = function () {\n          return this.started ? (this.update(), requestAnimationFrame(this.run)) : void 0;\n        }, s = function (t, e) {\n          return (null != t ? t.startContainer : void 0) === (null != e ? e.startContainer : void 0) && (null != t ? t.startOffset : void 0) === (null != e ? e.startOffset : void 0) && (null != t ? t.endContainer : void 0) === (null != e ? e.endContainer : void 0) && (null != t ? t.endOffset : void 0) === (null != e ? e.endOffset : void 0);\n        }, o;\n      }(e.BasicObject), null == e.selectionChangeObserver && (e.selectionChangeObserver = new e.SelectionChangeObserver());\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r,\n        s,\n        a,\n        u,\n        c,\n        l,\n        h = function (t, e) {\n          return function () {\n            return t.apply(e, arguments);\n          };\n        },\n        p = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) d.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        d = {}.hasOwnProperty;\n      i = e.getDOMSelection, n = e.getDOMRange, l = e.setDOMRange, t = e.elementContainsNode, s = e.nodeIsCursorTarget, r = e.innerElementIsActive, o = e.handleEvent, a = e.normalizeRange, u = e.rangeIsCollapsed, c = e.rangesAreEqual, e.SelectionManager = function (d) {\n        function f(t) {\n          this.element = t, this.selectionDidChange = h(this.selectionDidChange, this), this.didMouseDown = h(this.didMouseDown, this), this.locationMapper = new e.LocationMapper(this.element), this.pointMapper = new e.PointMapper(), this.lockCount = 0, o(\"mousedown\", {\n            onElement: this.element,\n            withCallback: this.didMouseDown\n          });\n        }\n        return p(f, d), f.prototype.getLocationRange = function (t) {\n          var e, i;\n          return null == t && (t = {}), e = t.strict === !1 ? this.createLocationRangeFromDOMRange(n(), {\n            strict: !1\n          }) : t.ignoreLock ? this.currentLocationRange : null != (i = this.lockedLocationRange) ? i : this.currentLocationRange;\n        }, f.prototype.setLocationRange = function (t) {\n          var e;\n          if (!this.lockedLocationRange) return t = a(t), (e = this.createDOMRangeFromLocationRange(t)) ? (l(e), this.updateCurrentLocationRange(t)) : void 0;\n        }, f.prototype.setLocationRangeFromPointRange = function (t) {\n          var e, n;\n          return t = a(t), n = this.getLocationAtPoint(t[0]), e = this.getLocationAtPoint(t[1]), this.setLocationRange([n, e]);\n        }, f.prototype.getClientRectAtLocationRange = function (t) {\n          var e;\n          return (e = this.createDOMRangeFromLocationRange(t)) ? this.getClientRectsForDOMRange(e)[1] : void 0;\n        }, f.prototype.locationIsCursorTarget = function (t) {\n          var e, n, i;\n          return i = this.findNodeAndOffsetFromLocation(t), e = i[0], n = i[1], s(e);\n        }, f.prototype.lock = function () {\n          return 0 === this.lockCount++ ? (this.updateCurrentLocationRange(), this.lockedLocationRange = this.getLocationRange()) : void 0;\n        }, f.prototype.unlock = function () {\n          var t;\n          return 0 === --this.lockCount && (t = this.lockedLocationRange, this.lockedLocationRange = null, null != t) ? this.setLocationRange(t) : void 0;\n        }, f.prototype.clearSelection = function () {\n          var t;\n          return null != (t = i()) ? t.removeAllRanges() : void 0;\n        }, f.prototype.selectionIsCollapsed = function () {\n          var t;\n          return (null != (t = n()) ? t.collapsed : void 0) === !0;\n        }, f.prototype.selectionIsExpanded = function () {\n          return !this.selectionIsCollapsed();\n        }, f.prototype.createLocationRangeFromDOMRange = function (t, e) {\n          var n, i;\n          if (null != t && this.domRangeWithinElement(t) && (i = this.findLocationFromContainerAndOffset(t.startContainer, t.startOffset, e))) return t.collapsed || (n = this.findLocationFromContainerAndOffset(t.endContainer, t.endOffset, e)), a([i, n]);\n        }, f.proxyMethod(\"locationMapper.findLocationFromContainerAndOffset\"), f.proxyMethod(\"locationMapper.findContainerAndOffsetFromLocation\"), f.proxyMethod(\"locationMapper.findNodeAndOffsetFromLocation\"), f.proxyMethod(\"pointMapper.createDOMRangeFromPoint\"), f.proxyMethod(\"pointMapper.getClientRectsForDOMRange\"), f.prototype.didMouseDown = function () {\n          return this.pauseTemporarily();\n        }, f.prototype.pauseTemporarily = function () {\n          var e, n, i, r;\n          return this.paused = !0, n = function (e) {\n            return function () {\n              var n, o, s;\n              for (e.paused = !1, clearTimeout(r), o = 0, s = i.length; s > o; o++) n = i[o], n.destroy();\n              return t(document, e.element) ? e.selectionDidChange() : void 0;\n            };\n          }(this), r = setTimeout(n, 200), i = function () {\n            var t, i, r, s;\n            for (r = [\"mousemove\", \"keydown\"], s = [], t = 0, i = r.length; i > t; t++) e = r[t], s.push(o(e, {\n              onElement: document,\n              withCallback: n\n            }));\n            return s;\n          }();\n        }, f.prototype.selectionDidChange = function () {\n          return this.paused || r(this.element) ? void 0 : this.updateCurrentLocationRange();\n        }, f.prototype.updateCurrentLocationRange = function (t) {\n          var e;\n          return (null != t ? t : t = this.createLocationRangeFromDOMRange(n())) && !c(t, this.currentLocationRange) ? (this.currentLocationRange = t, null != (e = this.delegate) && \"function\" == typeof e.locationRangeDidChange ? e.locationRangeDidChange(this.currentLocationRange.slice(0)) : void 0) : void 0;\n        }, f.prototype.createDOMRangeFromLocationRange = function (t) {\n          var e, n, i, o;\n          return i = this.findContainerAndOffsetFromLocation(t[0]), n = u(t) ? i : null != (o = this.findContainerAndOffsetFromLocation(t[1])) ? o : i, null != i && null != n ? (e = document.createRange(), e.setStart.apply(e, i), e.setEnd.apply(e, n), e) : void 0;\n        }, f.prototype.getLocationAtPoint = function (t) {\n          var e, n;\n          return (e = this.createDOMRangeFromPoint(t)) && null != (n = this.createLocationRangeFromDOMRange(e)) ? n[0] : void 0;\n        }, f.prototype.domRangeWithinElement = function (e) {\n          return e.collapsed ? t(this.element, e.startContainer) : t(this.element, e.startContainer) && t(this.element, e.endContainer);\n        }, f;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var i in e) s.call(e, i) && (t[i] = e[i]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        s = {}.hasOwnProperty,\n        a = [].slice;\n      i = e.rangeIsCollapsed, o = e.rangesAreEqual, n = e.objectsAreEqual, t = e.getBlockConfig, e.EditorController = function (s) {\n        function u(t) {\n          var n, i;\n          this.editorElement = t.editorElement, n = t.document, i = t.html, this.selectionManager = new e.SelectionManager(this.editorElement), this.selectionManager.delegate = this, this.composition = new e.Composition(), this.composition.delegate = this, this.attachmentManager = new e.AttachmentManager(this.composition.getAttachments()), this.attachmentManager.delegate = this, this.inputController = new e[\"Level\" + e.config.input.getLevel() + \"InputController\"](this.editorElement), this.inputController.delegate = this, this.inputController.responder = this.composition, this.compositionController = new e.CompositionController(this.editorElement, this.composition), this.compositionController.delegate = this, this.toolbarController = new e.ToolbarController(this.editorElement.toolbarElement), this.toolbarController.delegate = this, this.editor = new e.Editor(this.composition, this.selectionManager, this.editorElement), null != n ? this.editor.loadDocument(n) : this.editor.loadHTML(i);\n        }\n        var c;\n        return r(u, s), u.prototype.registerSelectionManager = function () {\n          return e.selectionChangeObserver.registerSelectionManager(this.selectionManager);\n        }, u.prototype.unregisterSelectionManager = function () {\n          return e.selectionChangeObserver.unregisterSelectionManager(this.selectionManager);\n        }, u.prototype.render = function () {\n          return this.compositionController.render();\n        }, u.prototype.reparse = function () {\n          return this.composition.replaceHTML(this.editorElement.innerHTML);\n        }, u.prototype.compositionDidChangeDocument = function () {\n          return this.notifyEditorElement(\"document-change\"), this.handlingInput ? void 0 : this.render();\n        }, u.prototype.compositionDidChangeCurrentAttributes = function (t) {\n          return this.currentAttributes = t, this.toolbarController.updateAttributes(this.currentAttributes), this.updateCurrentActions(), this.notifyEditorElement(\"attributes-change\", {\n            attributes: this.currentAttributes\n          });\n        }, u.prototype.compositionDidPerformInsertionAtRange = function (t) {\n          return this.pasting ? this.pastedRange = t : void 0;\n        }, u.prototype.compositionShouldAcceptFile = function (t) {\n          return this.notifyEditorElement(\"file-accept\", {\n            file: t\n          });\n        }, u.prototype.compositionDidAddAttachment = function (t) {\n          var e;\n          return e = this.attachmentManager.manageAttachment(t), this.notifyEditorElement(\"attachment-add\", {\n            attachment: e\n          });\n        }, u.prototype.compositionDidEditAttachment = function (t) {\n          var e;\n          return this.compositionController.rerenderViewForObject(t), e = this.attachmentManager.manageAttachment(t), this.notifyEditorElement(\"attachment-edit\", {\n            attachment: e\n          }), this.notifyEditorElement(\"change\");\n        }, u.prototype.compositionDidChangeAttachmentPreviewURL = function (t) {\n          return this.compositionController.invalidateViewForObject(t), this.notifyEditorElement(\"change\");\n        }, u.prototype.compositionDidRemoveAttachment = function (t) {\n          var e;\n          return e = this.attachmentManager.unmanageAttachment(t), this.notifyEditorElement(\"attachment-remove\", {\n            attachment: e\n          });\n        }, u.prototype.compositionDidStartEditingAttachment = function (t, e) {\n          return this.attachmentLocationRange = this.composition.document.getLocationRangeOfAttachment(t), this.compositionController.installAttachmentEditorForAttachment(t, e), this.selectionManager.setLocationRange(this.attachmentLocationRange);\n        }, u.prototype.compositionDidStopEditingAttachment = function () {\n          return this.compositionController.uninstallAttachmentEditor(), this.attachmentLocationRange = null;\n        }, u.prototype.compositionDidRequestChangingSelectionToLocationRange = function (t) {\n          return !this.loadingSnapshot || this.isFocused() ? (this.requestedLocationRange = t, this.compositionRevisionWhenLocationRangeRequested = this.composition.revision, this.handlingInput ? void 0 : this.render()) : void 0;\n        }, u.prototype.compositionWillLoadSnapshot = function () {\n          return this.loadingSnapshot = !0;\n        }, u.prototype.compositionDidLoadSnapshot = function () {\n          return this.compositionController.refreshViewCache(), this.render(), this.loadingSnapshot = !1;\n        }, u.prototype.getSelectionManager = function () {\n          return this.selectionManager;\n        }, u.proxyMethod(\"getSelectionManager().setLocationRange\"), u.proxyMethod(\"getSelectionManager().getLocationRange\"), u.prototype.attachmentManagerDidRequestRemovalOfAttachment = function (t) {\n          return this.removeAttachment(t);\n        }, u.prototype.compositionControllerWillSyncDocumentView = function () {\n          return this.inputController.editorWillSyncDocumentView(), this.selectionManager.lock(), this.selectionManager.clearSelection();\n        }, u.prototype.compositionControllerDidSyncDocumentView = function () {\n          return this.inputController.editorDidSyncDocumentView(), this.selectionManager.unlock(), this.updateCurrentActions(), this.notifyEditorElement(\"sync\");\n        }, u.prototype.compositionControllerDidRender = function () {\n          return null != this.requestedLocationRange && (this.compositionRevisionWhenLocationRangeRequested === this.composition.revision && this.selectionManager.setLocationRange(this.requestedLocationRange), this.requestedLocationRange = null, this.compositionRevisionWhenLocationRangeRequested = null), this.renderedCompositionRevision !== this.composition.revision && (this.runEditorFilters(), this.composition.updateCurrentAttributes(), this.notifyEditorElement(\"render\")), this.renderedCompositionRevision = this.composition.revision;\n        }, u.prototype.compositionControllerDidFocus = function () {\n          return this.isFocusedInvisibly() && this.setLocationRange({\n            index: 0,\n            offset: 0\n          }), this.toolbarController.hideDialog(), this.notifyEditorElement(\"focus\");\n        }, u.prototype.compositionControllerDidBlur = function () {\n          return this.notifyEditorElement(\"blur\");\n        }, u.prototype.compositionControllerDidSelectAttachment = function (t, e) {\n          return this.toolbarController.hideDialog(), this.composition.editAttachment(t, e);\n        }, u.prototype.compositionControllerDidRequestDeselectingAttachment = function (t) {\n          var e, n;\n          return e = null != (n = this.attachmentLocationRange) ? n : this.composition.document.getLocationRangeOfAttachment(t), this.selectionManager.setLocationRange(e[1]);\n        }, u.prototype.compositionControllerWillUpdateAttachment = function (t) {\n          return this.editor.recordUndoEntry(\"Edit Attachment\", {\n            context: t.id,\n            consolidatable: !0\n          });\n        }, u.prototype.compositionControllerDidRequestRemovalOfAttachment = function (t) {\n          return this.removeAttachment(t);\n        }, u.prototype.inputControllerWillHandleInput = function () {\n          return this.handlingInput = !0, this.requestedRender = !1;\n        }, u.prototype.inputControllerDidRequestRender = function () {\n          return this.requestedRender = !0;\n        }, u.prototype.inputControllerDidHandleInput = function () {\n          return this.handlingInput = !1, this.requestedRender ? (this.requestedRender = !1, this.render()) : void 0;\n        }, u.prototype.inputControllerDidAllowUnhandledInput = function () {\n          return this.notifyEditorElement(\"change\");\n        }, u.prototype.inputControllerDidRequestReparse = function () {\n          return this.reparse();\n        }, u.prototype.inputControllerWillPerformTyping = function () {\n          return this.recordTypingUndoEntry();\n        }, u.prototype.inputControllerWillPerformFormatting = function (t) {\n          return this.recordFormattingUndoEntry(t);\n        }, u.prototype.inputControllerWillCutText = function () {\n          return this.editor.recordUndoEntry(\"Cut\");\n        }, u.prototype.inputControllerWillPaste = function (t) {\n          return this.editor.recordUndoEntry(\"Paste\"), this.pasting = !0, this.notifyEditorElement(\"before-paste\", {\n            paste: t\n          });\n        }, u.prototype.inputControllerDidPaste = function (t) {\n          return t.range = this.pastedRange, this.pastedRange = null, this.pasting = null, this.notifyEditorElement(\"paste\", {\n            paste: t\n          });\n        }, u.prototype.inputControllerWillMoveText = function () {\n          return this.editor.recordUndoEntry(\"Move\");\n        }, u.prototype.inputControllerWillAttachFiles = function () {\n          return this.editor.recordUndoEntry(\"Drop Files\");\n        }, u.prototype.inputControllerWillPerformUndo = function () {\n          return this.editor.undo();\n        }, u.prototype.inputControllerWillPerformRedo = function () {\n          return this.editor.redo();\n        }, u.prototype.inputControllerDidReceiveKeyboardCommand = function (t) {\n          return this.toolbarController.applyKeyboardCommand(t);\n        }, u.prototype.inputControllerDidStartDrag = function () {\n          return this.locationRangeBeforeDrag = this.selectionManager.getLocationRange();\n        }, u.prototype.inputControllerDidReceiveDragOverPoint = function (t) {\n          return this.selectionManager.setLocationRangeFromPointRange(t);\n        }, u.prototype.inputControllerDidCancelDrag = function () {\n          return this.selectionManager.setLocationRange(this.locationRangeBeforeDrag), this.locationRangeBeforeDrag = null;\n        }, u.prototype.locationRangeDidChange = function (t) {\n          return this.composition.updateCurrentAttributes(), this.updateCurrentActions(), this.attachmentLocationRange && !o(this.attachmentLocationRange, t) && this.composition.stopEditingAttachment(), this.notifyEditorElement(\"selection-change\");\n        }, u.prototype.toolbarDidClickButton = function () {\n          return this.getLocationRange() ? void 0 : this.setLocationRange({\n            index: 0,\n            offset: 0\n          });\n        }, u.prototype.toolbarDidInvokeAction = function (t) {\n          return this.invokeAction(t);\n        }, u.prototype.toolbarDidToggleAttribute = function (t) {\n          return this.recordFormattingUndoEntry(t), this.composition.toggleCurrentAttribute(t), this.render(), this.selectionFrozen ? void 0 : this.editorElement.focus();\n        }, u.prototype.toolbarDidUpdateAttribute = function (t, e) {\n          return this.recordFormattingUndoEntry(t), this.composition.setCurrentAttribute(t, e), this.render(), this.selectionFrozen ? void 0 : this.editorElement.focus();\n        }, u.prototype.toolbarDidRemoveAttribute = function (t) {\n          return this.recordFormattingUndoEntry(t), this.composition.removeCurrentAttribute(t), this.render(), this.selectionFrozen ? void 0 : this.editorElement.focus();\n        }, u.prototype.toolbarWillShowDialog = function () {\n          return this.composition.expandSelectionForEditing(), this.freezeSelection();\n        }, u.prototype.toolbarDidShowDialog = function (t) {\n          return this.notifyEditorElement(\"toolbar-dialog-show\", {\n            dialogName: t\n          });\n        }, u.prototype.toolbarDidHideDialog = function (t) {\n          return this.thawSelection(), this.editorElement.focus(), this.notifyEditorElement(\"toolbar-dialog-hide\", {\n            dialogName: t\n          });\n        }, u.prototype.freezeSelection = function () {\n          return this.selectionFrozen ? void 0 : (this.selectionManager.lock(), this.composition.freezeSelection(), this.selectionFrozen = !0, this.render());\n        }, u.prototype.thawSelection = function () {\n          return this.selectionFrozen ? (this.composition.thawSelection(), this.selectionManager.unlock(), this.selectionFrozen = !1, this.render()) : void 0;\n        }, u.prototype.actions = {\n          undo: {\n            test: function () {\n              return this.editor.canUndo();\n            },\n            perform: function () {\n              return this.editor.undo();\n            }\n          },\n          redo: {\n            test: function () {\n              return this.editor.canRedo();\n            },\n            perform: function () {\n              return this.editor.redo();\n            }\n          },\n          link: {\n            test: function () {\n              return this.editor.canActivateAttribute(\"href\");\n            }\n          },\n          increaseNestingLevel: {\n            test: function () {\n              return this.editor.canIncreaseNestingLevel();\n            },\n            perform: function () {\n              return this.editor.increaseNestingLevel() && this.render();\n            }\n          },\n          decreaseNestingLevel: {\n            test: function () {\n              return this.editor.canDecreaseNestingLevel();\n            },\n            perform: function () {\n              return this.editor.decreaseNestingLevel() && this.render();\n            }\n          },\n          attachFiles: {\n            test: function () {\n              return !0;\n            },\n            perform: function () {\n              return e.config.input.pickFiles(this.editor.insertFiles);\n            }\n          }\n        }, u.prototype.canInvokeAction = function (t) {\n          var e, n;\n          return this.actionIsExternal(t) ? !0 : !!(null != (e = this.actions[t]) && null != (n = e.test) ? n.call(this) : void 0);\n        }, u.prototype.invokeAction = function (t) {\n          var e, n;\n          return this.actionIsExternal(t) ? this.notifyEditorElement(\"action-invoke\", {\n            actionName: t\n          }) : null != (e = this.actions[t]) && null != (n = e.perform) ? n.call(this) : void 0;\n        }, u.prototype.actionIsExternal = function (t) {\n          return /^x-./.test(t);\n        }, u.prototype.getCurrentActions = function () {\n          var t, e;\n          e = {};\n          for (t in this.actions) e[t] = this.canInvokeAction(t);\n          return e;\n        }, u.prototype.updateCurrentActions = function () {\n          var t;\n          return t = this.getCurrentActions(), n(t, this.currentActions) ? void 0 : (this.currentActions = t, this.toolbarController.updateActions(this.currentActions), this.notifyEditorElement(\"actions-change\", {\n            actions: this.currentActions\n          }));\n        }, u.prototype.runEditorFilters = function () {\n          var t, e, n, i, o, r, s, a;\n          for (a = this.composition.getSnapshot(), o = this.editor.filters, n = 0, i = o.length; i > n; n++) e = o[n], t = a.document, s = a.selectedRange, a = null != (r = e.call(this.editor, a)) ? r : {}, null == a.document && (a.document = t), null == a.selectedRange && (a.selectedRange = s);\n          return c(a, this.composition.getSnapshot()) ? void 0 : this.composition.loadSnapshot(a);\n        }, c = function (t, e) {\n          return o(t.selectedRange, e.selectedRange) && t.document.isEqualTo(e.document);\n        }, u.prototype.updateInputElement = function () {\n          var t, n;\n          return t = this.compositionController.getSerializableElement(), n = e.serializeToContentType(t, \"text/html\"), this.editorElement.setInputElementValue(n);\n        }, u.prototype.notifyEditorElement = function (t, e) {\n          switch (t) {\n            case \"document-change\":\n              this.documentChangedSinceLastRender = !0;\n              break;\n            case \"render\":\n              this.documentChangedSinceLastRender && (this.documentChangedSinceLastRender = !1, this.notifyEditorElement(\"change\"));\n              break;\n            case \"change\":\n            case \"attachment-add\":\n            case \"attachment-edit\":\n            case \"attachment-remove\":\n              this.updateInputElement();\n          }\n          return this.editorElement.notify(t, e);\n        }, u.prototype.removeAttachment = function (t) {\n          return this.editor.recordUndoEntry(\"Delete Attachment\"), this.composition.removeAttachment(t), this.render();\n        }, u.prototype.recordFormattingUndoEntry = function (e) {\n          var n, o;\n          return n = t(e), o = this.selectionManager.getLocationRange(), n || !i(o) ? this.editor.recordUndoEntry(\"Formatting\", {\n            context: this.getUndoContext(),\n            consolidatable: !0\n          }) : void 0;\n        }, u.prototype.recordTypingUndoEntry = function () {\n          return this.editor.recordUndoEntry(\"Typing\", {\n            context: this.getUndoContext(this.currentAttributes),\n            consolidatable: !0\n          });\n        }, u.prototype.getUndoContext = function () {\n          var t;\n          return t = 1 <= arguments.length ? a.call(arguments, 0) : [], [this.getLocationContext(), this.getTimeContext()].concat(a.call(t));\n        }, u.prototype.getLocationContext = function () {\n          var t;\n          return t = this.selectionManager.getLocationRange(), i(t) ? t[0].index : t;\n        }, u.prototype.getTimeContext = function () {\n          return e.config.undoInterval > 0 ? Math.floor(new Date().getTime() / e.config.undoInterval) : 0;\n        }, u.prototype.isFocused = function () {\n          var t;\n          return this.editorElement === (null != (t = this.editorElement.ownerDocument) ? t.activeElement : void 0);\n        }, u.prototype.isFocusedInvisibly = function () {\n          return this.isFocused() && !this.getLocationRange();\n        }, u;\n      }(e.Controller);\n    }.call(this), function () {\n      var t,\n        n,\n        i,\n        o,\n        r,\n        s,\n        a,\n        u = [].indexOf || function (t) {\n          for (var e = 0, n = this.length; n > e; e++) if (e in this && this[e] === t) return e;\n          return -1;\n        };\n      n = e.browser, s = e.makeElement, a = e.triggerEvent, o = e.handleEvent, r = e.handleEventOnce, i = e.findClosestElementFromNode, t = e.AttachmentView.attachmentSelector, e.registerElement(\"trix-editor\", function () {\n        var c, l, h, p, d, f, g, m, v;\n        return g = 0, l = function (t) {\n          return !document.querySelector(\":focus\") && t.hasAttribute(\"autofocus\") && document.querySelector(\"[autofocus]\") === t ? t.focus() : void 0;\n        }, m = function (t) {\n          return t.hasAttribute(\"contenteditable\") ? void 0 : (t.setAttribute(\"contenteditable\", \"\"), r(\"focus\", {\n            onElement: t,\n            withCallback: function () {\n              return h(t);\n            }\n          }));\n        }, h = function (t) {\n          return d(t), v(t);\n        }, d = function (t) {\n          return (\"function\" == typeof document.queryCommandSupported ? document.queryCommandSupported(\"enableObjectResizing\") : void 0) ? (document.execCommand(\"enableObjectResizing\", !1, !1), o(\"mscontrolselect\", {\n            onElement: t,\n            preventDefault: !0\n          })) : void 0;\n        }, v = function () {\n          var t;\n          return (\"function\" == typeof document.queryCommandSupported ? document.queryCommandSupported(\"DefaultParagraphSeparator\") : void 0) && (t = e.config.blockAttributes[\"default\"].tagName, \"div\" === t || \"p\" === t) ? document.execCommand(\"DefaultParagraphSeparator\", !1, t) : void 0;\n        }, c = function (t) {\n          return t.hasAttribute(\"role\") ? void 0 : t.setAttribute(\"role\", \"textbox\");\n        }, f = function (t) {\n          var e;\n          if (!t.hasAttribute(\"aria-label\") && !t.hasAttribute(\"aria-labelledby\")) return (e = function () {\n            var e, n, i;\n            return i = function () {\n              var n, i, o, r;\n              for (o = t.labels, r = [], n = 0, i = o.length; i > n; n++) e = o[n], e.contains(t) || r.push(e.textContent);\n              return r;\n            }(), (n = i.join(\" \")) ? t.setAttribute(\"aria-label\", n) : t.removeAttribute(\"aria-label\");\n          })(), o(\"focus\", {\n            onElement: t,\n            withCallback: e\n          });\n        }, p = function () {\n          return n.forcesObjectResizing ? {\n            display: \"inline\",\n            width: \"auto\"\n          } : {\n            display: \"inline-block\",\n            width: \"1px\"\n          };\n        }(), {\n          defaultCSS: \"%t {\\n  display: block;\\n}\\n\\n%t:empty:not(:focus)::before {\\n  content: attr(placeholder);\\n  color: graytext;\\n  cursor: text;\\n  pointer-events: none;\\n}\\n\\n%t a[contenteditable=false] {\\n  cursor: text;\\n}\\n\\n%t img {\\n  max-width: 100%;\\n  height: auto;\\n}\\n\\n%t \" + t + \" figcaption textarea {\\n  resize: none;\\n}\\n\\n%t \" + t + \" figcaption textarea.trix-autoresize-clone {\\n  position: absolute;\\n  left: -9999px;\\n  max-height: 0px;\\n}\\n\\n%t \" + t + \" figcaption[data-trix-placeholder]:empty::before {\\n  content: attr(data-trix-placeholder);\\n  color: graytext;\\n}\\n\\n%t [data-trix-cursor-target] {\\n  display: \" + p.display + \" !important;\\n  width: \" + p.width + \" !important;\\n  padding: 0 !important;\\n  margin: 0 !important;\\n  border: none !important;\\n}\\n\\n%t [data-trix-cursor-target=left] {\\n  vertical-align: top !important;\\n  margin-left: -1px !important;\\n}\\n\\n%t [data-trix-cursor-target=right] {\\n  vertical-align: bottom !important;\\n  margin-right: -1px !important;\\n}\",\n          trixId: {\n            get: function () {\n              return this.hasAttribute(\"trix-id\") ? this.getAttribute(\"trix-id\") : (this.setAttribute(\"trix-id\", ++g), this.trixId);\n            }\n          },\n          labels: {\n            get: function () {\n              var t, e, n;\n              return e = [], this.id && this.ownerDocument && e.push.apply(e, this.ownerDocument.querySelectorAll(\"label[for='\" + this.id + \"']\")), (t = i(this, {\n                matchingSelector: \"label\"\n              })) && ((n = t.control) === this || null === n) && e.push(t), e;\n            }\n          },\n          toolbarElement: {\n            get: function () {\n              var t, e, n;\n              return this.hasAttribute(\"toolbar\") ? null != (e = this.ownerDocument) ? e.getElementById(this.getAttribute(\"toolbar\")) : void 0 : this.parentNode ? (n = \"trix-toolbar-\" + this.trixId, this.setAttribute(\"toolbar\", n), t = s(\"trix-toolbar\", {\n                id: n\n              }), this.parentNode.insertBefore(t, this), t) : void 0;\n            }\n          },\n          inputElement: {\n            get: function () {\n              var t, e, n;\n              return this.hasAttribute(\"input\") ? null != (n = this.ownerDocument) ? n.getElementById(this.getAttribute(\"input\")) : void 0 : this.parentNode ? (e = \"trix-input-\" + this.trixId, this.setAttribute(\"input\", e), t = s(\"input\", {\n                type: \"hidden\",\n                id: e\n              }), this.parentNode.insertBefore(t, this.nextElementSibling), t) : void 0;\n            }\n          },\n          editor: {\n            get: function () {\n              var t;\n              return null != (t = this.editorController) ? t.editor : void 0;\n            }\n          },\n          name: {\n            get: function () {\n              var t;\n              return null != (t = this.inputElement) ? t.name : void 0;\n            }\n          },\n          value: {\n            get: function () {\n              var t;\n              return null != (t = this.inputElement) ? t.value : void 0;\n            },\n            set: function (t) {\n              var e;\n              return this.defaultValue = t, null != (e = this.editor) ? e.loadHTML(this.defaultValue) : void 0;\n            }\n          },\n          notify: function (t, e) {\n            return this.editorController ? a(\"trix-\" + t, {\n              onElement: this,\n              attributes: e\n            }) : void 0;\n          },\n          setInputElementValue: function (t) {\n            var e;\n            return null != (e = this.inputElement) ? e.value = t : void 0;\n          },\n          initialize: function () {\n            return this.hasAttribute(\"data-trix-internal\") ? void 0 : (m(this), c(this), f(this));\n          },\n          connect: function () {\n            return this.hasAttribute(\"data-trix-internal\") ? void 0 : (this.editorController || (a(\"trix-before-initialize\", {\n              onElement: this\n            }), this.editorController = new e.EditorController({\n              editorElement: this,\n              html: this.defaultValue = this.value\n            }), requestAnimationFrame(function (t) {\n              return function () {\n                return a(\"trix-initialize\", {\n                  onElement: t\n                });\n              };\n            }(this))), this.editorController.registerSelectionManager(), this.registerResetListener(), this.registerClickListener(), l(this));\n          },\n          disconnect: function () {\n            var t;\n            return null != (t = this.editorController) && t.unregisterSelectionManager(), this.unregisterResetListener(), this.unregisterClickListener();\n          },\n          registerResetListener: function () {\n            return this.resetListener = this.resetBubbled.bind(this), window.addEventListener(\"reset\", this.resetListener, !1);\n          },\n          unregisterResetListener: function () {\n            return window.removeEventListener(\"reset\", this.resetListener, !1);\n          },\n          registerClickListener: function () {\n            return this.clickListener = this.clickBubbled.bind(this), window.addEventListener(\"click\", this.clickListener, !1);\n          },\n          unregisterClickListener: function () {\n            return window.removeEventListener(\"click\", this.clickListener, !1);\n          },\n          resetBubbled: function (t) {\n            var e;\n            if (!t.defaultPrevented && t.target === (null != (e = this.inputElement) ? e.form : void 0)) return this.reset();\n          },\n          clickBubbled: function (t) {\n            var e;\n            if (!(t.defaultPrevented || this.contains(t.target) || !(e = i(t.target, {\n              matchingSelector: \"label\"\n            })) || u.call(this.labels, e) < 0)) return this.focus();\n          },\n          reset: function () {\n            return this.value = this.defaultValue;\n          }\n        };\n      }());\n    }.call(this), function () {}.call(this);\n  }).call(this), \"object\" == typeof module && module.exports ? module.exports = e : \"function\" == typeof define && define.amd && define(e);\n}.call(this);","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar activestorage = {\n  exports: {}\n};\n(function (module, exports) {\n  (function (global, factory) {\n    factory(exports);\n  })(commonjsGlobal, function (exports) {\n    var sparkMd5 = {\n      exports: {}\n    };\n    (function (module, exports) {\n      (function (factory) {\n        {\n          module.exports = factory();\n        }\n      })(function (undefined$1) {\n        var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n        function md5cycle(x, k) {\n          var a = x[0],\n            b = x[1],\n            c = x[2],\n            d = x[3];\n          a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n          a = (a << 7 | a >>> 25) + b | 0;\n          d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n          d = (d << 12 | d >>> 20) + a | 0;\n          c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n          c = (c << 17 | c >>> 15) + d | 0;\n          b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n          b = (b << 22 | b >>> 10) + c | 0;\n          a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n          a = (a << 7 | a >>> 25) + b | 0;\n          d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n          d = (d << 12 | d >>> 20) + a | 0;\n          c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n          c = (c << 17 | c >>> 15) + d | 0;\n          b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n          b = (b << 22 | b >>> 10) + c | 0;\n          a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n          a = (a << 7 | a >>> 25) + b | 0;\n          d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n          d = (d << 12 | d >>> 20) + a | 0;\n          c += (d & a | ~d & b) + k[10] - 42063 | 0;\n          c = (c << 17 | c >>> 15) + d | 0;\n          b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n          b = (b << 22 | b >>> 10) + c | 0;\n          a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n          a = (a << 7 | a >>> 25) + b | 0;\n          d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n          d = (d << 12 | d >>> 20) + a | 0;\n          c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n          c = (c << 17 | c >>> 15) + d | 0;\n          b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n          b = (b << 22 | b >>> 10) + c | 0;\n          a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n          a = (a << 5 | a >>> 27) + b | 0;\n          d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n          d = (d << 9 | d >>> 23) + a | 0;\n          c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n          c = (c << 14 | c >>> 18) + d | 0;\n          b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n          b = (b << 20 | b >>> 12) + c | 0;\n          a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n          a = (a << 5 | a >>> 27) + b | 0;\n          d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n          d = (d << 9 | d >>> 23) + a | 0;\n          c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n          c = (c << 14 | c >>> 18) + d | 0;\n          b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n          b = (b << 20 | b >>> 12) + c | 0;\n          a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n          a = (a << 5 | a >>> 27) + b | 0;\n          d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n          d = (d << 9 | d >>> 23) + a | 0;\n          c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n          c = (c << 14 | c >>> 18) + d | 0;\n          b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n          b = (b << 20 | b >>> 12) + c | 0;\n          a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n          a = (a << 5 | a >>> 27) + b | 0;\n          d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n          d = (d << 9 | d >>> 23) + a | 0;\n          c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n          c = (c << 14 | c >>> 18) + d | 0;\n          b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n          b = (b << 20 | b >>> 12) + c | 0;\n          a += (b ^ c ^ d) + k[5] - 378558 | 0;\n          a = (a << 4 | a >>> 28) + b | 0;\n          d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n          d = (d << 11 | d >>> 21) + a | 0;\n          c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n          c = (c << 16 | c >>> 16) + d | 0;\n          b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n          b = (b << 23 | b >>> 9) + c | 0;\n          a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n          a = (a << 4 | a >>> 28) + b | 0;\n          d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n          d = (d << 11 | d >>> 21) + a | 0;\n          c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n          c = (c << 16 | c >>> 16) + d | 0;\n          b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n          b = (b << 23 | b >>> 9) + c | 0;\n          a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n          a = (a << 4 | a >>> 28) + b | 0;\n          d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n          d = (d << 11 | d >>> 21) + a | 0;\n          c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n          c = (c << 16 | c >>> 16) + d | 0;\n          b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n          b = (b << 23 | b >>> 9) + c | 0;\n          a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n          a = (a << 4 | a >>> 28) + b | 0;\n          d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n          d = (d << 11 | d >>> 21) + a | 0;\n          c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n          c = (c << 16 | c >>> 16) + d | 0;\n          b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n          b = (b << 23 | b >>> 9) + c | 0;\n          a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n          a = (a << 6 | a >>> 26) + b | 0;\n          d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n          d = (d << 10 | d >>> 22) + a | 0;\n          c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n          c = (c << 15 | c >>> 17) + d | 0;\n          b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n          b = (b << 21 | b >>> 11) + c | 0;\n          a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n          a = (a << 6 | a >>> 26) + b | 0;\n          d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n          d = (d << 10 | d >>> 22) + a | 0;\n          c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n          c = (c << 15 | c >>> 17) + d | 0;\n          b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n          b = (b << 21 | b >>> 11) + c | 0;\n          a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n          a = (a << 6 | a >>> 26) + b | 0;\n          d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n          d = (d << 10 | d >>> 22) + a | 0;\n          c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n          c = (c << 15 | c >>> 17) + d | 0;\n          b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n          b = (b << 21 | b >>> 11) + c | 0;\n          a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n          a = (a << 6 | a >>> 26) + b | 0;\n          d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n          d = (d << 10 | d >>> 22) + a | 0;\n          c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n          c = (c << 15 | c >>> 17) + d | 0;\n          b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n          b = (b << 21 | b >>> 11) + c | 0;\n          x[0] = a + x[0] | 0;\n          x[1] = b + x[1] | 0;\n          x[2] = c + x[2] | 0;\n          x[3] = d + x[3] | 0;\n        }\n        function md5blk(s) {\n          var md5blks = [],\n            i;\n          for (i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n          }\n          return md5blks;\n        }\n        function md5blk_array(a) {\n          var md5blks = [],\n            i;\n          for (i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n          }\n          return md5blks;\n        }\n        function md51(s) {\n          var n = s.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n          for (i = 64; i <= n; i += 64) {\n            md5cycle(state, md5blk(s.substring(i - 64, i)));\n          }\n          s = s.substring(i - 64);\n          length = s.length;\n          tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n          for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n          }\n          tail[i >> 2] |= 128 << (i % 4 << 3);\n          if (i > 55) {\n            md5cycle(state, tail);\n            for (i = 0; i < 16; i += 1) {\n              tail[i] = 0;\n            }\n          }\n          tmp = n * 8;\n          tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n          lo = parseInt(tmp[2], 16);\n          hi = parseInt(tmp[1], 16) || 0;\n          tail[14] = lo;\n          tail[15] = hi;\n          md5cycle(state, tail);\n          return state;\n        }\n        function md51_array(a) {\n          var n = a.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n          for (i = 64; i <= n; i += 64) {\n            md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n          }\n          a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n          length = a.length;\n          tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n          for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= a[i] << (i % 4 << 3);\n          }\n          tail[i >> 2] |= 128 << (i % 4 << 3);\n          if (i > 55) {\n            md5cycle(state, tail);\n            for (i = 0; i < 16; i += 1) {\n              tail[i] = 0;\n            }\n          }\n          tmp = n * 8;\n          tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n          lo = parseInt(tmp[2], 16);\n          hi = parseInt(tmp[1], 16) || 0;\n          tail[14] = lo;\n          tail[15] = hi;\n          md5cycle(state, tail);\n          return state;\n        }\n        function rhex(n) {\n          var s = \"\",\n            j;\n          for (j = 0; j < 4; j += 1) {\n            s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n          }\n          return s;\n        }\n        function hex(x) {\n          var i;\n          for (i = 0; i < x.length; i += 1) {\n            x[i] = rhex(x[i]);\n          }\n          return x.join(\"\");\n        }\n        if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n        if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n          (function () {\n            function clamp(val, length) {\n              val = val | 0 || 0;\n              if (val < 0) {\n                return Math.max(val + length, 0);\n              }\n              return Math.min(val, length);\n            }\n            ArrayBuffer.prototype.slice = function (from, to) {\n              var length = this.byteLength,\n                begin = clamp(from, length),\n                end = length,\n                num,\n                target,\n                targetArray,\n                sourceArray;\n              if (to !== undefined$1) {\n                end = clamp(to, length);\n              }\n              if (begin > end) {\n                return new ArrayBuffer(0);\n              }\n              num = end - begin;\n              target = new ArrayBuffer(num);\n              targetArray = new Uint8Array(target);\n              sourceArray = new Uint8Array(this, begin, num);\n              targetArray.set(sourceArray);\n              return target;\n            };\n          })();\n        }\n        function toUtf8(str) {\n          if (/[\\u0080-\\uFFFF]/.test(str)) {\n            str = unescape(encodeURIComponent(str));\n          }\n          return str;\n        }\n        function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n          var length = str.length,\n            buff = new ArrayBuffer(length),\n            arr = new Uint8Array(buff),\n            i;\n          for (i = 0; i < length; i += 1) {\n            arr[i] = str.charCodeAt(i);\n          }\n          return returnUInt8Array ? arr : buff;\n        }\n        function arrayBuffer2Utf8Str(buff) {\n          return String.fromCharCode.apply(null, new Uint8Array(buff));\n        }\n        function concatenateArrayBuffers(first, second, returnUInt8Array) {\n          var result = new Uint8Array(first.byteLength + second.byteLength);\n          result.set(new Uint8Array(first));\n          result.set(new Uint8Array(second), first.byteLength);\n          return returnUInt8Array ? result : result.buffer;\n        }\n        function hexToBinaryString(hex) {\n          var bytes = [],\n            length = hex.length,\n            x;\n          for (x = 0; x < length - 1; x += 2) {\n            bytes.push(parseInt(hex.substr(x, 2), 16));\n          }\n          return String.fromCharCode.apply(String, bytes);\n        }\n        function SparkMD5() {\n          this.reset();\n        }\n        SparkMD5.prototype.append = function (str) {\n          this.appendBinary(toUtf8(str));\n          return this;\n        };\n        SparkMD5.prototype.appendBinary = function (contents) {\n          this._buff += contents;\n          this._length += contents.length;\n          var length = this._buff.length,\n            i;\n          for (i = 64; i <= length; i += 64) {\n            md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n          }\n          this._buff = this._buff.substring(i - 64);\n          return this;\n        };\n        SparkMD5.prototype.end = function (raw) {\n          var buff = this._buff,\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          for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n          }\n          this._finish(tail, length);\n          ret = hex(this._hash);\n          if (raw) {\n            ret = hexToBinaryString(ret);\n          }\n          this.reset();\n          return ret;\n        };\n        SparkMD5.prototype.reset = function () {\n          this._buff = \"\";\n          this._length = 0;\n          this._hash = [1732584193, -271733879, -1732584194, 271733878];\n          return this;\n        };\n        SparkMD5.prototype.getState = function () {\n          return {\n            buff: this._buff,\n            length: this._length,\n            hash: this._hash.slice()\n          };\n        };\n        SparkMD5.prototype.setState = function (state) {\n          this._buff = state.buff;\n          this._length = state.length;\n          this._hash = state.hash;\n          return this;\n        };\n        SparkMD5.prototype.destroy = function () {\n          delete this._hash;\n          delete this._buff;\n          delete this._length;\n        };\n        SparkMD5.prototype._finish = function (tail, length) {\n          var i = length,\n            tmp,\n            lo,\n            hi;\n          tail[i >> 2] |= 128 << (i % 4 << 3);\n          if (i > 55) {\n            md5cycle(this._hash, tail);\n            for (i = 0; i < 16; i += 1) {\n              tail[i] = 0;\n            }\n          }\n          tmp = this._length * 8;\n          tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n          lo = parseInt(tmp[2], 16);\n          hi = parseInt(tmp[1], 16) || 0;\n          tail[14] = lo;\n          tail[15] = hi;\n          md5cycle(this._hash, tail);\n        };\n        SparkMD5.hash = function (str, raw) {\n          return SparkMD5.hashBinary(toUtf8(str), raw);\n        };\n        SparkMD5.hashBinary = function (content, raw) {\n          var hash = md51(content),\n            ret = hex(hash);\n          return raw ? hexToBinaryString(ret) : ret;\n        };\n        SparkMD5.ArrayBuffer = function () {\n          this.reset();\n        };\n        SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n          var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n            length = buff.length,\n            i;\n          this._length += arr.byteLength;\n          for (i = 64; i <= length; i += 64) {\n            md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n          }\n          this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n          return this;\n        };\n        SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n          var buff = this._buff,\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          for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= buff[i] << (i % 4 << 3);\n          }\n          this._finish(tail, length);\n          ret = hex(this._hash);\n          if (raw) {\n            ret = hexToBinaryString(ret);\n          }\n          this.reset();\n          return ret;\n        };\n        SparkMD5.ArrayBuffer.prototype.reset = function () {\n          this._buff = new Uint8Array(0);\n          this._length = 0;\n          this._hash = [1732584193, -271733879, -1732584194, 271733878];\n          return this;\n        };\n        SparkMD5.ArrayBuffer.prototype.getState = function () {\n          var state = SparkMD5.prototype.getState.call(this);\n          state.buff = arrayBuffer2Utf8Str(state.buff);\n          return state;\n        };\n        SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n          state.buff = utf8Str2ArrayBuffer(state.buff, true);\n          return SparkMD5.prototype.setState.call(this, state);\n        };\n        SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n        SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n        SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n          var hash = md51_array(new Uint8Array(arr)),\n            ret = hex(hash);\n          return raw ? hexToBinaryString(ret) : ret;\n        };\n        return SparkMD5;\n      });\n    })(sparkMd5);\n    var SparkMD5 = sparkMd5.exports;\n    const fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n    class FileChecksum {\n      static create(file, callback) {\n        const instance = new FileChecksum(file);\n        instance.create(callback);\n      }\n      constructor(file) {\n        this.file = file;\n        this.chunkSize = 2097152;\n        this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n        this.chunkIndex = 0;\n      }\n      create(callback) {\n        this.callback = callback;\n        this.md5Buffer = new SparkMD5.ArrayBuffer();\n        this.fileReader = new FileReader();\n        this.fileReader.addEventListener(\"load\", event => this.fileReaderDidLoad(event));\n        this.fileReader.addEventListener(\"error\", event => this.fileReaderDidError(event));\n        this.readNextChunk();\n      }\n      fileReaderDidLoad(event) {\n        this.md5Buffer.append(event.target.result);\n        if (!this.readNextChunk()) {\n          const binaryDigest = this.md5Buffer.end(true);\n          const base64digest = btoa(binaryDigest);\n          this.callback(null, base64digest);\n        }\n      }\n      fileReaderDidError(event) {\n        this.callback(`Error reading ${this.file.name}`);\n      }\n      readNextChunk() {\n        if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n          const start = this.chunkIndex * this.chunkSize;\n          const end = Math.min(start + this.chunkSize, this.file.size);\n          const bytes = fileSlice.call(this.file, start, end);\n          this.fileReader.readAsArrayBuffer(bytes);\n          this.chunkIndex++;\n          return true;\n        } else {\n          return false;\n        }\n      }\n    }\n    function getMetaValue(name) {\n      const element = findElement(document.head, `meta[name=\"${name}\"]`);\n      if (element) {\n        return element.getAttribute(\"content\");\n      }\n    }\n    function findElements(root, selector) {\n      if (typeof root == \"string\") {\n        selector = root;\n        root = document;\n      }\n      const elements = root.querySelectorAll(selector);\n      return toArray(elements);\n    }\n    function findElement(root, selector) {\n      if (typeof root == \"string\") {\n        selector = root;\n        root = document;\n      }\n      return root.querySelector(selector);\n    }\n    function dispatchEvent(element, type) {\n      let eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      const disabled = element.disabled;\n      const bubbles = eventInit.bubbles,\n        cancelable = eventInit.cancelable,\n        detail = eventInit.detail;\n      const event = document.createEvent(\"Event\");\n      event.initEvent(type, bubbles || true, cancelable || true);\n      event.detail = detail || {};\n      try {\n        element.disabled = false;\n        element.dispatchEvent(event);\n      } finally {\n        element.disabled = disabled;\n      }\n      return event;\n    }\n    function toArray(value) {\n      if (Array.isArray(value)) {\n        return value;\n      } else if (Array.from) {\n        return Array.from(value);\n      } else {\n        return [].slice.call(value);\n      }\n    }\n    class BlobRecord {\n      constructor(file, checksum, url) {\n        this.file = file;\n        this.attributes = {\n          filename: file.name,\n          content_type: file.type || \"application/octet-stream\",\n          byte_size: file.size,\n          checksum: checksum\n        };\n        this.xhr = new XMLHttpRequest();\n        this.xhr.open(\"POST\", url, true);\n        this.xhr.responseType = \"json\";\n        this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n        this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n        this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n        const csrfToken = getMetaValue(\"csrf-token\");\n        if (csrfToken != undefined) {\n          this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n        }\n        this.xhr.addEventListener(\"load\", event => this.requestDidLoad(event));\n        this.xhr.addEventListener(\"error\", event => this.requestDidError(event));\n      }\n      get status() {\n        return this.xhr.status;\n      }\n      get response() {\n        const _this$xhr = this.xhr,\n          responseType = _this$xhr.responseType,\n          response = _this$xhr.response;\n        if (responseType == \"json\") {\n          return response;\n        } else {\n          return JSON.parse(response);\n        }\n      }\n      create(callback) {\n        this.callback = callback;\n        this.xhr.send(JSON.stringify({\n          blob: this.attributes\n        }));\n      }\n      requestDidLoad(event) {\n        if (this.status >= 200 && this.status < 300) {\n          const response = this.response;\n          const direct_upload = response.direct_upload;\n          delete response.direct_upload;\n          this.attributes = response;\n          this.directUploadData = direct_upload;\n          this.callback(null, this.toJSON());\n        } else {\n          this.requestDidError(event);\n        }\n      }\n      requestDidError(event) {\n        this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n      }\n      toJSON() {\n        const result = {};\n        for (const key in this.attributes) {\n          result[key] = this.attributes[key];\n        }\n        return result;\n      }\n    }\n    class BlobUpload {\n      constructor(blob) {\n        this.blob = blob;\n        this.file = blob.file;\n        const _blob$directUploadDat = blob.directUploadData,\n          url = _blob$directUploadDat.url,\n          headers = _blob$directUploadDat.headers;\n        this.xhr = new XMLHttpRequest();\n        this.xhr.open(\"PUT\", url, true);\n        this.xhr.responseType = \"text\";\n        for (const key in headers) {\n          this.xhr.setRequestHeader(key, headers[key]);\n        }\n        this.xhr.addEventListener(\"load\", event => this.requestDidLoad(event));\n        this.xhr.addEventListener(\"error\", event => this.requestDidError(event));\n      }\n      create(callback) {\n        this.callback = callback;\n        this.xhr.send(this.file.slice());\n      }\n      requestDidLoad(event) {\n        const _this$xhr2 = this.xhr,\n          status = _this$xhr2.status,\n          response = _this$xhr2.response;\n        if (status >= 200 && status < 300) {\n          this.callback(null, response);\n        } else {\n          this.requestDidError(event);\n        }\n      }\n      requestDidError(event) {\n        this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n      }\n    }\n    let id = 0;\n    class DirectUpload {\n      constructor(file, url, delegate) {\n        this.id = ++id;\n        this.file = file;\n        this.url = url;\n        this.delegate = delegate;\n      }\n      create(callback) {\n        FileChecksum.create(this.file, (error, checksum) => {\n          if (error) {\n            callback(error);\n            return;\n          }\n          const blob = new BlobRecord(this.file, checksum, this.url);\n          notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n          blob.create(error => {\n            if (error) {\n              callback(error);\n            } else {\n              const upload = new BlobUpload(blob);\n              notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n              upload.create(error => {\n                if (error) {\n                  callback(error);\n                } else {\n                  callback(null, blob.toJSON());\n                }\n              });\n            }\n          });\n        });\n      }\n    }\n    function notify(object, methodName) {\n      if (object && typeof object[methodName] == \"function\") {\n        for (var _len = arguments.length, messages = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n          messages[_key - 2] = arguments[_key];\n        }\n        return object[methodName](...messages);\n      }\n    }\n    class DirectUploadController {\n      constructor(input, file) {\n        this.input = input;\n        this.file = file;\n        this.directUpload = new DirectUpload(this.file, this.url, this);\n        this.dispatch(\"initialize\");\n      }\n      start(callback) {\n        const hiddenInput = document.createElement(\"input\");\n        hiddenInput.type = \"hidden\";\n        hiddenInput.name = this.input.name;\n        this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n        this.dispatch(\"start\");\n        this.directUpload.create((error, attributes) => {\n          if (error) {\n            hiddenInput.parentNode.removeChild(hiddenInput);\n            this.dispatchError(error);\n          } else {\n            hiddenInput.value = attributes.signed_id;\n          }\n          this.dispatch(\"end\");\n          callback(error);\n        });\n      }\n      uploadRequestDidProgress(event) {\n        const progress = event.loaded / event.total * 100;\n        if (progress) {\n          this.dispatch(\"progress\", {\n            progress: progress\n          });\n        }\n      }\n      get url() {\n        return this.input.getAttribute(\"data-direct-upload-url\");\n      }\n      dispatch(name) {\n        let detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        detail.file = this.file;\n        detail.id = this.directUpload.id;\n        return dispatchEvent(this.input, `direct-upload:${name}`, {\n          detail: detail\n        });\n      }\n      dispatchError(error) {\n        const event = this.dispatch(\"error\", {\n          error: error\n        });\n        if (!event.defaultPrevented) {\n          alert(error);\n        }\n      }\n      directUploadWillCreateBlobWithXHR(xhr) {\n        this.dispatch(\"before-blob-request\", {\n          xhr: xhr\n        });\n      }\n      directUploadWillStoreFileWithXHR(xhr) {\n        this.dispatch(\"before-storage-request\", {\n          xhr: xhr\n        });\n        xhr.upload.addEventListener(\"progress\", event => this.uploadRequestDidProgress(event));\n      }\n    }\n    const inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n    class DirectUploadsController {\n      constructor(form) {\n        this.form = form;\n        this.inputs = findElements(form, inputSelector).filter(input => input.files.length);\n      }\n      start(callback) {\n        const controllers = this.createDirectUploadControllers();\n        const startNextController = () => {\n          const controller = controllers.shift();\n          if (controller) {\n            controller.start(error => {\n              if (error) {\n                callback(error);\n                this.dispatch(\"end\");\n              } else {\n                startNextController();\n              }\n            });\n          } else {\n            callback();\n            this.dispatch(\"end\");\n          }\n        };\n        this.dispatch(\"start\");\n        startNextController();\n      }\n      createDirectUploadControllers() {\n        const controllers = [];\n        this.inputs.forEach(input => {\n          toArray(input.files).forEach(file => {\n            const controller = new DirectUploadController(input, file);\n            controllers.push(controller);\n          });\n        });\n        return controllers;\n      }\n      dispatch(name) {\n        let detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        return dispatchEvent(this.form, `direct-uploads:${name}`, {\n          detail: detail\n        });\n      }\n    }\n    const processingAttribute = \"data-direct-uploads-processing\";\n    const submitButtonsByForm = new WeakMap();\n    let started = false;\n    function start() {\n      if (!started) {\n        started = true;\n        document.addEventListener(\"click\", didClick, true);\n        document.addEventListener(\"submit\", didSubmitForm, true);\n        document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n      }\n    }\n    function didClick(event) {\n      const target = event.target;\n      if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n        submitButtonsByForm.set(target.form, target);\n      }\n    }\n    function didSubmitForm(event) {\n      handleFormSubmissionEvent(event);\n    }\n    function didSubmitRemoteElement(event) {\n      if (event.target.tagName == \"FORM\") {\n        handleFormSubmissionEvent(event);\n      }\n    }\n    function handleFormSubmissionEvent(event) {\n      const form = event.target;\n      if (form.hasAttribute(processingAttribute)) {\n        event.preventDefault();\n        return;\n      }\n      const controller = new DirectUploadsController(form);\n      const inputs = controller.inputs;\n      if (inputs.length) {\n        event.preventDefault();\n        form.setAttribute(processingAttribute, \"\");\n        inputs.forEach(disable);\n        controller.start(error => {\n          form.removeAttribute(processingAttribute);\n          if (error) {\n            inputs.forEach(enable);\n          } else {\n            submitForm(form);\n          }\n        });\n      }\n    }\n    function submitForm(form) {\n      let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n      if (button) {\n        const _button = button,\n          disabled = _button.disabled;\n        button.disabled = false;\n        button.focus();\n        button.click();\n        button.disabled = disabled;\n      } else {\n        button = document.createElement(\"input\");\n        button.type = \"submit\";\n        button.style.display = \"none\";\n        form.appendChild(button);\n        button.click();\n        form.removeChild(button);\n      }\n      submitButtonsByForm.delete(form);\n    }\n    function disable(input) {\n      input.disabled = true;\n    }\n    function enable(input) {\n      input.disabled = false;\n    }\n    function autostart() {\n      if (window.ActiveStorage) {\n        start();\n      }\n    }\n    setTimeout(autostart, 1);\n    exports.DirectUpload = DirectUpload;\n    exports.start = start;\n    Object.defineProperty(exports, \"__esModule\", {\n      value: true\n    });\n  });\n})(activestorage, activestorage.exports);\nclass AttachmentUpload {\n  constructor(attachment, element) {\n    this.attachment = attachment;\n    this.element = element;\n    this.directUpload = new activestorage.exports.DirectUpload(attachment.file, this.directUploadUrl, this);\n  }\n  start() {\n    this.directUpload.create(this.directUploadDidComplete.bind(this));\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    xhr.upload.addEventListener(\"progress\", event => {\n      const progress = event.loaded / event.total * 100;\n      this.attachment.setUploadProgress(progress);\n    });\n  }\n  directUploadDidComplete(error, attributes) {\n    if (error) {\n      throw new Error(`Direct upload failed: ${error}`);\n    }\n    this.attachment.setAttributes({\n      sgid: attributes.attachable_sgid,\n      url: this.createBlobUrl(attributes.signed_id, attributes.filename)\n    });\n  }\n  createBlobUrl(signedId, filename) {\n    return this.blobUrlTemplate.replace(\":signed_id\", signedId).replace(\":filename\", encodeURIComponent(filename));\n  }\n  get directUploadUrl() {\n    return this.element.dataset.directUploadUrl;\n  }\n  get blobUrlTemplate() {\n    return this.element.dataset.blobUrlTemplate;\n  }\n}\naddEventListener(\"trix-attachment-add\", event => {\n  const attachment = event.attachment,\n    target = event.target;\n  if (attachment.file) {\n    const upload = new AttachmentUpload(attachment, target);\n    upload.start();\n  }\n});","var scope = typeof global !== \"undefined\" && global || typeof self !== \"undefined\" && self || window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function () {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function () {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function () {};\nTimeout.prototype.close = function () {\n  this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function (item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\nexports.unenroll = function (item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\nexports._unrefActive = exports.active = function (item) {\n  clearTimeout(item._idleTimeoutId);\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout) item._onTimeout();\n    }, msecs);\n  }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = typeof self !== \"undefined\" && self.setImmediate || typeof global !== \"undefined\" && global.setImmediate || this && this.setImmediate;\nexports.clearImmediate = typeof self !== \"undefined\" && self.clearImmediate || typeof global !== \"undefined\" && global.clearImmediate || this && this.clearImmediate;","(function (global, undefined) {\n  \"use strict\";\n\n  if (global.setImmediate) {\n    return;\n  }\n  var nextHandle = 1; // Spec says greater than zero\n  var tasksByHandle = {};\n  var currentlyRunningATask = false;\n  var doc = global.document;\n  var registerImmediate;\n  function setImmediate(callback) {\n    // Callback can either be a function or a string\n    if (typeof callback !== \"function\") {\n      callback = new Function(\"\" + callback);\n    }\n    // Copy function arguments\n    var args = new Array(arguments.length - 1);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i + 1];\n    }\n    // Store and register the task\n    var task = {\n      callback: callback,\n      args: args\n    };\n    tasksByHandle[nextHandle] = task;\n    registerImmediate(nextHandle);\n    return nextHandle++;\n  }\n  function clearImmediate(handle) {\n    delete tasksByHandle[handle];\n  }\n  function run(task) {\n    var callback = task.callback;\n    var args = task.args;\n    switch (args.length) {\n      case 0:\n        callback();\n        break;\n      case 1:\n        callback(args[0]);\n        break;\n      case 2:\n        callback(args[0], args[1]);\n        break;\n      case 3:\n        callback(args[0], args[1], args[2]);\n        break;\n      default:\n        callback.apply(undefined, args);\n        break;\n    }\n  }\n  function runIfPresent(handle) {\n    // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n    // So if we're currently running a task, we'll need to delay this invocation.\n    if (currentlyRunningATask) {\n      // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n      // \"too much recursion\" error.\n      setTimeout(runIfPresent, 0, handle);\n    } else {\n      var task = tasksByHandle[handle];\n      if (task) {\n        currentlyRunningATask = true;\n        try {\n          run(task);\n        } finally {\n          clearImmediate(handle);\n          currentlyRunningATask = false;\n        }\n      }\n    }\n  }\n  function installNextTickImplementation() {\n    registerImmediate = function (handle) {\n      process.nextTick(function () {\n        runIfPresent(handle);\n      });\n    };\n  }\n  function canUsePostMessage() {\n    // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n    // where `global.postMessage` means something completely different and can't be used for this purpose.\n    if (global.postMessage && !global.importScripts) {\n      var postMessageIsAsynchronous = true;\n      var oldOnMessage = global.onmessage;\n      global.onmessage = function () {\n        postMessageIsAsynchronous = false;\n      };\n      global.postMessage(\"\", \"*\");\n      global.onmessage = oldOnMessage;\n      return postMessageIsAsynchronous;\n    }\n  }\n  function installPostMessageImplementation() {\n    // Installs an event handler on `global` for the `message` event: see\n    // * https://developer.mozilla.org/en/DOM/window.postMessage\n    // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n    var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n    var onGlobalMessage = function (event) {\n      if (event.source === global && typeof event.data === \"string\" && event.data.indexOf(messagePrefix) === 0) {\n        runIfPresent(+event.data.slice(messagePrefix.length));\n      }\n    };\n    if (global.addEventListener) {\n      global.addEventListener(\"message\", onGlobalMessage, false);\n    } else {\n      global.attachEvent(\"onmessage\", onGlobalMessage);\n    }\n    registerImmediate = function (handle) {\n      global.postMessage(messagePrefix + handle, \"*\");\n    };\n  }\n  function installMessageChannelImplementation() {\n    var channel = new MessageChannel();\n    channel.port1.onmessage = function (event) {\n      var handle = event.data;\n      runIfPresent(handle);\n    };\n    registerImmediate = function (handle) {\n      channel.port2.postMessage(handle);\n    };\n  }\n  function installReadyStateChangeImplementation() {\n    var html = doc.documentElement;\n    registerImmediate = function (handle) {\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var script = doc.createElement(\"script\");\n      script.onreadystatechange = function () {\n        runIfPresent(handle);\n        script.onreadystatechange = null;\n        html.removeChild(script);\n        script = null;\n      };\n      html.appendChild(script);\n    };\n  }\n  function installSetTimeoutImplementation() {\n    registerImmediate = function (handle) {\n      setTimeout(runIfPresent, 0, handle);\n    };\n  }\n\n  // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n  var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n  attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n  // Don't get fooled by e.g. browserify environments.\n  if ({}.toString.call(global.process) === \"[object process]\") {\n    // For Node.js before 0.9\n    installNextTickImplementation();\n  } else if (canUsePostMessage()) {\n    // For non-IE10 modern browsers\n    installPostMessageImplementation();\n  } else if (global.MessageChannel) {\n    // For web workers, where supported\n    installMessageChannelImplementation();\n  } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n    // For IE 6–8\n    installReadyStateChangeImplementation();\n  } else {\n    // For older browsers\n    installSetTimeoutImplementation();\n  }\n  attachTo.setImmediate = setImmediate;\n  attachTo.clearImmediate = clearImmediate;\n})(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self);","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\nfunction defaultSetTimout() {\n  throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout() {\n  throw new Error('clearTimeout has not been defined');\n}\n(function () {\n  try {\n    if (typeof setTimeout === 'function') {\n      cachedSetTimeout = setTimeout;\n    } else {\n      cachedSetTimeout = defaultSetTimout;\n    }\n  } catch (e) {\n    cachedSetTimeout = defaultSetTimout;\n  }\n  try {\n    if (typeof clearTimeout === 'function') {\n      cachedClearTimeout = clearTimeout;\n    } else {\n      cachedClearTimeout = defaultClearTimeout;\n    }\n  } catch (e) {\n    cachedClearTimeout = defaultClearTimeout;\n  }\n})();\nfunction runTimeout(fun) {\n  if (cachedSetTimeout === setTimeout) {\n    //normal enviroments in sane situations\n    return setTimeout(fun, 0);\n  }\n  // if setTimeout wasn't available but was latter defined\n  if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n    cachedSetTimeout = setTimeout;\n    return setTimeout(fun, 0);\n  }\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedSetTimeout(fun, 0);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n      return cachedSetTimeout.call(null, fun, 0);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n      return cachedSetTimeout.call(this, fun, 0);\n    }\n  }\n}\nfunction runClearTimeout(marker) {\n  if (cachedClearTimeout === clearTimeout) {\n    //normal enviroments in sane situations\n    return clearTimeout(marker);\n  }\n  // if clearTimeout wasn't available but was latter defined\n  if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n    cachedClearTimeout = clearTimeout;\n    return clearTimeout(marker);\n  }\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedClearTimeout(marker);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n      return cachedClearTimeout.call(null, marker);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n      // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n      return cachedClearTimeout.call(this, marker);\n    }\n  }\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\nfunction cleanUpNextTick() {\n  if (!draining || !currentQueue) {\n    return;\n  }\n  draining = false;\n  if (currentQueue.length) {\n    queue = currentQueue.concat(queue);\n  } else {\n    queueIndex = -1;\n  }\n  if (queue.length) {\n    drainQueue();\n  }\n}\nfunction drainQueue() {\n  if (draining) {\n    return;\n  }\n  var timeout = runTimeout(cleanUpNextTick);\n  draining = true;\n  var len = queue.length;\n  while (len) {\n    currentQueue = queue;\n    queue = [];\n    while (++queueIndex < len) {\n      if (currentQueue) {\n        currentQueue[queueIndex].run();\n      }\n    }\n    queueIndex = -1;\n    len = queue.length;\n  }\n  currentQueue = null;\n  draining = false;\n  runClearTimeout(timeout);\n}\nprocess.nextTick = function (fun) {\n  var args = new Array(arguments.length - 1);\n  if (arguments.length > 1) {\n    for (var i = 1; i < arguments.length; i++) {\n      args[i - 1] = arguments[i];\n    }\n  }\n  queue.push(new Item(fun, args));\n  if (queue.length === 1 && !draining) {\n    runTimeout(drainQueue);\n  }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n  this.fun = fun;\n  this.array = array;\n}\nItem.prototype.run = function () {\n  this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\nfunction noop() {}\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\nprocess.listeners = function (name) {\n  return [];\n};\nprocess.binding = function (name) {\n  throw new Error('process.binding is not supported');\n};\nprocess.cwd = function () {\n  return '/';\n};\nprocess.chdir = function (dir) {\n  throw new Error('process.chdir is not supported');\n};\nprocess.umask = function () {\n  return 0;\n};","var sparkMd5 = {\n  exports: {}\n};\n(function (module, exports) {\n  (function (factory) {\n    {\n      module.exports = factory();\n    }\n  })(function (undefined$1) {\n    var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n    function md5cycle(x, k) {\n      var a = x[0],\n        b = x[1],\n        c = x[2],\n        d = x[3];\n      a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[10] - 42063 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b ^ c ^ d) + k[5] - 378558 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      x[0] = a + x[0] | 0;\n      x[1] = b + x[1] | 0;\n      x[2] = c + x[2] | 0;\n      x[3] = d + x[3] | 0;\n    }\n    function md5blk(s) {\n      var md5blks = [],\n        i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n      }\n      return md5blks;\n    }\n    function md5blk_array(a) {\n      var md5blks = [],\n        i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n      }\n      return md5blks;\n    }\n    function md51(s) {\n      var n = s.length,\n        state = [1732584193, -271733879, -1732584194, 271733878],\n        i,\n        length,\n        tail,\n        tmp,\n        lo,\n        hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk(s.substring(i - 64, i)));\n      }\n      s = s.substring(i - 64);\n      length = s.length;\n      tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function md51_array(a) {\n      var n = a.length,\n        state = [1732584193, -271733879, -1732584194, 271733878],\n        i,\n        length,\n        tail,\n        tmp,\n        lo,\n        hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n      }\n      a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n      length = a.length;\n      tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= a[i] << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function rhex(n) {\n      var s = \"\",\n        j;\n      for (j = 0; j < 4; j += 1) {\n        s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n      }\n      return s;\n    }\n    function hex(x) {\n      var i;\n      for (i = 0; i < x.length; i += 1) {\n        x[i] = rhex(x[i]);\n      }\n      return x.join(\"\");\n    }\n    if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n    if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n      (function () {\n        function clamp(val, length) {\n          val = val | 0 || 0;\n          if (val < 0) {\n            return Math.max(val + length, 0);\n          }\n          return Math.min(val, length);\n        }\n        ArrayBuffer.prototype.slice = function (from, to) {\n          var length = this.byteLength,\n            begin = clamp(from, length),\n            end = length,\n            num,\n            target,\n            targetArray,\n            sourceArray;\n          if (to !== undefined$1) {\n            end = clamp(to, length);\n          }\n          if (begin > end) {\n            return new ArrayBuffer(0);\n          }\n          num = end - begin;\n          target = new ArrayBuffer(num);\n          targetArray = new Uint8Array(target);\n          sourceArray = new Uint8Array(this, begin, num);\n          targetArray.set(sourceArray);\n          return target;\n        };\n      })();\n    }\n    function toUtf8(str) {\n      if (/[\\u0080-\\uFFFF]/.test(str)) {\n        str = unescape(encodeURIComponent(str));\n      }\n      return str;\n    }\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n      var length = str.length,\n        buff = new ArrayBuffer(length),\n        arr = new Uint8Array(buff),\n        i;\n      for (i = 0; i < length; i += 1) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return returnUInt8Array ? arr : buff;\n    }\n    function arrayBuffer2Utf8Str(buff) {\n      return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n      var result = new Uint8Array(first.byteLength + second.byteLength);\n      result.set(new Uint8Array(first));\n      result.set(new Uint8Array(second), first.byteLength);\n      return returnUInt8Array ? result : result.buffer;\n    }\n    function hexToBinaryString(hex) {\n      var bytes = [],\n        length = hex.length,\n        x;\n      for (x = 0; x < length - 1; x += 2) {\n        bytes.push(parseInt(hex.substr(x, 2), 16));\n      }\n      return String.fromCharCode.apply(String, bytes);\n    }\n    function SparkMD5() {\n      this.reset();\n    }\n    SparkMD5.prototype.append = function (str) {\n      this.appendBinary(toUtf8(str));\n      return this;\n    };\n    SparkMD5.prototype.appendBinary = function (contents) {\n      this._buff += contents;\n      this._length += contents.length;\n      var length = this._buff.length,\n        i;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n      }\n      this._buff = this._buff.substring(i - 64);\n      return this;\n    };\n    SparkMD5.prototype.end = function (raw) {\n      var buff = this._buff,\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      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.prototype.reset = function () {\n      this._buff = \"\";\n      this._length = 0;\n      this._hash = [1732584193, -271733879, -1732584194, 271733878];\n      return this;\n    };\n    SparkMD5.prototype.getState = function () {\n      return {\n        buff: this._buff,\n        length: this._length,\n        hash: this._hash.slice()\n      };\n    };\n    SparkMD5.prototype.setState = function (state) {\n      this._buff = state.buff;\n      this._length = state.length;\n      this._hash = state.hash;\n      return this;\n    };\n    SparkMD5.prototype.destroy = function () {\n      delete this._hash;\n      delete this._buff;\n      delete this._length;\n    };\n    SparkMD5.prototype._finish = function (tail, length) {\n      var i = length,\n        tmp,\n        lo,\n        hi;\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(this._hash, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = this._length * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(this._hash, tail);\n    };\n    SparkMD5.hash = function (str, raw) {\n      return SparkMD5.hashBinary(toUtf8(str), raw);\n    };\n    SparkMD5.hashBinary = function (content, raw) {\n      var hash = md51(content),\n        ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    SparkMD5.ArrayBuffer = function () {\n      this.reset();\n    };\n    SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n      var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n        length = buff.length,\n        i;\n      this._length += arr.byteLength;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n      }\n      this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n      var buff = this._buff,\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      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff[i] << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.ArrayBuffer.prototype.reset = function () {\n      this._buff = new Uint8Array(0);\n      this._length = 0;\n      this._hash = [1732584193, -271733879, -1732584194, 271733878];\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.getState = function () {\n      var state = SparkMD5.prototype.getState.call(this);\n      state.buff = arrayBuffer2Utf8Str(state.buff);\n      return state;\n    };\n    SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n      state.buff = utf8Str2ArrayBuffer(state.buff, true);\n      return SparkMD5.prototype.setState.call(this, state);\n    };\n    SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n    SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n    SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n      var hash = md51_array(new Uint8Array(arr)),\n        ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    return SparkMD5;\n  });\n})(sparkMd5);\nvar SparkMD5 = sparkMd5.exports;\nconst fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\nclass FileChecksum {\n  static create(file, callback) {\n    const instance = new FileChecksum(file);\n    instance.create(callback);\n  }\n  constructor(file) {\n    this.file = file;\n    this.chunkSize = 2097152;\n    this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n    this.chunkIndex = 0;\n  }\n  create(callback) {\n    this.callback = callback;\n    this.md5Buffer = new SparkMD5.ArrayBuffer();\n    this.fileReader = new FileReader();\n    this.fileReader.addEventListener(\"load\", event => this.fileReaderDidLoad(event));\n    this.fileReader.addEventListener(\"error\", event => this.fileReaderDidError(event));\n    this.readNextChunk();\n  }\n  fileReaderDidLoad(event) {\n    this.md5Buffer.append(event.target.result);\n    if (!this.readNextChunk()) {\n      const binaryDigest = this.md5Buffer.end(true);\n      const base64digest = btoa(binaryDigest);\n      this.callback(null, base64digest);\n    }\n  }\n  fileReaderDidError(event) {\n    this.callback(`Error reading ${this.file.name}`);\n  }\n  readNextChunk() {\n    if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n      const start = this.chunkIndex * this.chunkSize;\n      const end = Math.min(start + this.chunkSize, this.file.size);\n      const bytes = fileSlice.call(this.file, start, end);\n      this.fileReader.readAsArrayBuffer(bytes);\n      this.chunkIndex++;\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\nfunction getMetaValue(name) {\n  const element = findElement(document.head, `meta[name=\"${name}\"]`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\nfunction findElements(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  const elements = root.querySelectorAll(selector);\n  return toArray(elements);\n}\nfunction findElement(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  return root.querySelector(selector);\n}\nfunction dispatchEvent(element, type) {\n  let eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  const disabled = element.disabled;\n  const bubbles = eventInit.bubbles,\n    cancelable = eventInit.cancelable,\n    detail = eventInit.detail;\n  const event = document.createEvent(\"Event\");\n  event.initEvent(type, bubbles || true, cancelable || true);\n  event.detail = detail || {};\n  try {\n    element.disabled = false;\n    element.dispatchEvent(event);\n  } finally {\n    element.disabled = disabled;\n  }\n  return event;\n}\nfunction toArray(value) {\n  if (Array.isArray(value)) {\n    return value;\n  } else if (Array.from) {\n    return Array.from(value);\n  } else {\n    return [].slice.call(value);\n  }\n}\nclass BlobRecord {\n  constructor(file, checksum, url) {\n    this.file = file;\n    this.attributes = {\n      filename: file.name,\n      content_type: file.type || \"application/octet-stream\",\n      byte_size: file.size,\n      checksum: checksum\n    };\n    this.xhr = new XMLHttpRequest();\n    this.xhr.open(\"POST\", url, true);\n    this.xhr.responseType = \"json\";\n    this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n    this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n    this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    const csrfToken = getMetaValue(\"csrf-token\");\n    if (csrfToken != undefined) {\n      this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n    }\n    this.xhr.addEventListener(\"load\", event => this.requestDidLoad(event));\n    this.xhr.addEventListener(\"error\", event => this.requestDidError(event));\n  }\n  get status() {\n    return this.xhr.status;\n  }\n  get response() {\n    const _this$xhr = this.xhr,\n      responseType = _this$xhr.responseType,\n      response = _this$xhr.response;\n    if (responseType == \"json\") {\n      return response;\n    } else {\n      return JSON.parse(response);\n    }\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(JSON.stringify({\n      blob: this.attributes\n    }));\n  }\n  requestDidLoad(event) {\n    if (this.status >= 200 && this.status < 300) {\n      const response = this.response;\n      const direct_upload = response.direct_upload;\n      delete response.direct_upload;\n      this.attributes = response;\n      this.directUploadData = direct_upload;\n      this.callback(null, this.toJSON());\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n  }\n  toJSON() {\n    const result = {};\n    for (const key in this.attributes) {\n      result[key] = this.attributes[key];\n    }\n    return result;\n  }\n}\nclass BlobUpload {\n  constructor(blob) {\n    this.blob = blob;\n    this.file = blob.file;\n    const _blob$directUploadDat = blob.directUploadData,\n      url = _blob$directUploadDat.url,\n      headers = _blob$directUploadDat.headers;\n    this.xhr = new XMLHttpRequest();\n    this.xhr.open(\"PUT\", url, true);\n    this.xhr.responseType = \"text\";\n    for (const key in headers) {\n      this.xhr.setRequestHeader(key, headers[key]);\n    }\n    this.xhr.addEventListener(\"load\", event => this.requestDidLoad(event));\n    this.xhr.addEventListener(\"error\", event => this.requestDidError(event));\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(this.file.slice());\n  }\n  requestDidLoad(event) {\n    const _this$xhr2 = this.xhr,\n      status = _this$xhr2.status,\n      response = _this$xhr2.response;\n    if (status >= 200 && status < 300) {\n      this.callback(null, response);\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n  }\n}\nlet id = 0;\nclass DirectUpload {\n  constructor(file, url, delegate) {\n    this.id = ++id;\n    this.file = file;\n    this.url = url;\n    this.delegate = delegate;\n  }\n  create(callback) {\n    FileChecksum.create(this.file, (error, checksum) => {\n      if (error) {\n        callback(error);\n        return;\n      }\n      const blob = new BlobRecord(this.file, checksum, this.url);\n      notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n      blob.create(error => {\n        if (error) {\n          callback(error);\n        } else {\n          const upload = new BlobUpload(blob);\n          notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n          upload.create(error => {\n            if (error) {\n              callback(error);\n            } else {\n              callback(null, blob.toJSON());\n            }\n          });\n        }\n      });\n    });\n  }\n}\nfunction notify(object, methodName) {\n  if (object && typeof object[methodName] == \"function\") {\n    for (var _len = arguments.length, messages = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      messages[_key - 2] = arguments[_key];\n    }\n    return object[methodName](...messages);\n  }\n}\nclass DirectUploadController {\n  constructor(input, file) {\n    this.input = input;\n    this.file = file;\n    this.directUpload = new DirectUpload(this.file, this.url, this);\n    this.dispatch(\"initialize\");\n  }\n  start(callback) {\n    const hiddenInput = document.createElement(\"input\");\n    hiddenInput.type = \"hidden\";\n    hiddenInput.name = this.input.name;\n    this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n    this.dispatch(\"start\");\n    this.directUpload.create((error, attributes) => {\n      if (error) {\n        hiddenInput.parentNode.removeChild(hiddenInput);\n        this.dispatchError(error);\n      } else {\n        hiddenInput.value = attributes.signed_id;\n      }\n      this.dispatch(\"end\");\n      callback(error);\n    });\n  }\n  uploadRequestDidProgress(event) {\n    const progress = event.loaded / event.total * 100;\n    if (progress) {\n      this.dispatch(\"progress\", {\n        progress: progress\n      });\n    }\n  }\n  get url() {\n    return this.input.getAttribute(\"data-direct-upload-url\");\n  }\n  dispatch(name) {\n    let detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    detail.file = this.file;\n    detail.id = this.directUpload.id;\n    return dispatchEvent(this.input, `direct-upload:${name}`, {\n      detail: detail\n    });\n  }\n  dispatchError(error) {\n    const event = this.dispatch(\"error\", {\n      error: error\n    });\n    if (!event.defaultPrevented) {\n      alert(error);\n    }\n  }\n  directUploadWillCreateBlobWithXHR(xhr) {\n    this.dispatch(\"before-blob-request\", {\n      xhr: xhr\n    });\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    this.dispatch(\"before-storage-request\", {\n      xhr: xhr\n    });\n    xhr.upload.addEventListener(\"progress\", event => this.uploadRequestDidProgress(event));\n  }\n}\nconst inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\nclass DirectUploadsController {\n  constructor(form) {\n    this.form = form;\n    this.inputs = findElements(form, inputSelector).filter(input => input.files.length);\n  }\n  start(callback) {\n    const controllers = this.createDirectUploadControllers();\n    const startNextController = () => {\n      const controller = controllers.shift();\n      if (controller) {\n        controller.start(error => {\n          if (error) {\n            callback(error);\n            this.dispatch(\"end\");\n          } else {\n            startNextController();\n          }\n        });\n      } else {\n        callback();\n        this.dispatch(\"end\");\n      }\n    };\n    this.dispatch(\"start\");\n    startNextController();\n  }\n  createDirectUploadControllers() {\n    const controllers = [];\n    this.inputs.forEach(input => {\n      toArray(input.files).forEach(file => {\n        const controller = new DirectUploadController(input, file);\n        controllers.push(controller);\n      });\n    });\n    return controllers;\n  }\n  dispatch(name) {\n    let detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    return dispatchEvent(this.form, `direct-uploads:${name}`, {\n      detail: detail\n    });\n  }\n}\nconst processingAttribute = \"data-direct-uploads-processing\";\nconst submitButtonsByForm = new WeakMap();\nlet started = false;\nfunction start() {\n  if (!started) {\n    started = true;\n    document.addEventListener(\"click\", didClick, true);\n    document.addEventListener(\"submit\", didSubmitForm, true);\n    document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n  }\n}\nfunction didClick(event) {\n  const target = event.target;\n  if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n    submitButtonsByForm.set(target.form, target);\n  }\n}\nfunction didSubmitForm(event) {\n  handleFormSubmissionEvent(event);\n}\nfunction didSubmitRemoteElement(event) {\n  if (event.target.tagName == \"FORM\") {\n    handleFormSubmissionEvent(event);\n  }\n}\nfunction handleFormSubmissionEvent(event) {\n  const form = event.target;\n  if (form.hasAttribute(processingAttribute)) {\n    event.preventDefault();\n    return;\n  }\n  const controller = new DirectUploadsController(form);\n  const inputs = controller.inputs;\n  if (inputs.length) {\n    event.preventDefault();\n    form.setAttribute(processingAttribute, \"\");\n    inputs.forEach(disable);\n    controller.start(error => {\n      form.removeAttribute(processingAttribute);\n      if (error) {\n        inputs.forEach(enable);\n      } else {\n        submitForm(form);\n      }\n    });\n  }\n}\nfunction submitForm(form) {\n  let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n  if (button) {\n    const _button = button,\n      disabled = _button.disabled;\n    button.disabled = false;\n    button.focus();\n    button.click();\n    button.disabled = disabled;\n  } else {\n    button = document.createElement(\"input\");\n    button.type = \"submit\";\n    button.style.display = \"none\";\n    form.appendChild(button);\n    button.click();\n    form.removeChild(button);\n  }\n  submitButtonsByForm.delete(form);\n}\nfunction disable(input) {\n  input.disabled = true;\n}\nfunction enable(input) {\n  input.disabled = false;\n}\nfunction autostart() {\n  if (window.ActiveStorage) {\n    start();\n  }\n}\nsetTimeout(autostart, 1);\nexport { DirectUpload, start };","/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction noop() {}\nconst uid = function () {\n  let id = 0;\n  return function () {\n    return id++;\n  };\n}();\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = value => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) => typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : value / dimension;\nconst toDimension = (value, dimension) => typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n  let i, len, keys;\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\nfunction _elementsEqual(a0, a1) {\n  let i, ilen, v0, v1;\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction clone$1(source) {\n  if (isArray(source)) {\n    return source.map(clone$1);\n  }\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone$1(source[keys[k]]);\n    }\n    return target;\n  }\n  return source;\n}\nfunction isValidKey(key) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone$1(sval);\n  }\n}\nfunction merge(target, source, options) {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n  if (!isObject(target)) {\n    return target;\n  }\n  options = options || {};\n  const merger = options.merger || _merger;\n  for (let i = 0; i < ilen; ++i) {\n    source = sources[i];\n    if (!isObject(source)) {\n      continue;\n    }\n    const keys = Object.keys(source);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, source, options);\n    }\n  }\n  return target;\n}\nfunction mergeIf(target, source) {\n  return merge(target, source, {\n    merger: _mergerIf\n  });\n}\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone$1(sval);\n  }\n}\nfunction _deprecated(scope, value, previous, current) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\nconst keyResolvers = {\n  '': v => v,\n  x: o => o.x,\n  y: o => o.y\n};\nfunction resolveObjectKey(obj, key) {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\nfunction _getKeyResolver(key) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\nfunction _splitKey(key) {\n  const parts = key.split('.');\n  const keys = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = value => typeof value !== 'undefined';\nconst isFunction = value => typeof value === 'function';\nconst setsEqual = (a, b) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n};\nfunction _isClickEvent(e) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n  const result = [];\n  const sqrt = Math.sqrt(value);\n  let i;\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) {\n    result.push(sqrt);\n  }\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n  const rounded = Math.round(x);\n  return rounded - epsilon <= x && rounded + epsilon >= x;\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n  let i, ilen, value;\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n  if (angle < -0.5 * PI) {\n    angle += TAU;\n  }\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end) {\n  let epsilon = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-6;\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || (index => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid;\n  while (hi - lo > 1) {\n    mid = lo + hi >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n  return {\n    lo,\n    hi\n  };\n}\nconst _lookupByKey = (table, key, value, last) => _lookup(table, value, last ? index => table[index][key] <= value : index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) => _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n  let start = 0;\n  let end = values.length;\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n  return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach(key => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value() {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n        const res = base.apply(this, args);\n        array._chartjs.listeners.forEach(object => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n        return res;\n      }\n    });\n  });\n}\nfunction unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n  if (listeners.length > 0) {\n    return;\n  }\n  arrayEvents.forEach(key => {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n  const set = new Set();\n  let i, ilen;\n  for (i = 0, ilen = items.length; i < ilen; ++i) {\n    set.add(items[i]);\n  }\n  if (set.size === ilen) {\n    return items;\n  }\n  return Array.from(set);\n}\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = function () {\n  if (typeof window === 'undefined') {\n    return function (callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}();\nfunction throttled(fn, thisArg, updateFn) {\n  const updateArgs = updateFn || (args => Array.prototype.slice.call(args));\n  let ticking = false;\n  let args = [];\n  return function () {\n    for (var _len2 = arguments.length, rest = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      rest[_key2] = arguments[_key2];\n    }\n    args = updateArgs(rest);\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, args);\n      });\n    }\n  };\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function () {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\nconst _toLeftRightCenter = align => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  const pointCount = points.length;\n  let start = 0;\n  let count = pointCount;\n  if (meta._sorted) {\n    const iScale = meta.iScale,\n      _parsed = meta._parsed;\n    const axis = iScale.axis;\n    const _iScale$getUserBounds = iScale.getUserBounds(),\n      min = _iScale$getUserBounds.min,\n      max = _iScale$getUserBounds.max,\n      minDefined = _iScale$getUserBounds.minDefined,\n      maxDefined = _iScale$getUserBounds.maxDefined;\n    if (minDefined) {\n      start = _limitValue(Math.min(_lookupByKey(_parsed, iScale.axis, min).lo, animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(_lookupByKey(_parsed, iScale.axis, max, true).hi + 1, animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n  return {\n    start,\n    count\n  };\n}\nfunction _scaleRangesChanged(meta) {\n  const xScale = meta.xScale,\n    yScale = meta.yScale,\n    _scaleRanges = meta._scaleRanges;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\nconst atEdge = t => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n  linear: t => t,\n  easeInQuad: t => t * t,\n  easeOutQuad: t => -t * (t - 2),\n  easeInOutQuad: t => (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n  easeInCubic: t => t * t * t,\n  easeOutCubic: t => (t -= 1) * t * t + 1,\n  easeInOutCubic: t => (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n  easeInQuart: t => t * t * t * t,\n  easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n  easeInOutQuart: t => (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n  easeInQuint: t => t * t * t * t * t,\n  easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n  easeInOutQuint: t => (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n  easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n  easeOutSine: t => Math.sin(t * HALF_PI),\n  easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n  easeInExpo: t => t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n  easeOutExpo: t => t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n  easeInOutExpo: t => atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n  easeInCirc: t => t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n  easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n  easeInOutCirc: t => (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n  easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n  easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n  easeInOutElastic(t) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n  easeInBack(t) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack(t) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack(t) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n  },\n  easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n  easeOutBounce(t) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < 1 / d) {\n      return m * t * t;\n    }\n    if (t < 2 / d) {\n      return m * (t -= 1.5 / d) * t + 0.75;\n    }\n    if (t < 2.5 / d) {\n      return m * (t -= 2.25 / d) * t + 0.9375;\n    }\n    return m * (t -= 2.625 / d) * t + 0.984375;\n  },\n  easeInOutBounce: t => t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {\n  0: 0,\n  1: 1,\n  2: 2,\n  3: 3,\n  4: 4,\n  5: 5,\n  6: 6,\n  7: 7,\n  8: 8,\n  9: 9,\n  A: 10,\n  B: 11,\n  C: 12,\n  D: 13,\n  E: 14,\n  F: 15,\n  a: 10,\n  b: 11,\n  c: 12,\n  d: 13,\n  e: 14,\n  f: 15\n};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => (b & 0xF0) >> 4 === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = function (n) {\n    let k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12;\n    return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  };\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = function (n) {\n    let k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 60) % 6;\n    return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  };\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return (g - b) / d + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255 ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`);\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {\n    r: 0,\n    g: 0,\n    b: 0,\n    a: 255\n  };\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {\n        r: input[0],\n        g: input[1],\n        b: input[2],\n        a: 255\n      };\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {\n      r: 0,\n      g: 0,\n      b: 0,\n      a: 1\n    });\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\nfunction index_esm(input) {\n  return new Color(input);\n}\nfunction isPatternOrGradient(value) {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n  return false;\n}\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope$1(root, scope), values);\n  }\n  return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n  constructor(_descriptors) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = context => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n    this.describe(_descriptors);\n  }\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n  get(scope) {\n    return getScope$1(this, scope);\n  }\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope$1(this, scope);\n    const targetScopeObject = getScope$1(this, targetScope);\n    const privateName = '_' + name;\n    Object.defineProperties(scopeObject, {\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n}\nvar defaults = new Defaults({\n  _scriptable: name => !name.startsWith('on'),\n  _indexable: name => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false\n  }\n});\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n  return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n  ctx.save();\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i, j, jlen, thing, nestedThing;\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n    if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n  ctx.restore();\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n  ctx = ctx || canvas.getContext('2d');\n  ctx.save();\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n  drawPointLegend(ctx, options, x, y, null);\n}\nfunction drawPointLegend(ctx, options, x, y, w) {\n  let type, xOffset, yOffset, size, cornerRadius, width;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n  ctx.beginPath();\n  switch (style) {\n    default:\n      if (w) {\n        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n      } else {\n        ctx.arc(x, y, radius, 0, TAU);\n      }\n      ctx.closePath();\n      break;\n    case 'triangle':\n      ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n    case 'rectRounded':\n      cornerRadius = radius * 0.516;\n      size = radius - cornerRadius;\n      xOffset = Math.cos(rad + QUARTER_PI) * size;\n      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n    case 'rect':\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        width = w ? w / 2 : size;\n        ctx.rect(x - width, y - size, 2 * width, 2 * size);\n        break;\n      }\n      rad += QUARTER_PI;\n    case 'rectRot':\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      ctx.closePath();\n      break;\n    case 'crossRot':\n      rad += QUARTER_PI;\n    case 'cross':\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      ctx.moveTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      break;\n    case 'star':\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      ctx.moveTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      rad += QUARTER_PI;\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      ctx.moveTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      break;\n    case 'line':\n      xOffset = w ? w / 2 : Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      break;\n    case 'dash':\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n      break;\n  }\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\nfunction _isPointInArea(point, area, margin) {\n  margin = margin || 0.5;\n  return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction renderText(ctx, text, x, y, font) {\n  let opts = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i, line;\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n    y += font.lineHeight;\n  }\n  ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n  if (opts.strikethrough || opts.underline) {\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\nfunction addRoundedRectPath(ctx, rect) {\n  const x = rect.x,\n    y = rect.y,\n    w = rect.w,\n    h = rect.h,\n    radius = rect.radius;\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n  ctx.lineTo(x + w, y + radius.topRight);\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n  ctx.lineTo(x + radius.topLeft, y);\n}\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n  value = +matches[2];\n  switch (matches[3]) {\n    case 'px':\n      return value;\n    case '%':\n      value /= 100;\n      break;\n  }\n  return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value) ? objProps ? prop => valueOrDefault(value[prop], value[props[prop]]) : prop => value[prop] : () => value;\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\nfunction toTRBL(value) {\n  return _readValueToProps(value, {\n    top: 'y',\n    right: 'x',\n    bottom: 'y',\n    left: 'x'\n  });\n}\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n  const obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\n}\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  let size = valueOrDefault(options.size, fallback.size);\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = '';\n  }\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n  font.string = toFontString(font);\n  return font;\n}\nfunction resolve(inputs, context, index, info) {\n  let cacheable = true;\n  let i, ilen, value;\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n  const min = minmax.min,\n    max = minmax.max;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\nfunction createContext(parentContext, context) {\n  return Object.assign(Object.create(parentContext), context);\n}\nfunction _createResolver(scopes) {\n  let prefixes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [''];\n  let rootScopes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : scopes;\n  let fallback = arguments.length > 3 ? arguments[3] : undefined;\n  let getTarget = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : () => scopes[0];\n  if (!defined(fallback)) {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: rootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: scope => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete target._keys;\n      delete scopes[0][prop];\n      return true;\n    },\n    get(target, prop) {\n      return _cached(target, prop, () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n    has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n    set(target, prop, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value;\n      delete target._keys;\n      return true;\n    }\n  });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  const cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: ctx => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: scope => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete proxy[prop];\n      return true;\n    },\n    get(target, prop, receiver) {\n      return _cached(target, prop, () => _resolveWithContext(target, prop, receiver));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n        enumerable: true,\n        configurable: true\n      } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n    set(target, prop, value) {\n      proxy[prop] = value;\n      delete target[prop];\n      return true;\n    }\n  });\n}\nfunction _descriptors(proxy) {\n  let defaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    scriptable: true,\n    indexable: true\n  };\n  const _proxy$_scriptable = proxy._scriptable,\n    _scriptable = _proxy$_scriptable === void 0 ? defaults.scriptable : _proxy$_scriptable,\n    _proxy$_indexable = proxy._indexable,\n    _indexable = _proxy$_indexable === void 0 ? defaults.indexable : _proxy$_indexable,\n    _proxy$_allKeys = proxy._allKeys,\n    _allKeys = _proxy$_allKeys === void 0 ? defaults.allKeys : _proxy$_allKeys;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n  const value = resolve();\n  target[prop] = value;\n  return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n  const _proxy = target._proxy,\n    _context = target._context,\n    _subProxy = target._subProxy,\n    descriptors = target._descriptors;\n  let value = _proxy[prop];\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n  const _proxy = target._proxy,\n    _context = target._context,\n    _subProxy = target._subProxy,\n    _stack = target._stack;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  value = value(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n  const _proxy = target._proxy,\n    _context = target._context,\n    _subProxy = target._subProxy,\n    descriptors = target._descriptors;\n  if (defined(_context.index) && isIndexable(prop)) {\n    value = value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n        return fallback;\n      }\n    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n      return null;\n    }\n  }\n  return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (defined(fallback) && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback, () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    return value;\n  }\n  return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  let value;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (defined(value)) {\n      return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n    }\n  }\n}\nfunction _resolve(key, scopes) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\nfunction getKeysFromAllScopes(target) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n  const set = new Set();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const _this$_parsing$key = this._parsing.key,\n    key = _this$_parsing$key === void 0 ? 'r' : _this$_parsing$key;\n  const parsed = new Array(count);\n  let i, ilen, index, item;\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = indexAxis => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  const fa = t * s01;\n  const fb = t * s12;\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n  const pointsLen = points.length;\n  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\nfunction monotoneCompute(points, mK) {\n  let indexAxis = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'x';\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\nfunction splineCurveMonotone(points) {\n  let indexAxis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK = Array(pointsLen).fill(0);\n  const mK = Array(pointsLen);\n  let i, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  let i, ilen, point, controlPoints;\n  if (options.spanGaps) {\n    points = points.filter(pt => !pt.skip);\n  }\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\nfunction _isDomSupported() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = parent.host;\n  }\n  return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  let valueInPixels;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n    if (styleValue.indexOf('%') !== -1) {\n      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n  return valueInPixels;\n}\nconst getComputedStyle = element => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n  const result = {};\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n  const touches = e.touches;\n  const source = touches && touches.length ? touches[0] : e;\n  const offsetX = source.offsetX,\n    offsetY = source.offsetY;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {\n    x,\n    y,\n    box\n  };\n}\nfunction getRelativePosition(evt, chart) {\n  if ('native' in evt) {\n    return evt;\n  }\n  const canvas = chart.canvas,\n    currentDevicePixelRatio = chart.currentDevicePixelRatio;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const _getCanvasPosition = getCanvasPosition(evt, canvas),\n    x = _getCanvasPosition.x,\n    y = _getCanvasPosition.y,\n    box = _getCanvasPosition.box;\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n  let width = chart.width,\n    height = chart.height;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\nfunction getContainerSize(canvas, width, height) {\n  let maxWidth, maxHeight;\n  if (width === undefined || height === undefined) {\n    const container = _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect();\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let width = containerSize.width,\n    height = containerSize.height;\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    height = round1(width / 2);\n  }\n  return {\n    width,\n    height\n  };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = deviceHeight / pixelRatio;\n  chart.width = deviceWidth / pixelRatio;\n  const canvas = chart.canvas;\n  if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n  if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n    chart.currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\nconst supportsEventListenerOptions = function () {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n    };\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {}\n  return passiveSupported;\n}();\nfunction readUsedSize(element, property) {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n  };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n  const cp1 = {\n    x: p1.cp2x,\n    y: p1.cp2y\n  };\n  const cp2 = {\n    x: p2.cp1x,\n    y: p2.cp1y\n  };\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\nconst getRightToLeftAdapter = function (rectX, width) {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    }\n  };\n};\nconst getLeftToRightAdapter = function () {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) {},\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) {\n      return x;\n    }\n  };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n  let style, original;\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [style.getPropertyValue('direction'), style.getPropertyPriority('direction')];\n    style.setProperty('direction', direction, 'important');\n    ctx.prevTextDirection = original;\n  }\n}\nfunction restoreTextDirection(ctx, original) {\n  if (original !== undefined) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\nfunction normalizeSegment(_ref) {\n  let start = _ref.start,\n    end = _ref.end,\n    count = _ref.count,\n    loop = _ref.loop,\n    style = _ref.style;\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\nfunction getSegment(segment, points, bounds) {\n  const property = bounds.property,\n    startBound = bounds.start,\n    endBound = bounds.end;\n  const _propertyFn = propertyFn(property),\n    between = _propertyFn.between,\n    normalize = _propertyFn.normalize;\n  const count = points.length;\n  let start = segment.start,\n    end = segment.end,\n    loop = segment.loop;\n  let i, ilen;\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n  if (end < start) {\n    end += count;\n  }\n  return {\n    start,\n    end,\n    loop,\n    style: segment.style\n  };\n}\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n  const property = bounds.property,\n    startBound = bounds.start,\n    endBound = bounds.end;\n  const count = points.length;\n  const _propertyFn2 = propertyFn(property),\n    compare = _propertyFn2.compare,\n    between = _propertyFn2.between,\n    normalize = _propertyFn2.normalize;\n  const _getSegment = getSegment(segment, points, bounds),\n    start = _getSegment.start,\n    end = _getSegment.end,\n    loop = _getSegment.loop,\n    style = _getSegment.style;\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n    if (point.skip) {\n      continue;\n    }\n    value = normalize(point[property]);\n    if (value === prevValue) {\n      continue;\n    }\n    inside = between(value, startBound, endBound);\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({\n        start: subStart,\n        end: i,\n        loop,\n        count,\n        style\n      }));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n  if (subStart !== null) {\n    result.push(normalizeSegment({\n      start: subStart,\n      end,\n      loop,\n      count,\n      style\n    }));\n  }\n  return result;\n}\nfunction _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n  while (start < count && points[start].skip) {\n    start++;\n  }\n  start %= count;\n  if (loop) {\n    end += start;\n  }\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n  end %= count;\n  return {\n    start,\n    end\n  };\n}\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({\n          start: start % count,\n          end: (end - 1) % count,\n          loop\n        });\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n  if (last !== null) {\n    result.push({\n      start: start % count,\n      end: last % count,\n      loop\n    });\n  }\n  return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n  if (!count) {\n    return [];\n  }\n  const loop = !!line._loop;\n  const _findStartAndEnd = findStartAndEnd(points, count, loop, spanGaps),\n    start = _findStartAndEnd.start,\n    end = _findStartAndEnd.end;\n  if (spanGaps === true) {\n    return splitByStyles(line, [{\n      start,\n      end,\n      loop\n    }], points, segmentOptions);\n  }\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const datasetIndex = line._datasetIndex,\n    spanGaps = line.options.spanGaps;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({\n        start: s % count,\n        end: e % count,\n        loop: l,\n        style: st\n      });\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n  return result;\n}\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\nfunction styleChanged(style, prevStyle) {\n  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\nexport { _isPointInArea as $, _factorize as A, finiteOrDefault as B, callback as C, _addGrace as D, _limitValue as E, toDegrees as F, _measureText as G, HALF_PI as H, _int16Range as I, _alignPixel as J, toPadding as K, clipArea as L, renderText as M, unclipArea as N, toFont as O, PI as P, each as Q, _toLeftRightCenter as R, _alignStartEnd as S, TAU as T, overrides as U, merge as V, _capitalize as W, getRelativePosition as X, _rlookupByKey as Y, _lookupByKey as Z, _arrayUnique as _, resolve as a, toLineHeight as a$, getAngleFromPoint as a0, getMaximumSize as a1, _getParentNode as a2, readUsedSize as a3, throttled as a4, supportsEventListenerOptions as a5, _isDomSupported as a6, descriptors as a7, isFunction as a8, _attachContext as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, noop as aF, distanceBetweenPoints as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, _longestText as aM, _filterBetween as aN, _lookup as aO, isPatternOrGradient as aP, getHoverColor as aQ, clone$1 as aR, _merger as aS, _mergerIf as aT, _deprecated as aU, _splitKey as aV, toFontString as aW, splineCurve as aX, splineCurveMonotone as aY, getStyle as aZ, fontString as a_, _createResolver as aa, _descriptors as ab, mergeIf as ac, uid as ad, debounce as ae, retinaScale as af, clearCanvas as ag, setsEqual as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _readValueToProps as al, _updateBezierControlPoints as am, _computeSegments as an, _boundSegments as ao, _steppedInterpolation as ap, _bezierInterpolation as aq, _pointInLine as ar, _steppedLineTo as as, _bezierCurveTo as at, drawPoint as au, addRoundedRectPath as av, toTRBL as aw, toTRBLCorners as ax, _boundSegment as ay, _normalizeAngle as az, isArray as b, PITAU as b0, INFINITY as b1, RAD_PER_DEG as b2, QUARTER_PI as b3, TWO_THIRDS_PI as b4, _angleDiff as b5, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, log10 as z };","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as log10, A as _factorize, B as finiteOrDefault, C as callback, D as _addGrace, E as _limitValue, F as toDegrees, G as _measureText, I as _int16Range, J as _alignPixel, K as toPadding, L as clipArea, M as renderText, N as unclipArea, O as toFont, Q as each, R as _toLeftRightCenter, S as _alignStartEnd, U as overrides, V as merge, W as _capitalize, X as getRelativePosition, Y as _rlookupByKey, Z as _lookupByKey, $ as _isPointInArea, a0 as getAngleFromPoint, a1 as getMaximumSize, a2 as _getParentNode, a3 as readUsedSize, a4 as throttled, a5 as supportsEventListenerOptions, a6 as _isDomSupported, a7 as descriptors, a8 as isFunction, a9 as _attachContext, aa as _createResolver, ab as _descriptors, ac as mergeIf, ad as uid, ae as debounce, af as retinaScale, ag as clearCanvas, ah as setsEqual, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _readValueToProps, am as _updateBezierControlPoints, an as _computeSegments, ao as _boundSegments, ap as _steppedInterpolation, aq as _bezierInterpolation, ar as _pointInLine, as as _steppedLineTo, at as _bezierCurveTo, au as drawPoint, av as addRoundedRectPath, aw as toTRBL, ax as toTRBLCorners, ay as _boundSegment, az as _normalizeAngle, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as noop, aG as distanceBetweenPoints, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as _longestText, aN as _filterBetween, aO as _lookup } from './chunks/helpers.segment.mjs';\nexport { d as defaults } from './chunks/helpers.segment.mjs';\nclass Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n  _update() {\n    let date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Date.now();\n    let remaining = 0;\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n      for (; i >= 0; --i) {\n        item = items[i];\n        if (item._active) {\n          if (item._total > anims.duration) {\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n      remaining += items.length;\n    });\n    this._lastDate = date;\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\nvar animator = new Animator();\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  color(from, to, factor) {\n    const c0 = color(from || transparent);\n    const c1 = c0.valid && color(to || transparent);\n    return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\nclass Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n  active() {\n    return this._active;\n  }\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n  cancel() {\n    if (this._active) {\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n    this._active = from !== to && (loop || elapsed < duration);\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n    factor = elapsed / duration % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n    this._target[prop] = this._fn(from, to, factor);\n  }\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({\n        res,\n        rej\n      });\n    });\n  }\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n  delay: undefined,\n  duration: 1000,\n  easing: 'easeOutQuart',\n  fn: undefined,\n  from: undefined,\n  loop: undefined,\n  to: undefined,\n  type: undefined\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n  _fallback: false,\n  _indexable: false,\n  _scriptable: name => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n});\ndefaults.set('animations', {\n  colors: {\n    type: 'color',\n    properties: colors\n  },\n  numbers: {\n    type: 'number',\n    properties: numbers\n  }\n});\ndefaults.describe('animations', {\n  _fallback: 'animation'\n});\ndefaults.set('transitions', {\n  active: {\n    animation: {\n      duration: 400\n    }\n  },\n  resize: {\n    animation: {\n      duration: 0\n    }\n  },\n  show: {\n    animations: {\n      colors: {\n        from: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        duration: 0\n      }\n    }\n  },\n  hide: {\n    animations: {\n      colors: {\n        to: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        easing: 'linear',\n        fn: v => v | 0\n      }\n    }\n  }\n});\nclass Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n    const animatedProps = this._properties;\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach(prop => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {});\n    }\n    return animations;\n  }\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n      if (animation) {\n        if (cfg && animation.active()) {\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        target[prop] = value;\n        continue;\n      }\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n  update(target, values) {\n    if (this._properties.size === 0) {\n      Object.assign(target, values);\n      return;\n    }\n    const animations = this._createAnimations(target, values);\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    target.options = options = Object.assign({}, options, {\n      $shared: false,\n      $animations: {}\n    });\n  }\n  return options;\n}\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\nfunction toClip(value) {\n  let t, r, b, l;\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\nfunction applyStack(stack, value, dsIndex) {\n  let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n  if (value === null) {\n    return;\n  }\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n      value += otherValue;\n    }\n  }\n  return value;\n}\nfunction convertObjectDataToArray(data) {\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      x: key,\n      y: data[key]\n    };\n  }\n  return adata;\n}\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n  const _scale$getUserBounds = scale.getUserBounds(),\n    min = _scale$getUserBounds.min,\n    max = _scale$getUserBounds.max,\n    minDefined = _scale$getUserBounds.minDefined,\n    maxDefined = _scale$getUserBounds.maxDefined;\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if (positive && value > 0 || !positive && value < 0) {\n      return meta.index;\n    }\n  }\n  return null;\n}\nfunction updateStacks(controller, parsed) {\n  const chart = controller.chart,\n    meta = controller._cachedMeta;\n  const stacks = chart._stacks || (chart._stacks = {});\n  const iScale = meta.iScale,\n    vScale = meta.vScale,\n    datasetIndex = meta.index;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const index = item[iAxis],\n      value = item[vAxis];\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n  }\n}\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n  return createContext(parent, {\n    active: false,\n    dataset: undefined,\n    datasetIndex: index,\n    index,\n    mode: 'default',\n    type: 'dataset'\n  });\n}\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\nfunction clearStacks(meta, items) {\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n  }\n}\nconst isDirectUpdateMode = mode => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked && {\n  keys: getSortedDatasetIndices(chart, true),\n  values: null\n};\nclass DatasetController {\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.initialize();\n  }\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n  }\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale ? meta.vScale : meta.iScale;\n  }\n  reset() {\n    this._update('reset');\n  }\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        unlistenArrayEvents(_data, this);\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n  addElements() {\n    const meta = this._cachedMeta;\n    this._dataCheck();\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n    this._dataCheck();\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n    this._resyncElements(resetNewElements);\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n  parse(start, count) {\n    const meta = this._cachedMeta,\n      data = this._data;\n    const iScale = meta.iScale,\n      _stacked = meta._stacked;\n    const iAxis = iScale.axis;\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const iScale = meta.iScale,\n      vScale = meta.vScale;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const xScale = meta.xScale,\n      yScale = meta.yScale;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const xScale = meta.xScale,\n      yScale = meta.yScale;\n    const _this$_parsing = this._parsing,\n      _this$_parsing$xAxisK = _this$_parsing.xAxisKey,\n      xAxisKey = _this$_parsing$xAxisK === void 0 ? 'x' : _this$_parsing$xAxisK,\n      _this$_parsing$yAxisK = _this$_parsing.yAxisKey,\n      yAxisKey = _this$_parsing$yAxisK === void 0 ? 'y' : _this$_parsing$yAxisK;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]\n    };\n    return applyStack(stack, value, meta.index, {\n      mode\n    });\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {\n      min: Number.POSITIVE_INFINITY,\n      max: Number.NEGATIVE_INFINITY\n    };\n    const _getUserBounds = getUserBounds(otherScale),\n      otherMin = _getUserBounds.min,\n      otherMax = _getUserBounds.max;\n    let i, parsed;\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        break;\n      }\n    }\n    if (sorted) {\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isNumberFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n  getMaxOverflow() {\n    return false;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n  update(mode) {}\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || elements.length - start;\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n  }\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n  _resolveElementOptions(elementType) {\n    let mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';\n    let index = arguments.length > 2 ? arguments[2] : undefined;\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    const context = () => this.getContext(index, active);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n    if (values.$shared) {\n      values.$shared = sharing;\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n    return values;\n  }\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {\n      sharedOptions,\n      includeOptions\n    };\n  }\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      options: !active && this.getSharedOptions(options) || options\n    });\n  }\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n    for (const _ref of this._syncList) {\n      var _ref2 = _slicedToArray(_ref, 3);\n      const method = _ref2[0];\n      const arg1 = _ref2[1];\n      const arg2 = _ref2[2];\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n    if (count) {\n      this.parse(0, count);\n    }\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n  _insertElements(start, count) {\n    let resetNewElements = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n    const move = arr => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n  updateElements(element, start, count, mode) {}\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const _args2 = _slicedToArray(args, 3),\n        method = _args2[0],\n        arg1 = _args2[1],\n        arg2 = _args2[2];\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      return;\n    }\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n  return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - size / 2\n  };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {\n    start,\n    end,\n    reverse,\n    top,\n    bottom\n  };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n  if (edge === true) {\n    properties.borderSkipped = {\n      top: true,\n      right: true,\n      bottom: true,\n      left: true\n    };\n    return;\n  }\n  const _borderProps = borderProps(properties),\n    start = _borderProps.start,\n    end = _borderProps.end,\n    reverse = _borderProps.reverse,\n    top = _borderProps.top,\n    bottom = _borderProps.bottom;\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, _ref3, ratio) {\n  let inflateAmount = _ref3.inflateAmount;\n  properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseObjectData(meta, data, start, count) {\n    const iScale = meta.iScale,\n      vScale = meta.vScale;\n    const _this$_parsing2 = this._parsing,\n      _this$_parsing2$xAxis = _this$_parsing2.xAxisKey,\n      xAxisKey = _this$_parsing2$xAxis === void 0 ? 'x' : _this$_parsing2$xAxis,\n      _this$_parsing2$yAxis = _this$_parsing2.yAxisKey,\n      yAxisKey = _this$_parsing2$yAxis === void 0 ? 'y' : _this$_parsing2$yAxis;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n  getMaxOverflow() {\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale,\n      vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const index = this.index,\n      vScale = this._cachedMeta.vScale;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const _this$_getSharedOptio = this._getSharedOptions(start, mode),\n      sharedOptions = _this$_getSharedOptio.sharedOptions,\n      includeOptions = _this$_getSharedOptio.includeOptions;\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n        base,\n        head: base\n      } : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n  _getStacks(last, dataIndex) {\n    const iScale = this._cachedMeta.iScale;\n    const metasets = iScale.getMatchingVisibleMetas(this._type).filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const skipNull = meta => {\n      const parsed = meta.controller.getParsed(dataIndex);\n      const val = parsed && parsed[meta.vScale.axis];\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n    return stacks;\n  }\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = name !== undefined ? stacks.indexOf(name) : -1;\n    return index === -1 ? stacks.length - 1 : index;\n  }\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n  _calculateBarValuePixels(index) {\n    const _this$_cachedMeta = this._cachedMeta,\n      vScale = _this$_cachedMeta.vScale,\n      _stacked = _this$_cachedMeta._stacked,\n      _this$options = this.options,\n      baseValue = _this$options.base,\n      minBarLength = _this$options.minBarLength;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      head = base;\n    }\n    size = head - base;\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n    }\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n      center = range.start + range.chunk * stackIndex + range.chunk / 2;\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'bar',\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'base', 'width', 'height']\n    }\n  }\n};\nBarController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n      offset: true,\n      grid: {\n        offset: true\n      }\n    },\n    _value_: {\n      type: 'linear',\n      beginAtZero: true\n    }\n  }\n};\nclass BubbleController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const xScale = meta.xScale,\n      yScale = meta.yScale;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n    return {\n      label: meta.label,\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n  update(mode) {\n    const points = this._cachedMeta.data;\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const _this$_cachedMeta2 = this._cachedMeta,\n      iScale = _this$_cachedMeta2.iScale,\n      vScale = _this$_cachedMeta2.vScale;\n    const _this$_getSharedOptio2 = this._getSharedOptions(start, mode),\n      sharedOptions = _this$_getSharedOptio2.sharedOptions,\n      includeOptions = _this$_getSharedOptio2.includeOptions;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n    if (values.$shared) {\n      values = Object.assign({}, values, {\n        $shared: false\n      });\n    }\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n    return values;\n  }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'borderWidth', 'radius']\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        }\n      }\n    }\n  }\n};\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {\n    ratioX,\n    ratioY,\n    offsetX,\n    offsetY\n  };\n}\nclass DoughnutController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n  linkScales() {}\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = i => +data[i];\n      if (isObject(data[start])) {\n        const _this$_parsing$key = this._parsing.key,\n          key = _this$_parsing$key === void 0 ? 'value' : _this$_parsing$key;\n        getter = i => +resolveObjectKey(data[i], key);\n      }\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n    return {\n      rotation: min,\n      circumference: max - min\n    };\n  }\n  update(mode) {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n    const _this$_getRotationExt = this._getRotationExtents(),\n      circumference = _this$_getRotationExt.circumference,\n      rotation = _this$_getRotationExt.rotation;\n    const _getRatioAndOffset = getRatioAndOffset(rotation, circumference, cutout),\n      ratioX = _getRatioAndOffset.ratioX,\n      ratioY = _getRatioAndOffset.ratioY,\n      offsetX = _getRatioAndOffset.offsetX,\n      offsetY = _getRatioAndOffset.offsetY;\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n    meta.total = this.calculateTotal();\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const _this$_getSharedOptio3 = this._getSharedOptions(start, mode),\n      sharedOptions = _this$_getSharedOptio3.sharedOptions,\n      includeOptions = _this$_getSharedOptio3.includeOptions;\n    let startAngle = this._getRotation();\n    let i;\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n    return total;\n  }\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value\n    };\n  }\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n    if (!arcs) {\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n    if (!arcs) {\n      return 0;\n    }\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n  getMaxOffset(arcs) {\n    let max = 0;\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n    return ringWeightOffset;\n  }\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: false\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n    }\n  },\n  cutout: '50%',\n  rotation: 0,\n  circumference: 360,\n  radius: '100%',\n  spacing: 0,\n  indexAxis: 'r'\n};\nDoughnutController.descriptors = {\n  _scriptable: name => name !== 'spacing',\n  _indexable: name => name !== 'spacing'\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const pointStyle = chart.legend.options.labels.pointStyle;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(tooltipItem) {\n          let dataLabel = tooltipItem.label;\n          const value = ': ' + tooltipItem.formattedValue;\n          if (isArray(dataLabel)) {\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  }\n};\nclass LineController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset,\n      _meta$data = meta.data,\n      points = _meta$data === void 0 ? [] : _meta$data,\n      _dataset = meta._dataset;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let _getStartAndCountOfVi = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),\n      start = _getStartAndCountOfVi.start,\n      count = _getStartAndCountOfVi.count;\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n    this.updateElements(points, start, count, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const _this$_cachedMeta3 = this._cachedMeta,\n      iScale = _this$_cachedMeta3.iScale,\n      vScale = _this$_cachedMeta3.vScale,\n      _stacked = _this$_cachedMeta3._stacked,\n      _dataset = _this$_cachedMeta3._dataset;\n    const _this$_getSharedOptio4 = this._getSharedOptions(start, mode),\n      sharedOptions = _this$_getSharedOptio4.sharedOptions,\n      includeOptions = _this$_getSharedOptio4.includeOptions;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const _this$options2 = this.options,\n      spanGaps = _this$options2.spanGaps,\n      segment = _this$options2.segment;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\nLineController.id = 'line';\nLineController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  showLine: true,\n  spanGaps: false\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category'\n    },\n    _value_: {\n      type: 'linear'\n    }\n  }\n};\nclass PolarAreaController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {\n      min: Number.POSITIVE_INFINITY,\n      max: Number.NEGATIVE_INFINITY\n    };\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n    return range;\n  }\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n    this.outerRadius = outerRadius - radiusLength * this.index;\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n    const defaultAngle = 360 / this.countVisibleElements();\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n    return count;\n  }\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n  }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: true\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n    }\n  },\n  indexAxis: 'r',\n  startAngle: 0\n};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const pointStyle = chart.legend.options.labels.pointStyle;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(context) {\n          return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n        }\n      }\n    }\n  },\n  scales: {\n    r: {\n      type: 'radialLinear',\n      angleLines: {\n        display: false\n      },\n      beginAtZero: true,\n      grid: {\n        circular: true\n      },\n      pointLabels: {\n        display: false\n      },\n      startAngle: 0\n    }\n  }\n};\nclass PieController extends DoughnutController {}\nPieController.id = 'pie';\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: '100%'\n};\nclass RadarController extends DatasetController {\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n    line.points = points;\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n      this.updateElement(line, undefined, properties, mode);\n    }\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  indexAxis: 'r',\n  showLine: true,\n  elements: {\n    line: {\n      fill: 'start'\n    }\n  }\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: 'radialLinear'\n    }\n  }\n};\nclass Element {\n  constructor() {\n    this.x = undefined;\n    this.y = undefined;\n    this.active = false;\n    this.options = undefined;\n    this.$animations = undefined;\n  }\n  tooltipPosition(useFinalPosition) {\n    const _this$getProps = this.getProps(['x', 'y'], useFinalPosition),\n      x = _this$getProps.x,\n      y = _this$getProps.y;\n    return {\n      x,\n      y\n    };\n  }\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n  getProps(props, final) {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      return this;\n    }\n    const ret = {};\n    props.forEach(prop => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n    });\n    return ret;\n  }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\nconst formatters = {\n  values(value) {\n    return isArray(value) ? value : '' + value;\n  },\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue;\n    if (ticks.length > 1) {\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n      delta = calculateDelta(tickValue, ticks);\n    }\n    const logDelta = log10(Math.abs(delta));\n    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    const options = {\n      notation,\n      minimumFractionDigits: numDecimal,\n      maximumFractionDigits: numDecimal\n    };\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n    if (remain === 1 || remain === 2 || remain === 5) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n};\nfunction calculateDelta(tickValue, ticks) {\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\nvar Ticks = {\n  formatters\n};\ndefaults.set('scale', {\n  display: true,\n  offset: false,\n  reverse: false,\n  beginAtZero: false,\n  bounds: 'ticks',\n  grace: 0,\n  grid: {\n    display: true,\n    lineWidth: 1,\n    drawBorder: true,\n    drawOnChartArea: true,\n    drawTicks: true,\n    tickLength: 8,\n    tickWidth: (_ctx, options) => options.lineWidth,\n    tickColor: (_ctx, options) => options.color,\n    offset: false,\n    borderDash: [],\n    borderDashOffset: 0.0,\n    borderWidth: 1\n  },\n  title: {\n    display: false,\n    text: '',\n    padding: {\n      top: 4,\n      bottom: 4\n    }\n  },\n  ticks: {\n    minRotation: 0,\n    maxRotation: 50,\n    mirror: false,\n    textStrokeWidth: 0,\n    textStrokeColor: '',\n    padding: 3,\n    display: true,\n    autoSkip: true,\n    autoSkipPadding: 3,\n    labelOffset: 0,\n    callback: Ticks.formatters.values,\n    minor: {},\n    major: {},\n    align: 'center',\n    crossAlign: 'near',\n    showLabelBackdrop: false,\n    backdropColor: 'rgba(255, 255, 255, 0.75)',\n    backdropPadding: 2\n  }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n  _fallback: false,\n  _scriptable: name => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n  _indexable: name => name !== 'borderDash' && name !== 'tickBorderDash'\n});\ndefaults.describe('scales', {\n  _fallback: 'scale'\n});\ndefaults.describe('scale.ticks', {\n  _scriptable: name => name !== 'backdropPadding' && name !== 'callback',\n  _indexable: name => name !== 'backdropPadding'\n});\nfunction autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n  next = start;\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n  if (len < 2) {\n    return false;\n  }\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\nconst reverseAlign = align => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6;\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\nfunction garbageCollect(caches, length) {\n  each(caches, cache => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n  return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\nfunction titleAlign(align, position, reverse) {\n  let ret = _toLeftRightCenter(align);\n  if (reverse && position !== 'right' || !reverse && position === 'right') {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n  const top = scale.top,\n    left = scale.left,\n    bottom = scale.bottom,\n    right = scale.right,\n    chart = scale.chart;\n  const chartArea = chart.chartArea,\n    scales = chart.scales;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {\n    titleX,\n    titleY,\n    maxWidth,\n    rotation\n  };\n}\nclass Scale extends Element {\n  constructor(cfg) {\n    super();\n    this.id = cfg.id;\n    this.type = cfg.type;\n    this.options = undefined;\n    this.ctx = cfg.ctx;\n    this.chart = cfg.chart;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.maxWidth = undefined;\n    this.maxHeight = undefined;\n    this.paddingTop = undefined;\n    this.paddingBottom = undefined;\n    this.paddingLeft = undefined;\n    this.paddingRight = undefined;\n    this.axis = undefined;\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    this.ticks = [];\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    this._startPixel = undefined;\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n  init(options) {\n    this.options = options.setContext(this.getContext());\n    this.axis = options.axis;\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n  parse(raw, index) {\n    return raw;\n  }\n  getUserBounds() {\n    let _userMin = this._userMin,\n      _userMax = this._userMax,\n      _suggestedMin = this._suggestedMin,\n      _suggestedMax = this._suggestedMax;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isNumberFinite(_userMin),\n      maxDefined: isNumberFinite(_userMax)\n    };\n  }\n  getMinMax(canStack) {\n    let _this$getUserBounds = this.getUserBounds(),\n      min = _this$getUserBounds.min,\n      max = _this$getUserBounds.max,\n      minDefined = _this$getUserBounds.minDefined,\n      maxDefined = _this$getUserBounds.maxDefined;\n    let range;\n    if (minDefined && maxDefined) {\n      return {\n        min,\n        max\n      };\n    }\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n  getTicks() {\n    return this.ticks;\n  }\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n  beforeUpdate() {\n    callback(this.options.beforeUpdate, [this]);\n  }\n  update(maxWidth, maxHeight, margins) {\n    const _this$options3 = this.options,\n      beginAtZero = _this$options3.beginAtZero,\n      grace = _this$options3.grace,\n      tickOpts = _this$options3.ticks;\n    const sampleSize = tickOpts.sampleSize;\n    this.beforeUpdate();\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n    this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n    this.beforeBuildTicks();\n    this.ticks = this.buildTicks() || [];\n    this.afterBuildTicks();\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n    this.configure();\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation();\n    this.afterCalculateLabelRotation();\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n    if (samplingEnabled) {\n      this._convertTicksToLabels(this.ticks);\n    }\n    this.beforeFit();\n    this.fit();\n    this.afterFit();\n    this.afterUpdate();\n  }\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n  afterUpdate() {\n    callback(this.options.afterUpdate, [this]);\n  }\n  beforeSetDimensions() {\n    callback(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = 0;\n      this.bottom = this.height;\n    }\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    callback(this.options.afterSetDimensions, [this]);\n  }\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    callback(this.options[name], [this]);\n  }\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n  beforeTickToLabelConversion() {\n    callback(this.options.beforeTickToLabelConversion, [this]);\n  }\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    callback(this.options.afterTickToLabelConversion, [this]);\n  }\n  beforeCalculateLabelRotation() {\n    callback(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = this.ticks.length;\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    callback(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n  beforeFit() {\n    callback(this.options.beforeFit, [this]);\n  }\n  fit() {\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n    const chart = this.chart,\n      _this$options4 = this.options,\n      tickOpts = _this$options4.ticks,\n      titleOpts = _this$options4.title,\n      gridOpts = _this$options4.grid;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight;\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n      if (tickOpts.display && this.ticks.length) {\n        const _this$_getLabelSizes = this._getLabelSizes(),\n          first = _this$_getLabelSizes.first,\n          last = _this$_getLabelSizes.last,\n          widest = _this$_getLabelSizes.widest,\n          highest = _this$_getLabelSizes.highest;\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n        if (isHorizontal) {\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n    this._handleMargins();\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n  _calculatePadding(first, last, sin, cos) {\n    const _this$options5 = this.options,\n      _this$options5$ticks = _this$options5.ticks,\n      align = _this$options5$ticks.align,\n      padding = _this$options5$ticks.padding,\n      position = _this$options5.position;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n  afterFit() {\n    callback(this.options.afterFit, [this]);\n  }\n  isHorizontal() {\n    const _this$options6 = this.options,\n      axis = _this$options6.axis,\n      position = _this$options6.position;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  isFullSize() {\n    return this.options.fullSize;\n  }\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n    this.generateTickLabels(ticks);\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n    this.afterTickToLabelConversion();\n  }\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n    }\n    return labelSizes;\n  }\n  _computeLabelSizes(ticks, length) {\n    const ctx = this.ctx,\n      caches = this._longestTextCache;\n    const widths = [];\n    const heights = [];\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n    for (i = 0; i < length; ++i) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {\n        data: {},\n        gc: []\n      };\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n    const valueAt = idx => ({\n      width: widths[idx] || 0,\n      height: heights[idx] || 0\n    });\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights\n    };\n  }\n  getLabelForValue(value) {\n    return value;\n  }\n  getPixelForValue(value, index) {\n    return NaN;\n  }\n  getValueForPixel(pixel) {}\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n  getBaseValue() {\n    const min = this.min,\n      max = this.max;\n    return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n  }\n  getContext(index) {\n    const ticks = this.ticks || [];\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n    return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n  }\n  _isVisible() {\n    const display = this.options.display;\n    if (display !== 'auto') {\n      return !!display;\n    }\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const grid = options.grid,\n      position = options.position;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function (pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const optsAtIndex = grid.setContext(this.getContext(i));\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndex.borderDash || [];\n      const borderDashOffset = optsAtIndex.borderDashOffset;\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n      lineValue = getPixelForGridLine(this, i, offset);\n      if (lineValue === undefined) {\n        continue;\n      }\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset\n      });\n    }\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n    return items;\n  }\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const position = options.position,\n      optionTicks = options.ticks;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const align = optionTicks.align,\n      crossAlign = optionTicks.crossAlign,\n      padding = optionTicks.padding,\n      mirror = optionTicks.mirror;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n      if (isHorizontal) {\n        x = pixel;\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n      let backdrop;\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n        let top = y + textOffset - labelPadding.top;\n        let left = x - labelPadding.left;\n        switch (textBaseline) {\n          case 'middle':\n            top -= height / 2;\n            break;\n          case 'bottom':\n            top -= height;\n            break;\n        }\n        switch (textAlign) {\n          case 'center':\n            left -= width / 2;\n            break;\n          case 'right':\n            left -= width;\n            break;\n        }\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n          color: optsAtIndex.backdropColor\n        };\n      }\n      items.push({\n        rotation,\n        label,\n        font,\n        color,\n        strokeColor,\n        strokeWidth,\n        textOffset,\n        textAlign: tickTextAlign,\n        textBaseline,\n        translation: [x, y],\n        backdrop\n      });\n    }\n    return items;\n  }\n  _getXAxisLabelAlignment() {\n    const _this$options7 = this.options,\n      position = _this$options7.position,\n      ticks = _this$options7.ticks;\n    const rotation = -toRadians(this.labelRotation);\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n    let align = 'center';\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n    return align;\n  }\n  _getYAxisLabelAlignment(tl) {\n    const _this$options8 = this.options,\n      position = _this$options8.position,\n      _this$options8$ticks = _this$options8.ticks,\n      crossAlign = _this$options8$ticks.crossAlign,\n      mirror = _this$options8$ticks.mirror,\n      padding = _this$options8$ticks.padding;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n    let textAlign;\n    let x;\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= widest / 2;\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= widest / 2;\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n    return {\n      textAlign,\n      x\n    };\n  }\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n    const chart = this.chart;\n    const position = this.options.position;\n    if (position === 'left' || position === 'right') {\n      return {\n        top: 0,\n        left: this.left,\n        bottom: chart.height,\n        right: this.right\n      };\n    }\n    if (position === 'top' || position === 'bottom') {\n      return {\n        top: this.top,\n        left: 0,\n        bottom: this.bottom,\n        right: chart.width\n      };\n    }\n  }\n  drawBackground() {\n    const ctx = this.ctx,\n      backgroundColor = this.options.backgroundColor,\n      left = this.left,\n      top = this.top,\n      width = this.width,\n      height = this.height;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n        if (grid.drawOnChartArea) {\n          drawLine({\n            x: item.x1,\n            y: item.y1\n          }, {\n            x: item.x2,\n            y: item.y2\n          }, item);\n        }\n        if (grid.drawTicks) {\n          drawLine({\n            x: item.tx1,\n            y: item.ty1\n          }, {\n            x: item.tx2,\n            y: item.ty2\n          }, {\n            color: item.tickColor,\n            width: item.tickWidth,\n            borderDash: item.tickBorderDash,\n            borderDashOffset: item.tickBorderDashOffset\n          });\n        }\n      }\n    }\n  }\n  drawBorder() {\n    const chart = this.chart,\n      ctx = this.ctx,\n      grid = this.options.grid;\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.borderWidth;\n    ctx.strokeStyle = borderOpts.borderColor;\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n    ctx.restore();\n  }\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n    if (!optionTicks.display) {\n      return;\n    }\n    const ctx = this.ctx;\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    let i, ilen;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      const item = items[i];\n      const tickFont = item.font;\n      const label = item.label;\n      if (item.backdrop) {\n        ctx.fillStyle = item.backdrop.color;\n        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n      }\n      let y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, item);\n    }\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n  drawTitle() {\n    const ctx = this.ctx,\n      _this$options9 = this.options,\n      position = _this$options9.position,\n      title = _this$options9.title,\n      reverse = _this$options9.reverse;\n    if (!title.display) {\n      return;\n    }\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n    const _titleArgs = titleArgs(this, offset, position, align),\n      titleX = _titleArgs.titleX,\n      titleY = _titleArgs.titleY,\n      maxWidth = _titleArgs.maxWidth,\n      rotation = _titleArgs.rotation;\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY]\n    });\n  }\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      return [{\n        z: tz,\n        draw: chartArea => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n    return [{\n      z: gz,\n      draw: chartArea => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: gz + 1,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: chartArea => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\nclass TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n    if (isIChartComponent(proto)) {\n      parentScope = this.register(proto);\n    }\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n    if (id in items) {\n      return scope;\n    }\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n    return scope;\n  }\n  get(id) {\n    return this.items[id];\n  }\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n    if (id in items) {\n      delete items[id];\n    }\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\nfunction registerDefaults(item, scope, parentScope) {\n  const itemDefaults = merge(Object.create(null), [parentScope ? defaults.get(parentScope) : {}, defaults.get(scope), item.defaults]);\n  defaults.set(scope, itemDefaults);\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\nclass Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n  add() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    this._each('register', args);\n  }\n  remove() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    this._each('unregister', args);\n  }\n  addControllers() {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n    this._each('register', args, this.controllers);\n  }\n  addElements() {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    this._each('register', args, this.elements);\n  }\n  addPlugins() {\n    for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n      args[_key5] = arguments[_key5];\n    }\n    this._each('register', args, this.plugins);\n  }\n  addScales() {\n    for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n      args[_key6] = arguments[_key6];\n    }\n    this._each('register', args, this.scales);\n  }\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n  removeControllers() {\n    for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n      args[_key7] = arguments[_key7];\n    }\n    this._each('unregister', args, this.controllers);\n  }\n  removeElements() {\n    for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n      args[_key8] = arguments[_key8];\n    }\n    this._each('unregister', args, this.elements);\n  }\n  removePlugins() {\n    for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n      args[_key9] = arguments[_key9];\n    }\n    this._each('unregister', args, this.plugins);\n  }\n  removeScales() {\n    for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n      args[_key10] = arguments[_key10];\n    }\n    this._each('unregister', args, this.scales);\n  }\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n        this._exec(method, reg, arg);\n      } else {\n        each(arg, item => {\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    callback(component['before' + camelMethod], [], component);\n    registry[method](component);\n    callback(component['after' + camelMethod], [], component);\n  }\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    return this.plugins;\n  }\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n}\nvar registry = new Registry();\nclass ScatterController extends DatasetController {\n  update(mode) {\n    const meta = this._cachedMeta;\n    const _meta$data2 = meta.data,\n      points = _meta$data2 === void 0 ? [] : _meta$data2;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let _getStartAndCountOfVi2 = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),\n      start = _getStartAndCountOfVi2.start,\n      count = _getStartAndCountOfVi2.count;\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    if (this.options.showLine) {\n      const line = meta.dataset,\n        _dataset = meta._dataset;\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    }\n    this.updateElements(points, start, count, mode);\n  }\n  addElements() {\n    const showLine = this.options.showLine;\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = registry.getElement('line');\n    }\n    super.addElements();\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const _this$_cachedMeta4 = this._cachedMeta,\n      iScale = _this$_cachedMeta4.iScale,\n      vScale = _this$_cachedMeta4.vScale,\n      _stacked = _this$_cachedMeta4._stacked,\n      _dataset = _this$_cachedMeta4._dataset;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const _this$options10 = this.options,\n      spanGaps = _this$options10.spanGaps,\n      segment = _this$options10.segment;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: 'point'\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(item) {\n          return '(' + item.label + ', ' + item.formattedValue + ')';\n        }\n      }\n    }\n  },\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\nvar controllers = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  BarController: BarController,\n  BubbleController: BubbleController,\n  DoughnutController: DoughnutController,\n  LineController: LineController,\n  PolarAreaController: PolarAreaController,\n  PieController: PieController,\n  RadarController: RadarController,\n  ScatterController: ScatterController\n});\nfunction abstract() {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n  constructor(options) {\n    this.options = options || {};\n  }\n  init(chartOptions) {}\n  formats() {\n    return abstract();\n  }\n  parse(value, format) {\n    return abstract();\n  }\n  format(timestamp, format) {\n    return abstract();\n  }\n  add(timestamp, amount, unit) {\n    return abstract();\n  }\n  diff(a, b, unit) {\n    return abstract();\n  }\n  startOf(timestamp, unit, weekday) {\n    return abstract();\n  }\n  endOf(timestamp, unit) {\n    return abstract();\n  }\n}\nDateAdapter.override = function (members) {\n  Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n  _date: DateAdapter\n};\nfunction binarySearch(metaset, axis, value, intersect) {\n  const controller = metaset.controller,\n    data = metaset.data,\n    _sorted = metaset._sorted;\n  const iScale = controller._cachedMeta.iScale;\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {\n          lo: start.lo,\n          hi: end.hi\n        };\n      }\n    }\n  }\n  return {\n    lo: 0,\n    hi: data.length - 1\n  };\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const _metasets$i = metasets[i],\n      index = _metasets$i.index,\n      data = _metasets$i.data;\n    const _binarySearch = binarySearch(metasets[i], axis, value, intersect),\n      lo = _binarySearch.lo,\n      hi = _binarySearch.hi;\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n  return function (pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n  const evaluationFunc = function (element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({\n        element,\n        datasetIndex,\n        index\n      });\n    }\n  };\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n  function evaluationFunc(element, datasetIndex, index) {\n    const _element$getProps = element.getProps(['startAngle', 'endAngle'], useFinalPosition),\n      startAngle = _element$getProps.startAngle,\n      endAngle = _element$getProps.endAngle;\n    const _getAngleFromPoint = getAngleFromPoint(element, {\n        x: position.x,\n        y: position.y\n      }),\n      angle = _getAngleFromPoint.angle;\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({\n        element,\n        datasetIndex,\n        index\n      });\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{\n        element,\n        datasetIndex,\n        index\n      }];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      items.push({\n        element,\n        datasetIndex,\n        index\n      });\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n  return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({\n        element,\n        datasetIndex,\n        index\n      });\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\nvar Interaction = {\n  evaluateInteractionItems,\n  modes: {\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n      if (!items.length) {\n        return [];\n      }\n      chart.getSortedVisibleDatasetMetas().forEach(meta => {\n        const index = items[0].index;\n        const element = meta.data[index];\n        if (element && !element.skip) {\n          elements.push({\n            element,\n            datasetIndex: meta.index,\n            index\n          });\n        }\n      });\n      return elements;\n    },\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({\n            element: data[i],\n            datasetIndex,\n            index: i\n          });\n        }\n      }\n      return items;\n    },\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n  });\n}\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    var _box = box;\n    pos = _box.position;\n    var _box$options = _box.options;\n    stack = _box$options.stack;\n    var _box$options$stackWei = _box$options.stackWeight;\n    stackWeight = _box$options$stackWei === void 0 ? 1 : _box$options$stackWei;\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && pos + stack,\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const stack = wrap.stack,\n      pos = wrap.pos,\n      stackWeight = wrap.stackWeight;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {\n      count: 0,\n      placed: 0,\n      weight: 0,\n      size: 0\n    });\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const vBoxMaxWidth = params.vBoxMaxWidth,\n    hBoxMaxHeight = params.hBoxMaxHeight;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const fullSize = layout.box.fullSize;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n  const pos = layout.pos,\n    box = layout.box;\n  const maxPadding = chartArea.maxPadding;\n  if (!isObject(pos)) {\n    if (layout.size) {\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {\n      size: 0,\n      count: 1\n    };\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n  return layout.horizontal ? {\n    same: widthChanged,\n    other: heightChanged\n  } : {\n    same: heightChanged,\n    other: widthChanged\n  };\n}\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function marginForPositions(positions) {\n    const margin = {\n      left: 0,\n      top: 0,\n      right: 0,\n      bottom: 0\n    };\n    positions.forEach(pos => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n  return horizontal ? marginForPositions(['left', 'right']) : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n    box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n    const _updateDims = updateDims(chartArea, params, layout, stacks),\n      same = _updateDims.same,\n      other = _updateDims.other;\n    refit |= same && refitBoxes.length;\n    changed = changed || other;\n    if (!box.fullSize) {\n      refitBoxes.push(layout);\n    }\n  }\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let x = chartArea.x,\n    y = chartArea.y;\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {\n      count: 1,\n      placed: 0,\n      weight: 1\n    };\n    const weight = layout.stackWeight / stack.weight || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n  chartArea.x = x;\n  chartArea.y = y;\n}\ndefaults.set('layout', {\n  autoPadding: true,\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n});\nvar layouts = {\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    item._layers = item._layers || function () {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n    chart.boxes.push(item);\n  },\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w\n    };\n    each(boxes.chartArea, layout => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {\n        left: 0,\n        top: 0,\n        right: 0,\n        bottom: 0\n      });\n    });\n  }\n};\nclass BasePlatform {\n  acquireContext(canvas, aspectRatio) {}\n  releaseContext(context) {\n    return false;\n  }\n  addEventListener(chart, type, listener) {}\n  removeEventListener(chart, type, listener) {}\n  getDevicePixelRatio() {\n    return 1;\n  }\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n  isAttached(canvas) {\n    return true;\n  }\n  updateConfig(config) {}\n}\nclass BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n  style.display = style.display || 'block';\n  style.boxSizing = style.boxSizing || 'border-box';\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n  return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n  passive: true\n} : false;\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const _getRelativePosition = getRelativePosition(event, chart),\n    x = _getRelativePosition.x,\n    y = _getRelativePosition.y;\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null\n  };\n}\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {\n    childList: true,\n    subtree: true\n  });\n  return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {\n    childList: true,\n    subtree: true\n  });\n  return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      listener();\n    }\n  }, window);\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled(event => {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart, args => {\n    const event = args[0];\n    return [event, event.offsetX, event.offsetY];\n  });\n  addListener(canvas, type, proxy);\n  return proxy;\n}\nclass DomPlatform extends BasePlatform {\n  acquireContext(canvas, aspectRatio) {\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n    if (context && context.canvas === canvas) {\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n    return null;\n  }\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach(prop => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n    const style = initial.style || {};\n    Object.keys(style).forEach(key => {\n      canvas.style[key] = style[key];\n    });\n    canvas.width = canvas.width;\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n  addEventListener(chart, type, listener) {\n    this.removeEventListener(chart, type);\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n    if (!proxy) {\n      return;\n    }\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\nclass PluginService {\n  constructor() {\n    this._init = [];\n  }\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n    return true;\n  }\n  invalidate() {\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n    const descriptors = this._cache = this._createDescriptors(chart);\n    this._notifyStateChanges(chart);\n    return descriptors;\n  }\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n  return {\n    plugins,\n    localIds\n  };\n}\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\nfunction createDescriptors(chart, _ref4, options, all) {\n  let plugins = _ref4.plugins,\n    localIds = _ref4.localIds;\n  const result = [];\n  const context = chart.getContext();\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {\n        plugin,\n        local: localIds[id]\n      }, opts, context)\n    });\n  }\n  return result;\n}\nfunction pluginOpts(config, _ref5, opts, context) {\n  let plugin = _ref5.plugin,\n    local = _ref5.local;\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\nfunction getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\nfunction determineAxis(id, scaleOptions) {\n  if (id === 'x' || id === 'y') {\n    return id;\n  }\n  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {\n    scales: {}\n  };\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const firstIDs = Object.create(null);\n  const scales = Object.create(null);\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    firstIDs[axis] = firstIDs[axis] || id;\n    scales[id] = mergeIf(Object.create(null), [{\n      axis\n    }, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{\n        axis\n      }, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales;\n}\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n  initOptions(config);\n  return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\nclass Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n  get platform() {\n    return this._config.platform;\n  }\n  get type() {\n    return this._config.type;\n  }\n  set type(type) {\n    this._config.type = type;\n  }\n  get data() {\n    return this._config.data;\n  }\n  set data(data) {\n    this._config.data = initData(data);\n  }\n  get options() {\n    return this._config.options;\n  }\n  set options(options) {\n    this._config.options = options;\n  }\n  get plugins() {\n    return this._config.plugins;\n  }\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType, () => [[`datasets.${datasetType}`, '']]);\n  }\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`, () => [[`datasets.${datasetType}.transitions.${transition}`, `transitions.${transition}`], [`datasets.${datasetType}`, '']]);\n  }\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`, () => [[`datasets.${datasetType}.elements.${elementType}`, `datasets.${datasetType}`, `elements.${elementType}`, '']]);\n  }\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`, () => [[`plugins.${id}`, ...(plugin.additionalOptionScopes || [])]]);\n  }\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const options = this.options,\n      type = this.type;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n    const scopes = new Set();\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n  chartOptionScopes() {\n    const options = this.options,\n      type = this.type;\n    return [options, overrides[type] || {}, defaults.datasets[type] || {}, {\n      type\n    }, defaults, descriptors];\n  }\n  resolveNamedOptions(scopes, names, context) {\n    let prefixes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [''];\n    const result = {\n      $shared: true\n    };\n    const _getResolver = getResolver(this._resolverCache, scopes, prefixes),\n      resolver = _getResolver.resolver,\n      subPrefixes = _getResolver.subPrefixes;\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n  createResolver(scopes, context) {\n    let prefixes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [''];\n    let descriptorDefaults = arguments.length > 3 ? arguments[3] : undefined;\n    const _getResolver2 = getResolver(this._resolverCache, scopes, prefixes),\n      resolver = _getResolver2.resolver;\n    return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n  }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\nconst hasFunction = value => isObject(value) && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n  const _descriptors2 = _descriptors(proxy),\n    isScriptable = _descriptors2.isScriptable,\n    isIndexable = _descriptors2.isIndexable;\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n      return true;\n    }\n  }\n  return false;\n}\nvar version = \"3.9.1\";\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n  return function (a, b) {\n    return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n  };\n}\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  chart.notifyPlugins('afterRender');\n  callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n  return item;\n}\nconst instances = {};\nconst getChart = key => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter(c => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\nclass Chart {\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n    }\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n    instances[this.id] = this;\n    if (!context || !canvas) {\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n  get aspectRatio() {\n    const _this$options11 = this.options,\n      aspectRatio = _this$options11.aspectRatio,\n      maintainAspectRatio = _this$options11.maintainAspectRatio,\n      width = this.width,\n      height = this.height,\n      _aspectRatio = this._aspectRatio;\n    if (!isNullOrUndef(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (maintainAspectRatio && _aspectRatio) {\n      return _aspectRatio;\n    }\n    return height ? width / height : null;\n  }\n  get data() {\n    return this.config.data;\n  }\n  set data(data) {\n    this.config.data = data;\n  }\n  get options() {\n    return this._options;\n  }\n  set options(options) {\n    this.config.options = options;\n  }\n  _initialize() {\n    this.notifyPlugins('beforeInit');\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n    this.bindEvents();\n    this.notifyPlugins('afterInit');\n    return this;\n  }\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {\n        width,\n        height\n      };\n    }\n  }\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n    this.notifyPlugins('resize', {\n      size: newSize\n    });\n    callback(options.onResize, [this, newSize], this);\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        this.render();\n      }\n    }\n  }\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n    if (scaleOpts) {\n      items = items.concat(Object.keys(scaleOpts).map(id => {\n        const scaleOptions = scaleOpts[id];\n        const axis = determineAxis(id, scaleOptions);\n        const isRadial = axis === 'r';\n        const isHorizontal = axis === 'x';\n        return {\n          options: scaleOptions,\n          dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n          dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n        };\n      }));\n    }\n    each(items, item => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n      scale.init(scaleOptions, options);\n    });\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n    each(scales, scale => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n  _removeUnreferencedMetasets() {\n    const metasets = this._metasets,\n      datasets = this.data.datasets;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n    this._removeUnreferencedMetasets();\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const _defaults$datasets$ty = defaults.datasets[type],\n          datasetElementType = _defaults$datasets$ty.datasetElementType,\n          dataElementType = _defaults$datasets$ty.dataElementType;\n        Object.assign(ControllerClass.prototype, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n    this._updateMetasets();\n    return newControllers;\n  }\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n  update(mode) {\n    const config = this.config;\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n    this._plugins.invalidate();\n    if (this.notifyPlugins('beforeUpdate', {\n      mode,\n      cancelable: true\n    }) === false) {\n      return;\n    }\n    const newControllers = this.buildOrUpdateControllers();\n    this.notifyPlugins('beforeElementsUpdate');\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const _this$getDatasetMeta = this.getDatasetMeta(i),\n        controller = _this$getDatasetMeta.controller;\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n    if (!animsDisabled) {\n      each(newControllers, controller => {\n        controller.reset();\n      });\n    }\n    this._updateDatasets(mode);\n    this.notifyPlugins('afterUpdate', {\n      mode\n    });\n    this._layers.sort(compare2Level('z', '_idx'));\n    const _active = this._active,\n      _lastEvent = this._lastEvent;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n    this.render();\n  }\n  _updateScales() {\n    each(this.scales, scale => {\n      layouts.removeBox(this, scale);\n    });\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n  _updateHiddenIndices() {\n    const _hiddenIndices = this._hiddenIndices;\n    const changes = this._getUniformDataChanges() || [];\n    for (const _ref6 of changes) {\n      const method = _ref6.method;\n      const start = _ref6.start;\n      const count = _ref6.count;\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = idx => new Set(_dataChanges.filter(c => c[0] === idx).map((c, i) => i + ',' + c.splice(1).join(',')));\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet).map(c => c.split(',')).map(a => ({\n      method: a[1],\n      start: +a[2],\n      count: +a[3]\n    }));\n  }\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {\n      cancelable: true\n    }) === false) {\n      return;\n    }\n    layouts.update(this, this.width, this.height, minPadding);\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n    this._layers = [];\n    each(this.boxes, box => {\n      if (noArea && box.position === 'chartArea') {\n        return;\n      }\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n    this.notifyPlugins('afterLayout');\n  }\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {\n      mode,\n      cancelable: true\n    }) === false) {\n      return;\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({\n        datasetIndex: i\n      }) : mode);\n    }\n    this.notifyPlugins('afterDatasetsUpdate', {\n      mode\n    });\n  }\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {\n      meta,\n      index,\n      mode,\n      cancelable: true\n    };\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n    meta.controller._update(mode);\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n  render() {\n    if (this.notifyPlugins('beforeRender', {\n      cancelable: true\n    }) === false) {\n      return;\n    }\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({\n        chart: this\n      });\n    }\n  }\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const _this$_resizeBeforeDr = this._resizeBeforeDraw,\n        width = _this$_resizeBeforeDr.width,\n        height = _this$_resizeBeforeDr.height;\n      this._resize(width, height);\n      this._resizeBeforeDraw = null;\n    }\n    this.clear();\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n    if (this.notifyPlugins('beforeDraw', {\n      cancelable: true\n    }) === false) {\n      return;\n    }\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this._drawDatasets();\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this.notifyPlugins('afterDraw');\n  }\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {\n      cancelable: true\n    }) === false) {\n      return;\n    }\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = this.chartArea;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n    if (useClip) {\n      clipArea(ctx, {\n        left: clip.left === false ? 0 : area.left - clip.left,\n        right: clip.right === false ? this.width : area.right + clip.right,\n        top: clip.top === false ? 0 : area.top - clip.top,\n        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n      });\n    }\n    meta.controller.draw();\n    if (useClip) {\n      unclipArea(ctx);\n    }\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n    return [];\n  }\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n    return meta;\n  }\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {\n      chart: this,\n      type: 'chart'\n    }));\n  }\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n    const meta = this.getDatasetMeta(datasetIndex);\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      anims.update(meta, {\n        visible\n      });\n      this.update(ctx => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const canvas = this.canvas,\n      ctx = this.ctx;\n    this._stop();\n    this.config.clearCache();\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n    this.notifyPlugins('destroy');\n    delete instances[this.id];\n    this.notifyPlugins('afterDestroy');\n  }\n  toBase64Image() {\n    return this.canvas.toDataURL(...arguments);\n  }\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n    each(this.options.events, type => _add(type, listener));\n  }\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n    let detached;\n    const attached = () => {\n      _remove('attach', attached);\n      this.attached = true;\n      this.resize();\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n    detached = () => {\n      this.attached = false;\n      _remove('resize', listener);\n      this._stop();\n      this._resize(0, 0);\n      _add('attach', attached);\n    };\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(_ref7 => {\n      let datasetIndex = _ref7.datasetIndex,\n        index = _ref7.index;\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed) {\n      this._active = active;\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = plugin => (plugin.options.events || this.options.events).includes(e.native.type);\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n    if (changed || args.changed) {\n      this.render();\n    }\n    return this;\n  }\n  _handleEvent(e, replay, inChartArea) {\n    const _this$_active = this._active,\n      lastActive = _this$_active === void 0 ? [] : _this$_active,\n      options = this.options;\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n    if (inChartArea) {\n      this._lastEvent = null;\n      callback(options.onHover, [e, active, this], this);\n      if (isClick) {\n        callback(options.onClick, [e, active, this], this);\n      }\n    }\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n    this._lastEvent = lastEvent;\n    return changed;\n  }\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\nconst invalidatePlugins = () => each(Chart.instances, chart => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n  defaults: {\n    enumerable,\n    value: defaults\n  },\n  instances: {\n    enumerable,\n    value: instances\n  },\n  overrides: {\n    enumerable,\n    value: overrides\n  },\n  registry: {\n    enumerable,\n    value: registry\n  },\n  version: {\n    enumerable,\n    value: version\n  },\n  getChart: {\n    enumerable,\n    value: getChart\n  },\n  register: {\n    enumerable,\n    value: function () {\n      registry.add(...arguments);\n      invalidatePlugins();\n    }\n  },\n  unregister: {\n    enumerable,\n    value: function () {\n      registry.remove(...arguments);\n      invalidatePlugins();\n    }\n  }\n});\nfunction clipArc(ctx, element, endAngle) {\n  const startAngle = element.startAngle,\n    pixelMargin = element.pixelMargin,\n    x = element.x,\n    y = element.y,\n    outerRadius = element.outerRadius,\n    innerRadius = element.innerRadius;\n  let angleMargin = pixelMargin / outerRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n  const computeOuterLimit = val => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n  };\n}\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta)\n  };\n}\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n  const x = element.x,\n    y = element.y,\n    start = element.startAngle,\n    pixelMargin = element.pixelMargin,\n    innerR = element.innerRadius;\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  let spacingOffset = 0;\n  const alpha = end - start;\n  if (spacing) {\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const _parseBorderRadius$ = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle),\n    outerStart = _parseBorderRadius$.outerStart,\n    outerEnd = _parseBorderRadius$.outerEnd,\n    innerStart = _parseBorderRadius$.innerStart,\n    innerEnd = _parseBorderRadius$.innerEnd;\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n  if (circular) {\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n    ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, startAngle + innerStart / innerRadius, true);\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n  ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n  const fullCircles = element.fullCircles,\n    startAngle = element.startAngle,\n    circumference = element.circumference;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, startAngle + TAU, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + circumference % TAU;\n      if (circumference % TAU === 0) {\n        endAngle += TAU;\n      }\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n  const x = element.x,\n    y = element.y,\n    startAngle = element.startAngle,\n    pixelMargin = element.pixelMargin,\n    fullCircles = element.fullCircles;\n  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n  const innerRadius = element.innerRadius + pixelMargin;\n  let i;\n  if (inner) {\n    clipArc(ctx, element, startAngle + TAU);\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle, circular) {\n  const options = element.options;\n  const borderWidth = options.borderWidth,\n    borderJoinStyle = options.borderJoinStyle;\n  const inner = options.borderAlign === 'inner';\n  if (!borderWidth) {\n    return;\n  }\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n  if (element.fullCircles) {\n    drawFullCircleBorders(ctx, element, inner);\n  }\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.stroke();\n}\nclass ArcElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(chartX, chartY, useFinalPosition) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const _getAngleFromPoint2 = getAngleFromPoint(point, {\n        x: chartX,\n        y: chartY\n      }),\n      angle = _getAngleFromPoint2.angle,\n      distance = _getAngleFromPoint2.distance;\n    const _this$getProps2 = this.getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),\n      startAngle = _this$getProps2.startAngle,\n      endAngle = _this$getProps2.endAngle,\n      innerRadius = _this$getProps2.innerRadius,\n      outerRadius = _this$getProps2.outerRadius,\n      circumference = _this$getProps2.circumference;\n    const rAdjust = this.options.spacing / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n    return betweenAngles && withinRadius;\n  }\n  getCenterPoint(useFinalPosition) {\n    const _this$getProps3 = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),\n      x = _this$getProps3.x,\n      y = _this$getProps3.y,\n      startAngle = _this$getProps3.startAngle,\n      endAngle = _this$getProps3.endAngle,\n      innerRadius = _this$getProps3.innerRadius,\n      outerRadius = _this$getProps3.outerRadius;\n    const _this$options12 = this.options,\n      offset = _this$options12.offset,\n      spacing = _this$options12.spacing;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n  tooltipPosition(useFinalPosition) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n  draw(ctx) {\n    const options = this.options,\n      circumference = this.circumference;\n    const offset = (options.offset || 0) / 2;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n    ctx.save();\n    let radiusOffset = 0;\n    if (offset) {\n      radiusOffset = offset / 2;\n      const halfAngle = (this.startAngle + this.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n      if (this.circumference >= PI) {\n        radiusOffset = offset;\n      }\n    }\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    const endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);\n    ctx.restore();\n  }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n  borderAlign: 'center',\n  borderColor: '#fff',\n  borderJoinStyle: undefined,\n  borderRadius: 0,\n  borderWidth: 2,\n  offset: 0,\n  spacing: 0,\n  angle: undefined,\n  circular: true\n};\nArcElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor'\n};\nfunction setStyle(ctx, options) {\n  let style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : options;\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n  return lineTo;\n}\nfunction pathVars(points, segment) {\n  let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  const count = points.length;\n  const _params$start = params.start,\n    paramsStart = _params$start === void 0 ? 0 : _params$start,\n    _params$end = params.end,\n    paramsEnd = _params$end === void 0 ? count - 1 : _params$end;\n  const segmentStart = segment.start,\n    segmentEnd = segment.end;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\nfunction pathSegment(ctx, line, segment, params) {\n  const points = line.points,\n    options = line.options;\n  const _pathVars = pathVars(points, segment, params),\n    count = _pathVars.count,\n    start = _pathVars.start,\n    loop = _pathVars.loop,\n    ilen = _pathVars.ilen;\n  const lineMethod = getLineMethod(options);\n  let _ref8 = params || {},\n    _ref8$move = _ref8.move,\n    move = _ref8$move === void 0 ? true : _ref8$move,\n    reverse = _ref8.reverse;\n  let i, point, prev;\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n    if (point.skip) {\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    prev = point;\n  }\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n  return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const _pathVars2 = pathVars(points, segment, params),\n    count = _pathVars2.count,\n    start = _pathVars2.start,\n    ilen = _pathVars2.ilen;\n  const _ref9 = params || {},\n    _ref9$move = _ref9.move,\n    move = _ref9$move === void 0 ? true : _ref9$move,\n    reverse = _ref9.reverse;\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n  const pointIndex = index => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n    if (point.skip) {\n      continue;\n    }\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    lastY = y;\n  }\n  drawX();\n}\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n  return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n  const segments = line.segments,\n    options = line.options;\n  const segmentMethod = _getSegmentMethod(line);\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {\n      start,\n      end: start + count - 1\n    })) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\nclass LineElement extends Element {\n  constructor(cfg) {\n    super();\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n  get points() {\n    return this._points;\n  }\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {\n      property,\n      start: value,\n      end: value\n    });\n    if (!segments.length) {\n      return;\n    }\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const _segments$i = segments[i],\n        start = _segments$i.start,\n        end = _segments$i.end;\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n    start = start || 0;\n    count = count || this.points.length - start;\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {\n        start,\n        end: start + count - 1\n      });\n    }\n    return !!loop;\n  }\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n    if (points.length && options.borderWidth) {\n      ctx.save();\n      draw(ctx, this, start, count);\n      ctx.restore();\n    }\n    if (this.animated) {\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n  borderCapStyle: 'butt',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderWidth: 3,\n  capBezierPoints: true,\n  cubicInterpolationMode: 'default',\n  fill: false,\n  spanGaps: false,\n  stepped: false,\n  tension: 0\n};\nLineElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: name => name !== 'borderDash' && name !== 'fill'\n};\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  const options = el.options;\n  const _el$getProps = el.getProps([axis], useFinalPosition),\n    value = _el$getProps[axis];\n  return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    const options = this.options;\n    const _this$getProps4 = this.getProps(['x', 'y'], useFinalPosition),\n      x = _this$getProps4.x,\n      y = _this$getProps4.y;\n    return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange$1(this, mouseX, 'x', useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange$1(this, mouseY, 'y', useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const _this$getProps5 = this.getProps(['x', 'y'], useFinalPosition),\n      x = _this$getProps5.x,\n      y = _this$getProps5.y;\n    return {\n      x,\n      y\n    };\n  }\n  size(options) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n  draw(ctx, area) {\n    const options = this.options;\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n  getRange() {\n    const options = this.options || {};\n    return options.radius + options.hitRadius;\n  }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: 'circle',\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nfunction getBarBounds(bar, useFinalPosition) {\n  const _bar$getProps = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition),\n    x = _bar$getProps.x,\n    y = _bar$getProps.y,\n    base = _bar$getProps.base,\n    width = _bar$getProps.width,\n    height = _bar$getProps.height;\n  let left, right, top, bottom, half;\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n  return {\n    left,\n    top,\n    right,\n    bottom\n  };\n}\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const _bar$getProps2 = bar.getProps(['enableBorderRadius']),\n    enableBorderRadius = _bar$getProps2.enableBorderRadius;\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n  const enableBorder = enableBorderRadius || isObject(value);\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n      }\n    }\n  };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n  return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount) {\n  let refRect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\nclass BarElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  draw(ctx) {\n    const inflateAmount = this.inflateAmount,\n      _this$options13 = this.options,\n      borderColor = _this$options13.borderColor,\n      backgroundColor = _this$options13.backgroundColor;\n    const _boundingRects = boundingRects(this),\n      inner = _boundingRects.inner,\n      outer = _boundingRects.outer;\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n    ctx.save();\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n    ctx.restore();\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const _this$getProps6 = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition),\n      x = _this$getProps6.x,\n      y = _this$getProps6.y,\n      base = _this$getProps6.base,\n      horizontal = _this$getProps6.horizontal;\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n  borderSkipped: 'start',\n  borderWidth: 0,\n  borderRadius: 0,\n  inflateAmount: 'auto',\n  pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nvar elements = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ArcElement: ArcElement,\n  LineElement: LineElement,\n  PointElement: PointElement,\n  BarElement: BarElement\n});\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  const samples = options.samples || availableWidth;\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n  const decimated = [];\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const _data$a = data[a],\n      pointAx = _data$a.x,\n      pointAy = _data$a.y;\n    maxArea = area = -1;\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      const lastIndex = i - 1;\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex1]), {}, {\n            x: avgX\n          }));\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex2]), {}, {\n            x: avgX\n          }));\n        }\n      }\n      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n  return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {\n      value: data\n    });\n  }\n}\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach(dataset => {\n    cleanDecimatedDataset(dataset);\n  });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n  let start = 0;\n  let count;\n  const iScale = meta.iScale;\n  const _iScale$getUserBounds = iScale.getUserBounds(),\n    min = _iScale$getUserBounds.min,\n    max = _iScale$getUserBounds.max,\n    minDefined = _iScale$getUserBounds.minDefined,\n    maxDefined = _iScale$getUserBounds.maxDefined;\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n  return {\n    start,\n    count\n  };\n}\nvar plugin_decimation = {\n  id: 'decimation',\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false\n  },\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n    const availableWidth = chart.width;\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const _data = dataset._data,\n        indexAxis = dataset.indexAxis;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        return;\n      }\n      if (!meta.controller.supportsDecimation) {\n        return;\n      }\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        return;\n      }\n      if (chart.options.parsing) {\n        return;\n      }\n      let _getStartAndCountOfVi3 = getStartAndCountOfVisiblePointsSimplified(meta, data),\n        start = _getStartAndCountOfVi3.start,\n        count = _getStartAndCountOfVi3.count;\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n      if (isNullOrUndef(_data)) {\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function () {\n            return this._decimated;\n          },\n          set: function (d) {\n            this._data = d;\n          }\n        });\n      }\n      let decimated;\n      switch (options.algorithm) {\n        case 'lttb':\n          decimated = lttbDecimation(data, start, count, availableWidth, options);\n          break;\n        case 'min-max':\n          decimated = minMaxDecimation(data, start, count, availableWidth);\n          break;\n        default:\n          throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n      dataset._decimated = decimated;\n    });\n  },\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\nfunction _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n  for (const segment of segments) {\n    let start = segment.start,\n      end = segment.end;\n    end = _findSegmentEnd(start, end, points);\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n    if (!target.segments) {\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n    const targetSegments = _boundSegments(target, bounds);\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {\n    property,\n    start,\n    end\n  };\n}\nfunction _pointsFromSegments(boundary, line) {\n  const _ref10 = boundary || {},\n    _ref10$x = _ref10.x,\n    x = _ref10$x === void 0 ? null : _ref10$x,\n    _ref10$y = _ref10.y,\n    y = _ref10$y === void 0 ? null : _ref10$y;\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(_ref11 => {\n    let start = _ref11.start,\n      end = _ref11.end;\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({\n        x: first.x,\n        y\n      });\n      points.push({\n        x: last.x,\n        y\n      });\n    } else if (x !== null) {\n      points.push({\n        x,\n        y: first.y\n      });\n      points.push({\n        x,\n        y: last.y\n      });\n    }\n  });\n  return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n  for (; end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\nfunction _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n  return points.length ? new LineElement({\n    points,\n    options: {\n      tension: 0\n    },\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\nfunction _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\nfunction _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n  if (!propagate) {\n    return fill;\n  }\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isNumberFinite(fill)) {\n      return fill;\n    }\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n    if (target.visible) {\n      return fill;\n    }\n    visited.push(fill);\n    fill = target.fill;\n  }\n  return false;\n}\nfunction _decodeFill(line, index, count) {\n  const fill = parseFillOption(line);\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n  let target = parseFloat(fill);\n  if (isNumberFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n  return target;\n}\nfunction _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n  let value;\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n  if (fill === false || fill === null) {\n    return false;\n  }\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\nfunction _buildStackLine(source) {\n  const scale = source.scale,\n    index = source.index,\n    line = source.line;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({\n    x: null,\n    y: scale.bottom\n  }, line));\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({\n    points,\n    options: {}\n  });\n}\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const _findPoint = findPoint(line, sourcePoint, 'x'),\n      first = _findPoint.first,\n      last = _findPoint.last,\n      point = _findPoint.point;\n    if (!point || first && last) {\n      continue;\n    }\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {\n    first,\n    last,\n    point\n  };\n}\nclass simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n  pathSegment(ctx, bounds, opts) {\n    const x = this.x,\n      y = this.y,\n      radius = this.radius;\n    bounds = bounds || {\n      start: 0,\n      end: TAU\n    };\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n  interpolate(point) {\n    const x = this.x,\n      y = this.y,\n      radius = this.radius;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\nfunction _getTarget(source) {\n  const chart = source.chart,\n    fill = source.fill,\n    line = source.line;\n  if (isNumberFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n  if (fill === 'shape') {\n    return true;\n  }\n  const boundary = computeBoundary(source);\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n  return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n  const _source$scale = source.scale,\n    scale = _source$scale === void 0 ? {} : _source$scale,\n    fill = source.fill;\n  const pixel = _getTargetPixel(fill, scale);\n  if (isNumberFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n  return null;\n}\nfunction computeCircularBoundary(source) {\n  const scale = source.scale,\n    fill = source.fill;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\nfunction _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const line = source.line,\n    scale = source.scale,\n    axis = source.axis;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const _ref12 = fillOption || {},\n    _ref12$above = _ref12.above,\n    above = _ref12$above === void 0 ? color : _ref12$above,\n    _ref12$below = _ref12.below,\n    below = _ref12$below === void 0 ? color : _ref12$below;\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {\n      line,\n      target,\n      above,\n      below,\n      area,\n      scale,\n      axis\n    });\n    unclipArea(ctx);\n  }\n}\nfunction doFill(ctx, cfg) {\n  const line = cfg.line,\n    target = cfg.target,\n    above = cfg.above,\n    below = cfg.below,\n    area = cfg.area,\n    scale = cfg.scale;\n  const property = line._loop ? 'angle' : cfg.axis;\n  ctx.save();\n  if (property === 'x' && below !== above) {\n    clipVertical(ctx, target, area.top);\n    fill(ctx, {\n      line,\n      target,\n      color: above,\n      scale,\n      property\n    });\n    ctx.restore();\n    ctx.save();\n    clipVertical(ctx, target, area.bottom);\n  }\n  fill(ctx, {\n    line,\n    target,\n    color: below,\n    scale,\n    property\n  });\n  ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n  const segments = target.segments,\n    points = target.points;\n  let first = true;\n  let lineLoop = false;\n  ctx.beginPath();\n  for (const segment of segments) {\n    const start = segment.start,\n      end = segment.end;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {\n      move: lineLoop\n    });\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\nfunction fill(ctx, cfg) {\n  const line = cfg.line,\n    target = cfg.target,\n    property = cfg.property,\n    color = cfg.color,\n    scale = cfg.scale;\n  const segments = _segments(line, target, property);\n  for (const _ref13 of segments) {\n    const src = _ref13.source;\n    const tgt = _ref13.target;\n    const start = _ref13.start;\n    const end = _ref13.end;\n    const _src$style = src.style,\n      _src$style2 = _src$style === void 0 ? {} : _src$style,\n      _src$style2$backgroun = _src$style2.backgroundColor,\n      backgroundColor = _src$style2$backgroun === void 0 ? color : _src$style2$backgroun;\n    const notShape = target !== true;\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n    ctx.beginPath();\n    const lineLoop = !!line.pathSegment(ctx, src);\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n      const targetLoop = !!target.pathSegment(ctx, tgt, {\n        move: lineLoop,\n        reverse: true\n      });\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n    ctx.restore();\n  }\n}\nfunction clipBounds(ctx, scale, bounds) {\n  const _scale$chart$chartAre = scale.chart.chartArea,\n    top = _scale$chart$chartAre.top,\n    bottom = _scale$chart$chartAre.bottom;\n  const _ref14 = bounds || {},\n    property = _ref14.property,\n    start = _ref14.start,\n    end = _ref14.end;\n  if (property === 'x') {\n    ctx.beginPath();\n    ctx.rect(start, top, end - start, bottom - top);\n    ctx.clip();\n  }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\nvar index = {\n  id: 'filler',\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line\n        };\n      }\n      meta.$filler = source;\n      sources.push(source);\n    }\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\nconst getBoxSize = (labelOpts, fontSize) => {\n  let _labelOpts$boxHeight = labelOpts.boxHeight,\n    boxHeight = _labelOpts$boxHeight === void 0 ? fontSize : _labelOpts$boxHeight,\n    _labelOpts$boxWidth = labelOpts.boxWidth,\n    boxWidth = _labelOpts$boxWidth === void 0 ? fontSize : _labelOpts$boxWidth;\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n  constructor(config) {\n    super();\n    this._added = false;\n    this.legendHitBoxes = [];\n    this._hoveredItem = null;\n    this.doughnutMode = false;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter(item => labelOpts.filter(item, this.chart.data));\n    }\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n    this.legendItems = legendItems;\n  }\n  fit() {\n    const options = this.options,\n      ctx = this.ctx;\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const _getBoxSize = getBoxSize(labelOpts, fontSize),\n      boxWidth = _getBoxSize.boxWidth,\n      itemHeight = _getBoxSize.itemHeight;\n    let width, height;\n    ctx.font = labelFont.string;\n    if (this.isHorizontal()) {\n      width = this.maxWidth;\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight;\n      width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    }\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const ctx = this.ctx,\n      maxWidth = this.maxWidth,\n      padding = this.options.labels.padding;\n    const hitboxes = this.legendHitBoxes = [];\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n      hitboxes[i] = {\n        left: 0,\n        top,\n        row,\n        width: itemWidth,\n        height: itemHeight\n      };\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n    return totalHeight;\n  }\n  _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n    const ctx = this.ctx,\n      maxHeight = this.maxHeight,\n      padding = this.options.labels.padding;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n    let left = 0;\n    let col = 0;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({\n          width: currentColWidth,\n          height: currentColHeight\n        });\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n      hitboxes[i] = {\n        left,\n        top: currentColHeight,\n        col,\n        width: itemWidth,\n        height: itemHeight\n      };\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n    totalWidth += currentColWidth;\n    columnSizes.push({\n      width: currentColWidth,\n      height: currentColHeight\n    });\n    return totalWidth;\n  }\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const hitboxes = this.legendHitBoxes,\n      _this$options14 = this.options,\n      align = _this$options14.align,\n      padding = _this$options14.labels.padding,\n      rtl = _this$options14.rtl;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n      this._draw();\n      unclipArea(ctx);\n    }\n  }\n  _draw() {\n    const opts = this.options,\n      columnSizes = this.columnSizes,\n      lineWidths = this.lineWidths,\n      ctx = this.ctx;\n    const align = opts.align,\n      labelOpts = opts.labels;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const fontColor = labelOpts.color,\n      padding = labelOpts.padding;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n    this.drawTitle();\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n    const _getBoxSize2 = getBoxSize(labelOpts, fontSize),\n      boxWidth = _getBoxSize2.boxWidth,\n      boxHeight = _getBoxSize2.boxHeight,\n      itemHeight = _getBoxSize2.itemHeight;\n    const drawLegendBox = function (x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n      ctx.save();\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n      if (labelOpts.usePointStyle) {\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n        ctx.beginPath();\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\n    };\n    const fillText = function (x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n    overrideTextDirection(this.ctx, opts.textDirection);\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor || fontColor;\n      ctx.fillStyle = legendItem.fontColor || fontColor;\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n      rtlHelper.setWidth(this.width);\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n      const realX = rtlHelper.x(x);\n      drawLegendBox(realX, y, legendItem);\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n      fillText(rtlHelper.x(x), y, legendItem);\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    if (!titleOpts.display) {\n      return;\n    }\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n    let left = this.left;\n    let maxWidth = this.width;\n    if (this.isHorizontal()) {\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n    const x = _alignStartEnd(position, left, left + maxWidth);\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n    if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          return this.legendItems[i];\n        }\n      }\n    }\n    return null;\n  }\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        callback(opts.onLeave, [e, previous, this], this);\n      }\n      this._hoveredItem = hoveredItem;\n      if (hoveredItem && !sameItem) {\n        callback(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      callback(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\nvar plugin_legend = {\n  id: 'legend',\n  _element: Legend,\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n    onHover: null,\n    onLeave: null,\n    labels: {\n      color: ctx => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const _chart$legend$options = chart.legend.options.labels,\n          usePointStyle = _chart$legend$options.usePointStyle,\n          pointStyle = _chart$legend$options.pointStyle,\n          textAlign = _chart$legend$options.textAlign,\n          color = _chart$legend$options.color;\n        return chart._getSortedDatasetMetas().map(meta => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: 0,\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: ctx => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: ''\n    }\n  },\n  descriptors: {\n    _scriptable: name => !name.startsWith('on'),\n    labels: {\n      _scriptable: name => !['generateLabels', 'filter', 'sort'].includes(name)\n    }\n  }\n};\nclass Title extends Element {\n  constructor(config) {\n    super();\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n    this.left = 0;\n    this.top = 0;\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n  _drawArgs(offset) {\n    const top = this.top,\n      left = this.left,\n      bottom = this.bottom,\n      right = this.right,\n      options = this.options;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {\n      titleX,\n      titleY,\n      maxWidth,\n      rotation\n    };\n  }\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    if (!opts.display) {\n      return;\n    }\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const _this$_drawArgs = this._drawArgs(offset),\n      titleX = _this$_drawArgs.titleX,\n      titleY = _this$_drawArgs.titleY,\n      maxWidth = _this$_drawArgs.maxWidth,\n      rotation = _this$_drawArgs.rotation;\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY]\n    });\n  }\n}\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\nvar plugin_title = {\n  id: 'title',\n  _element: Title,\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold'\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false\n  }\n};\nconst map = new WeakMap();\nvar plugin_subtitle = {\n  id: 'subtitle',\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal'\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false\n  }\n};\nconst positioners = {\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        x += pos.x;\n        y += pos.y;\n        ++count;\n      }\n    }\n    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n    return {\n      x,\n      y\n    };\n  }\n};\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n  return base;\n}\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\nfunction createTooltipItem(chart, item) {\n  const element = item.element,\n    datasetIndex = item.datasetIndex,\n    index = item.index;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const _controller$getLabelA = controller.getLabelAndValue(index),\n    label = _controller$getLabelA.label,\n    value = _controller$getLabelA.value;\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const body = tooltip.body,\n    footer = tooltip.footer,\n    title = tooltip.title;\n  const boxWidth = options.boxWidth,\n    boxHeight = options.boxHeight;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n  }\n  let widthPadding = 0;\n  const maxLineWidth = function (line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n  widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n  each(body, bodyItem => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return {\n    width,\n    height\n  };\n}\nfunction determineYAlign(chart, size) {\n  const y = size.y,\n    height = size.height;\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > chart.height - height / 2) {\n    return 'bottom';\n  }\n  return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const x = size.x,\n    width = size.width;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n  const x = size.x,\n    width = size.width;\n  const chartWidth = chart.width,\n    _chart$chartArea = chart.chartArea,\n    left = _chart$chartArea.left,\n    right = _chart$chartArea.right;\n  let xAlign = 'center';\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n  return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\nfunction alignX(size, xAlign) {\n  let x = size.x,\n    width = size.width;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= width / 2;\n  }\n  return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n  let y = size.y,\n    height = size.height;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= height / 2;\n  }\n  return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const caretSize = options.caretSize,\n    caretPadding = options.caretPadding,\n    cornerRadius = options.cornerRadius;\n  const xAlign = alignment.xAlign,\n    yAlign = alignment.yAlign;\n  const paddingAndSize = caretSize + caretPadding;\n  const _toTRBLCorners = toTRBLCorners(cornerRadius),\n    topLeft = _toTRBLCorners.topLeft,\n    topRight = _toTRBLCorners.topRight,\n    bottomLeft = _toTRBLCorners.bottomLeft,\n    bottomRight = _toTRBLCorners.bottomRight;\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n  return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n  constructor(config) {\n    super();\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart || config._chart;\n    this._chart = this.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n    if (cached) {\n      return cached;\n    }\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getContext() {\n    return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n  getTitle(context, options) {\n    const callbacks = options.callbacks;\n    const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n    const title = callbacks.title.apply(this, [context]);\n    const afterTitle = callbacks.afterTitle.apply(this, [context]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n    return lines;\n  }\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n  }\n  getBody(tooltipItems, options) {\n    const callbacks = options.callbacks;\n    const bodyItems = [];\n    each(tooltipItems, context => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n      pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n      bodyItems.push(bodyItem);\n    });\n    return bodyItems;\n  }\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n  }\n  getFooter(tooltipItems, options) {\n    const callbacks = options.callbacks;\n    const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n    const footer = callbacks.footer.apply(this, [tooltipItems]);\n    const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n    return lines;\n  }\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n    each(tooltipItems, context => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(scoped.labelColor.call(this, context));\n      labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n      labelTextColors.push(scoped.labelTextColor.call(this, context));\n    });\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n    if (changed && options.external) {\n      options.external.call(this, {\n        chart: this.chart,\n        tooltip: this,\n        replay\n      });\n    }\n  }\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n  getCaretPosition(tooltipPoint, size, options) {\n    const xAlign = this.xAlign,\n      yAlign = this.yAlign;\n    const caretSize = options.caretSize,\n      cornerRadius = options.cornerRadius;\n    const _toTRBLCorners2 = toTRBLCorners(cornerRadius),\n      topLeft = _toTRBLCorners2.topLeft,\n      topRight = _toTRBLCorners2.topRight,\n      bottomLeft = _toTRBLCorners2.bottomLeft,\n      bottomRight = _toTRBLCorners2.bottomRight;\n    const ptX = tooltipPoint.x,\n      ptY = tooltipPoint.y;\n    const width = size.width,\n      height = size.height;\n    let x1, x2, x3, y1, y2, y3;\n    if (yAlign === 'center') {\n      y2 = ptY + height / 2;\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {\n      x1,\n      x2,\n      x3,\n      y1,\n      y2,\n      y3\n    };\n  }\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.titleAlign, options);\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing;\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing;\n        }\n      }\n    }\n  }\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColors = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const boxHeight = options.boxHeight,\n      boxWidth = options.boxWidth,\n      boxPadding = options.boxPadding;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2,\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.fillStyle = labelColors.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : labelColors.borderWidth || 1;\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.setLineDash(labelColors.borderDash || []);\n      ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n      const borderRadius = toTRBLCorners(labelColors.borderRadius);\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius\n        });\n        ctx.fill();\n        ctx.stroke();\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius\n        });\n        ctx.fill();\n      } else {\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n  drawBody(pt, ctx, options) {\n    const body = this.body;\n    const bodySpacing = options.bodySpacing,\n      bodyAlign = options.bodyAlign,\n      displayColors = options.displayColors,\n      boxHeight = options.boxHeight,\n      boxWidth = options.boxWidth,\n      boxPadding = options.boxPadding;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n    const fillLineOfText = function (line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n      lines = bodyItem.lines;\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n      each(bodyItem.after, fillLineOfText);\n    }\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing;\n  }\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n      footerFont = toFont(options.footerFont);\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const xAlign = this.xAlign,\n      yAlign = this.yAlign;\n    const x = pt.x,\n      y = pt.y;\n    const width = tooltipSize.width,\n      height = tooltipSize.height;\n    const _toTRBLCorners3 = toTRBLCorners(options.cornerRadius),\n      topLeft = _toTRBLCorners3.topLeft,\n      topRight = _toTRBLCorners3.topRight,\n      bottomLeft = _toTRBLCorners3.bottomLeft,\n      bottomRight = _toTRBLCorners3.bottomRight;\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n    ctx.fill();\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n  _willRender() {\n    return !!this.opacity;\n  }\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n    if (!opacity) {\n      return;\n    }\n    this._updateAnimationTarget(options);\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n    const padding = toPadding(options.padding);\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n      this.drawBackground(pt, ctx, tooltipSize, options);\n      overrideTextDirection(ctx, options.textDirection);\n      pt.y += padding.top;\n      this.drawTitle(pt, ctx, options);\n      this.drawBody(pt, ctx, options);\n      this.drawFooter(pt, ctx, options);\n      restoreTextDirection(ctx, options.textDirection);\n      ctx.restore();\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(_ref15 => {\n      let datasetIndex = _ref15.datasetIndex,\n        index = _ref15.index;\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n  handleEvent(e, replay) {\n    let inChartArea = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n    const positionChanged = this._positionChanged(active, e);\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n    if (changed) {\n      this._active = active;\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n        this.update(true, replay);\n      }\n    }\n    return changed;\n  }\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n    if (options.reverse) {\n      active.reverse();\n    }\n    return active;\n  }\n  _positionChanged(active, e) {\n    const caretX = this.caretX,\n      caretY = this.caretY,\n      options = this.options;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({\n        chart,\n        options\n      });\n    }\n  },\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n      if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n        return;\n      }\n      tooltip.draw(chart.ctx);\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        args.changed = true;\n      }\n    }\n  },\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold'\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {},\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold'\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart'\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY']\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: {\n      beforeTitle: noop,\n      title(tooltipItems) {\n        if (tooltipItems.length > 0) {\n          const item = tooltipItems[0];\n          const labels = item.chart.data.labels;\n          const labelCount = labels ? labels.length : 0;\n          if (this && this.options && this.options.mode === 'dataset') {\n            return item.dataset.label || '';\n          } else if (item.label) {\n            return item.label;\n          } else if (labelCount > 0 && item.dataIndex < labelCount) {\n            return labels[item.dataIndex];\n          }\n        }\n        return '';\n      },\n      afterTitle: noop,\n      beforeBody: noop,\n      beforeLabel: noop,\n      label(tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n          return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n          label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n          label += value;\n        }\n        return label;\n      },\n      labelColor(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          borderColor: options.borderColor,\n          backgroundColor: options.backgroundColor,\n          borderWidth: options.borderWidth,\n          borderDash: options.borderDash,\n          borderDashOffset: options.borderDashOffset,\n          borderRadius: 0\n        };\n      },\n      labelTextColor() {\n        return this.options.bodyColor;\n      },\n      labelPointStyle(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          pointStyle: options.pointStyle,\n          rotation: options.rotation\n        };\n      },\n      afterLabel: noop,\n      afterBody: noop,\n      beforeFooter: noop,\n      footer: noop,\n      afterFooter: noop\n    }\n  },\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n  descriptors: {\n    _scriptable: name => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n  additionalOptionScopes: ['interaction']\n};\nvar plugins = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  Decimation: plugin_decimation,\n  Filler: index,\n  Legend: plugin_legend,\n  SubTitle: plugin_subtitle,\n  Title: plugin_title,\n  Tooltip: plugin_tooltip\n});\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({\n      index,\n      label: raw\n    });\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const _ref16 of added) {\n        const index = _ref16.index;\n        const label = _ref16.label;\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n  determineDataLimits() {\n    const _this$getUserBounds2 = this.getUserBounds(),\n      minDefined = _this$getUserBounds2.minDefined,\n      maxDefined = _this$getUserBounds2.maxDefined;\n    let _this$getMinMax = this.getMinMax(true),\n      min = _this$getMinMax.min,\n      max = _this$getMinMax.max;\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n    labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n    for (let value = min; value <= max; value++) {\n      ticks.push({\n        value\n      });\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n      return labels[value];\n    }\n    return value;\n  }\n  configure() {\n    super.configure();\n    if (!this.isHorizontal()) {\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n  getBasePixel() {\n    return this.bottom;\n  }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n  ticks: {\n    callback: CategoryScale.prototype.getLabelForValue\n  }\n};\nfunction generateTicks$1(generationOptions, dataRange) {\n  const ticks = [];\n  const MIN_SPACING = 1e-14;\n  const bounds = generationOptions.bounds,\n    step = generationOptions.step,\n    min = generationOptions.min,\n    max = generationOptions.max,\n    precision = generationOptions.precision,\n    count = generationOptions.count,\n    maxTicks = generationOptions.maxTicks,\n    maxDigits = generationOptions.maxDigits,\n    includeBounds = generationOptions.includeBounds;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const rmin = dataRange.min,\n    rmax = dataRange.max;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{\n      value: rmin\n    }, {\n      value: rmax\n    }];\n  }\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n  if (!isNullOrUndef(precision)) {\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n  const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({\n        value: min\n      });\n      if (niceMin < min) {\n        j++;\n      }\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n  for (; j < numSpaces; ++j) {\n    ticks.push({\n      value: Math.round((niceMin + j * spacing) * factor) / factor\n    });\n  }\n  if (maxDefined && includeBounds && niceMax !== max) {\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({\n        value: max\n      });\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({\n      value: niceMax\n    });\n  }\n  return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, _ref17) {\n  let horizontal = _ref17.horizontal,\n    minRotation = _ref17.minRotation;\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n    return +raw;\n  }\n  handleTickRangeOptions() {\n    const beginAtZero = this.options.beginAtZero;\n    const _this$getUserBounds3 = this.getUserBounds(),\n      minDefined = _this$getUserBounds3.minDefined,\n      maxDefined = _this$getUserBounds3.maxDefined;\n    let min = this.min,\n      max = this.max;\n    const setMin = v => min = minDefined ? min : v;\n    const setMax = v => max = maxDefined ? max : v;\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n    if (min === max) {\n      let offset = 1;\n      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n        offset = Math.abs(max * 0.05);\n      }\n      setMax(max + offset);\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    let maxTicksLimit = tickOpts.maxTicksLimit,\n      stepSize = tickOpts.stepSize;\n    let maxTicks;\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n    return maxTicks;\n  }\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n    super.configure();\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\nclass LinearScale extends LinearScaleBase {\n  determineDataLimits() {\n    const _this$getMinMax2 = this.getMinMax(true),\n      min = _this$getMinMax2.min,\n      max = _this$getMinMax2.max;\n    this.min = isNumberFinite(min) ? min : 0;\n    this.max = isNumberFinite(max) ? max : 1;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\nfunction isMajor(tickVal) {\n  const remain = tickVal / Math.pow(10, Math.floor(log10(tickVal)));\n  return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n  const endExp = Math.floor(log10(dataRange.max));\n  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n  const ticks = [];\n  let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n  let exp = Math.floor(log10(tickVal));\n  let significand = Math.floor(tickVal / Math.pow(10, exp));\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  do {\n    ticks.push({\n      value: tickVal,\n      major: isMajor(tickVal)\n    });\n    ++significand;\n    if (significand === 10) {\n      significand = 1;\n      ++exp;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n  } while (exp < endExp || exp === endExp && significand < endSignificand);\n  const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n  ticks.push({\n    value: lastTick,\n    major: isMajor(tickVal)\n  });\n  return ticks;\n}\nclass LogarithmicScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isNumberFinite(value) && value > 0 ? value : null;\n  }\n  determineDataLimits() {\n    const _this$getMinMax3 = this.getMinMax(true),\n      min = _this$getMinMax3.min,\n      max = _this$getMinMax3.max;\n    this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n    this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n    this.handleTickRangeOptions();\n  }\n  handleTickRangeOptions() {\n    const _this$getUserBounds4 = this.getUserBounds(),\n      minDefined = _this$getUserBounds4.minDefined,\n      maxDefined = _this$getUserBounds4.maxDefined;\n    let min = this.min;\n    let max = this.max;\n    const setMin = v => min = minDefined ? min : v;\n    const setMax = v => max = maxDefined ? max : v;\n    const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n    if (min === max) {\n      if (min <= 0) {\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(exp(min, -1));\n        setMax(exp(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(exp(max, -1));\n    }\n    if (max <= 0) {\n      setMax(exp(min, +1));\n    }\n    if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n      setMin(exp(min, -1));\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n  configure() {\n    const start = this.min;\n    super.configure();\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - size / 2,\n      end: pos + size / 2\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\nfunction fitWithPointLabels(scale) {\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n  scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const extra = getTickBackdropHeight(opts) / 2;\n  const outerDistance = scale.drawingArea;\n  const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const size = labelSizes[i];\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    items.push({\n      x: pointLabelPosition.x,\n      y,\n      textAlign,\n      left,\n      top: y,\n      right: left + size.w,\n      bottom: y + size.h\n    });\n  }\n  return items;\n}\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n  return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= w / 2;\n  }\n  return x;\n}\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= h / 2;\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n  const ctx = scale.ctx,\n    pointLabels = scale.options.pointLabels;\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    const plFont = toFont(optsAtIndex.font);\n    const _scale$_pointLabelIte = scale._pointLabelItems[i],\n      x = _scale$_pointLabelIte.x,\n      y = _scale$_pointLabelIte.y,\n      textAlign = _scale$_pointLabelIte.textAlign,\n      left = _scale$_pointLabelIte.left,\n      top = _scale$_pointLabelIte.top,\n      right = _scale$_pointLabelIte.right,\n      bottom = _scale$_pointLabelIte.bottom;\n    const backdropColor = optsAtIndex.backdropColor;\n    if (!isNullOrUndef(backdropColor)) {\n      const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n      const padding = toPadding(optsAtIndex.backdropPadding);\n      ctx.fillStyle = backdropColor;\n      const backdropLeft = left - padding.left;\n      const backdropTop = top - padding.top;\n      const backdropWidth = right - left + padding.width;\n      const backdropHeight = bottom - top + padding.height;\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: backdropLeft,\n          y: backdropTop,\n          w: backdropWidth,\n          h: backdropHeight,\n          radius: borderRadius\n        });\n        ctx.fill();\n      } else {\n        ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n      }\n    }\n    renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n      color: optsAtIndex.color,\n      textAlign: textAlign,\n      textBaseline: 'middle'\n    });\n  }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const ctx = scale.ctx;\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n  const color = gridLineOpts.color,\n    lineWidth = gridLineOpts.lineWidth;\n  if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n    return;\n  }\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(gridLineOpts.borderDash);\n  ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\nclass RadialLinearScale extends LinearScaleBase {\n  constructor(cfg) {\n    super(cfg);\n    this.xCenter = undefined;\n    this.yCenter = undefined;\n    this.drawingArea = undefined;\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n  setDimensions() {\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n  determineDataLimits() {\n    const _this$getMinMax4 = this.getMinMax(false),\n      min = _this$getMinMax4.min,\n      max = _this$getMinMax4.max;\n    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n    this._pointLabels = this.getLabels().map((value, index) => {\n      const label = callback(this.options.pointLabels.callback, [value, index], this);\n      return label || label === 0 ? label : '';\n    }).filter((v, i) => this.chart.getDataVisibility(i));\n  }\n  fit() {\n    const opts = this.options;\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n  getPointPosition(index, distanceFromCenter) {\n    let additionalAngle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n  getPointLabelPosition(index) {\n    const _this$_pointLabelItem = this._pointLabelItems[index],\n      left = _this$_pointLabelItem.left,\n      top = _this$_pointLabelItem.top,\n      right = _this$_pointLabelItem.right,\n      bottom = _this$_pointLabelItem.bottom;\n    return {\n      left,\n      top,\n      right,\n      bottom\n    };\n  }\n  drawBackground() {\n    const _this$options15 = this.options,\n      backgroundColor = _this$options15.backgroundColor,\n      circular = _this$options15.grid.circular;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const angleLines = opts.angleLines,\n      grid = opts.grid;\n    const labelCount = this._pointLabels.length;\n    let i, offset, position;\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const optsAtIndex = grid.setContext(this.getContext(index - 1));\n          drawRadiusLine(this, optsAtIndex, offset, labelCount);\n        }\n      });\n    }\n    if (angleLines.display) {\n      ctx.save();\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const color = optsAtIndex.color,\n          lineWidth = optsAtIndex.lineWidth;\n        if (!lineWidth || !color) {\n          continue;\n        }\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n      ctx.restore();\n    }\n  }\n  drawBorder() {}\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    if (!tickOpts.display) {\n      return;\n    }\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    this.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n      }\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color\n      });\n    });\n    ctx.restore();\n  }\n  drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: 'chartArea',\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0.0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: undefined,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback(label) {\n      return label;\n    },\n    padding: 5,\n    centerPointLabels: false\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  'angleLines.color': 'borderColor',\n  'pointLabels.color': 'color',\n  'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: 'grid'\n  }\n};\nconst INTERVALS = {\n  millisecond: {\n    common: true,\n    size: 1,\n    steps: 1000\n  },\n  second: {\n    common: true,\n    size: 1000,\n    steps: 60\n  },\n  minute: {\n    common: true,\n    size: 60000,\n    steps: 60\n  },\n  hour: {\n    common: true,\n    size: 3600000,\n    steps: 24\n  },\n  day: {\n    common: true,\n    size: 86400000,\n    steps: 30\n  },\n  week: {\n    common: false,\n    size: 604800000,\n    steps: 4\n  },\n  month: {\n    common: true,\n    size: 2.628e9,\n    steps: 12\n  },\n  quarter: {\n    common: false,\n    size: 7.884e9,\n    steps: 4\n  },\n  year: {\n    common: true,\n    size: 3.154e10\n  }\n};\nconst UNITS = Object.keys(INTERVALS);\nfunction sorter(a, b) {\n  return a - b;\n}\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n  const adapter = scale._adapter;\n  const _scale$_parseOpts = scale._parseOpts,\n    parser = _scale$_parseOpts.parser,\n    round = _scale$_parseOpts.round,\n    isoWeekday = _scale$_parseOpts.isoWeekday;\n  let value = input;\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n  if (!isNumberFinite(value)) {\n    value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n  }\n  if (value === null) {\n    return null;\n  }\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n  }\n  return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n  return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const _lookup2 = _lookup(timestamps, time),\n      lo = _lookup2.lo,\n      hi = _lookup2.hi;\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n  return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n  constructor(props) {\n    super(props);\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    this._unit = 'day';\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n  init(scaleOpts, opts) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n    adapter.init(opts);\n    mergeIf(time.displayFormats, adapter.formats());\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n    super.init(scaleOpts);\n    this._normalized = opts.normalized;\n  }\n  parse(raw, index) {\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    let _this$getUserBounds5 = this.getUserBounds(),\n      min = _this$getUserBounds5.min,\n      max = _this$getUserBounds5.max,\n      minDefined = _this$getUserBounds5.minDefined,\n      maxDefined = _this$getUserBounds5.maxDefined;\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n    if (!minDefined || !maxDefined) {\n      _applyBounds(this._getLabelBounds());\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {\n      min,\n      max\n    };\n  }\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n    const min = this.min;\n    const max = this.max;\n    const ticks = _filterBetween(timestamps, min, max);\n    this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n    if (options.reverse) {\n      ticks.reverse();\n    }\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n  afterAutoSkip() {\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n  initOffsets(timestamps) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n    this._offsets = {\n      start,\n      end,\n      factor: 1 / (start + 1 + end)\n    };\n  }\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n    return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n  }\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n    const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    const formatter = options.ticks.callback;\n    return formatter ? callback(formatter, [label, index, ticks], this) : label;\n  }\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n    return {\n      w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n      h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n    };\n  }\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const metas = this.getMatchingVisibleMetas();\n    if (this._normalized && metas.length) {\n      return this._cache.data = metas[0].controller.getAllParsedValues(this);\n    }\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n    return this._cache.data = this.normalize(timestamps);\n  }\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n    return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n  }\n  normalize(values) {\n    return _arrayUnique(values.sort(sorter));\n  }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n  bounds: 'data',\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: 'millisecond',\n    displayFormats: {}\n  },\n  ticks: {\n    source: 'auto',\n    major: {\n      enabled: false\n    }\n  }\n};\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      var _lookupByKey2 = _lookupByKey(table, 'pos', val);\n      lo = _lookupByKey2.lo;\n      hi = _lookupByKey2.hi;\n    }\n    var _table$lo = table[lo];\n    prevSource = _table$lo.pos;\n    prevTarget = _table$lo.time;\n    var _table$hi = table[hi];\n    nextSource = _table$hi.pos;\n    nextTarget = _table$hi.time;\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      var _lookupByKey3 = _lookupByKey(table, 'time', val);\n      lo = _lookupByKey3.lo;\n      hi = _lookupByKey3.hi;\n    }\n    var _table$lo2 = table[lo];\n    prevSource = _table$lo2.time;\n    prevTarget = _table$lo2.pos;\n    var _table$hi2 = table[hi];\n    nextSource = _table$hi2.time;\n    nextTarget = _table$hi2.pos;\n  }\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n  constructor(props) {\n    super(props);\n    this._table = [];\n    this._minPos = undefined;\n    this._tableRange = undefined;\n  }\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n  buildLookupTable(timestamps) {\n    const min = this.min,\n      max = this.max;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n    if (items.length < 2) {\n      return [{\n        time: min,\n        pos: 0\n      }, {\n        time: max,\n        pos: 1\n      }];\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({\n          time: curr,\n          pos: i / (ilen - 1)\n        });\n      }\n    }\n    return table;\n  }\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n    return timestamps;\n  }\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\nvar scales = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  CategoryScale: CategoryScale,\n  LinearScale: LinearScale,\n  LogarithmicScale: LogarithmicScale,\n  RadialLinearScale: RadialLinearScale,\n  TimeScale: TimeScale,\n  TimeSeriesScale: TimeSeriesScale\n});\nconst registerables = [controllers, elements, plugins, scales];\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };","import { Chart, registerables } from '../dist/chart.mjs';\nChart.register(...registerables);\nexport default Chart;","import Chart from 'chart.js/auto';\nimport { Utils } from 'chart.js';\n\nChart.defaults.color = \"#fff\";\n\nconst CHARTS = {\n  'astronomer-monthly-statistics': 'past three years',\n  'astronomer-rig-statistics': 'past year by telescope'\n};\n\nfunction buildMonthlyChart() {\n  const element = document.\n                  getElementById('astronomer-monthly-statistics-chart');\n\n  const data = JSON.parse(element.dataset.chartData);\n\n  const chart = new Chart(element, {\n      type: 'bar',\n      data,\n      options: {\n          scales: {\n            y: {\n              beginAtZero: true\n            }\n          },\n          plugins: {\n            title: {\n              display: true,\n              text: 'Imaging Hours by Month (Past Three Years)'\n            }\n          }\n      }\n  });\n}\n\nfunction buildRigChart() {\n  const element = document.\n                  getElementById('astronomer-rig-statistics-chart');\n\n  const data = JSON.parse(element.dataset.chartData);\n\n  const chart = new Chart(element, {\n      type: 'bar',\n      data,\n      options: {\n          scales: {\n            x: { stacked: true },\n            y: {\n              beginAtZero: true,\n              stacked: true\n            }\n          },\n          plugins: {\n            title: {\n              display: true,\n              text: 'Imaging Hours by Telescope (Past Year)'\n            }\n          }\n      }\n  });\n}\n\nlet currentChart = 'astronomer-monthly-statistics';\n\nfunction toggleChart() {\n  const oldChart = currentChart;\n\n  if (currentChart === 'astronomer-monthly-statistics') {\n    currentChart = 'astronomer-rig-statistics';\n  } else {\n    currentChart = 'astronomer-monthly-statistics';\n  }\n\n  document.getElementById(oldChart).classList.add('hidden');\n  document.getElementById(currentChart).classList.remove('hidden');\n  document.getElementById('stat-chart-toggle').textContent =\n    `Show ${CHARTS[oldChart]}`;\n}\n\nconst initialize = () => {\n  if (document.body.dataset.controller !== \"astronomers\" ||\n      document.body.dataset.action !== \"show\") {\n    return;\n  }\n\n  buildMonthlyChart();\n  buildRigChart();\n\n  document\n    .getElementById('stat-chart-toggle')\n    .addEventListener('click', toggleChart);\n};\n\nexport default { initialize };\n","import Chart from 'chart.js/auto';\nimport { Utils } from 'chart.js';\n\nChart.defaults.color = \"#fff\";\n\nconst CHARTS = {};\n\nfunction buildCharts() {\n  Array.from(document.getElementsByClassName('session-statistic-graph'))\n    .forEach((element) => {\n      const dataset = JSON.parse(element.dataset.chartData);\n\n      const chart = new Chart(element, {\n        type: 'line',\n        data: { datasets: [dataset] },\n        options: {\n            scales: {\n              x: {\n                type: 'linear',\n                ticks: { stepSize: 1 },\n              },\n            },\n            plugins: {\n              title: {\n                display: true,\n                text: dataset.label,\n              }\n            }\n        }\n      });\n\n      CHARTS[element.dataset.statisticType] = chart;\n    });\n}\n\nfunction updateCard(newContent) {\n  document.getElementById('session-card-update-target').innerHTML = newContent;\n}\n\nfunction updateChart(chart, newData) {\n  chart.data.datasets[0].data = newData;\n  chart.update();\n}\n\nfunction reloadCard() {\n  fetch(window.location.href + '.json')\n    .then(response => response.json())\n    .then((data) => {\n      updateCard(data.card);\n\n      Array.from(document.getElementsByClassName('session-statistic-graph'))\n        .forEach((element) => {\n          const statisticType = element.dataset.statisticType;\n          const dataset = data[statisticType];\n          const chart = CHARTS[statisticType];\n\n          updateChart(chart, dataset.data);\n        });\n\n        setTimeout(() => reloadCard(), 30 * 1000);\n      });\n}\n\nconst initialize = () => {\n  if (document.body.dataset.controller !== \"sessions\" ||\n      document.body.dataset.action !== \"show\") {\n    return;\n  }\n\n  const chart = buildCharts();\n  setTimeout(() => { reloadCard() }, 30 * 1000);\n};\n\nexport default { initialize };\n","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nimport \"trix\"\nimport \"@rails/actiontext\"\n\nimport Rails from \"@rails/ujs\"\nimport * as ActiveStorage from \"@rails/activestorage\"\nimport AstronomerPage from \"../pages/astronomer_page\"\nimport SessionPage from \"../pages/session_page\"\n\nRails.start();\nActiveStorage.start();\n\nwindow.onload = () => {\n  AstronomerPage.initialize();\n  SessionPage.initialize();\n};\n\nrequire(\"trix\")\nrequire(\"@rails/actiontext\")\n"],"sourceRoot":""}